[ Java奮戦記_目次 ]
Java奮戦記 あとがき
Java で何か作りたいが、作って終わりではつまらない。
そう思って始めた、この囲碁Viewer作り。はたして、作って終わりになっていないのか?
思い付きから始まり、完成してから数年経った今、履歴をまとめたついでに、少々の感想を…
- 今でも使っています
- オブジェクト指向の感覚に近づくまで
- 技術的な後悔 MVC の失敗
- コメントファーストと Javadoc
- 囲碁の棋譜事情について
- 最後に Interest-Driven Learning
今でも使っています
どうにか完成した囲碁Viewer、今でも使っています。
理由は、「徹底的に低機能」「簡素でわがままなデザイン」「とりあえずフリーズしない」の3点だと思っています。
当初の想定通り、プロの棋譜を再生することに主眼が置かれているので、参考図機能がないことは、全く問題になりませんでした。
ひたすら、ネットで手に入れた棋譜ファイルを見ています。検討好きな人には、参考図機能がないことが致命傷になるかもしれません。この辺り、誰の要望を実現するのか、という視点の重要性を感じます。
また、低機能にしたことで、作成のプレッシャーが低くなりました。初めから様々な機能を想定していたら、完成まで至らなかったかもしれません。
検討機能については、思ったほど使わないなあ、という印象ではあります。でも、あってよかった、と思っています。パンダネットが使えないタイトル戦生中継のとき、手順をこの囲碁Viewerで並べつつ、検討機能を使って「次の一手」を予想したりしていました。
ただし、今後、検討機能の出番が少なくなりそうです。
ダイアログのデザインも功を奏しました。低機能に合った、簡素で自分好みな体裁にしました。
碁盤と碁石のテイストと大きさは、日本棋院の「幽玄の間」のサービスを参考にしました。ネット上で見た碁盤の中で、一番見やすく感じたからです。
でも、碁盤や碁石の画像データをコピーしてパクる、ということはしませんでした。
使用する際に愛着が持てるよう、また、自分なりに手作り感を出すために、碁盤はウィンドウズのペイントを駆使して作成し、碁石も、私物の碁石をデジカメで撮って加工しました。碁石の周りを透過にするテクニックがよくわからず苦労しましたが、ネット検索を駆使してどうにか乗り越えました。
ネット上で提供されていた無料の囲碁ビューワーより、メニューやボタンが少ないことも、気に入っている点です。
「フリーズしない」というのは、偶然の産物です。その最大の理由が、スレッドの処理です。自動再生時にスレッドを使用しますが、この Thread クラスの使い方が、とにかくよくわからなかった。
サンプルソースを見て、真似事で凌いだのですが、いまだに何が正しいのかを知りません。率直に言って、フリーズしたことがないから、とりあえずよしとしている、というのが本音です。
→
ページトップへ
オブジェクト指向の感覚にたどり着くまで
プログラムがメソッドをいくつも持っていて処理を行う、というオブジェクト指向の世界は、手続き型言語のバッチ処理で1件1件処理していくことしか知らない私には、イメージを掴むことさえ難しく、相当の違和感がありました。どうにかして感覚を掴もうと思い、「Javaは関数言語のようなものだ」とか、「汎用機におけるサブプロを作っているようなものだ」とか言い聞かせつつ、とにかくこれまでの経験と重なる箇所をなんとか手繰り寄せて、完成に漕ぎ着けたという実感です。
そういえば、作成しながら、「なんとなくPL1でコーディングしているみたいだなあ」という印象を抱いたことを覚えています。理由は、PL1にも関数機能があることと、文の最後がセミコロン(;)になっているところです。こうした、初心者的な気づきを、自分なりのJava吸収に活かしていました。
抽象クラスやインターフェースの存在は、いまでも印象に残っています。デザインパターン云々の話を理解するうえでも、この二つを使った抽象化はとても印象的でした。特に、インターフェースを使用した抽象化は、素朴で便利で格好いいなあ、と思ったものです。インターフェースでメソッドを定義し、それを実装するクラスで処理を記述する、というアイディアは、とても新鮮でした。
仕事でJavaを学ぶ機会がまったくなかった私ですが、それでも、自分が使うことを目的にして作成する過程で、オブジェクト指向の感覚に対する気づきがありました。オブジェクト指向を知りたい、という方には、本当に初歩的な入門書等に触れたのち、小さなプログラムで構わないので、自分が使いたいものを自分で作ってみる、という学習方法もあることを提案しておきます。
→
ページトップへ
技術的な後悔 MVCの失敗
MVC(Model View Controller)の考え方を実現することには、失敗してしまいました。端的に言って、モデルとコントローラーの役割について、理解していなかった。この点は、今回の試みで一番の後悔です。
あと、これは MVC というよりも、オブジェクト指向全般に対する理解不足の話ですが、もっともっと、オブジェクトそれ自体の振る舞いに任せる感覚を身につけるべきでした。こういうところで、手続き型言語ばかりに携わってきて、項目の値を判別して分岐処理にしてしまう、という弊害が出たように思います。
→
ページトップへ
コメントファーストと Javadoc
私はプログラマーとして経験を重ねるうち、コメント行から先にコーディングするようになっていました。理由は、コメントを記述しつつ、プログラムの構造化を検討できるからです。コメントなしでソースを記述してしまうと、だらだら処理をつなげて書いてしまう傾向がありました。処理としては正しいのですが、ソースが分かりにくい、という弊害があり、もう一度処理を分割する、ということがありました。そこで、あえてコメントを先にすることで、構造化した際の処理ブロックを先に定義しておくことにしたのです。コメントファーストとは、そういうコーディング手順を指しています。
Javadocの機能は、コメントファーストの考えにフィットする、と思いました。仕様を考える人がコメント行を記述し、プログラマーがそのコメントを受けて、実際の処理を考える。そんな分業体制・工程案です。クラスの胆となるメソッドの入出力や固定値の定義がコメント行に記述されていれば、後を受けるプログラミング工程への情報伝達もスムースになる、という発想です。
手続き型言語のような構造化まで、設計者が書く必要はありません。あくまで、クラスの仕様が明確になる程度に記述すればよい、ということです。ルールに従ったコメント記述がクラスの説明書になるという機能には、単なるドキュメント維持にとどまらない可能性を、当時感じていました。
私の経験は手続き型言語の話なので、そのまま Java に適用することはできません。ですので、上記の話も夢物語かもしれません。でも、汎用機の世界で仕様書維持の問題に直面した私としては、ドキュメント維持の効果だけでも、感動があります。同様の経験がある方には、共感していただけるのでは…。
→
ページトップへ
囲碁の棋譜事情について
囲碁の棋譜事情について、少し触れます。昨今、SGF形式の棋譜データがネット上にたくさん提供されていることは、とてもありがたいことです。ブラウザーに表示されたSGFデータをメモ帳に貼り付け・保存して、この囲碁Viewerで手順を確認する、ということを何度も行いました。特に、新聞サイトでリアルタイムに閲覧できない棋譜が見つかったときは、とても助かります。
本来ならば、有料サイトや新聞購読の契約をしなければ見られないものを見ている可能性もあるので、どこまで助かってよいのか、という後ろめたさも少しありますが…。でも、現実には好きな棋士の棋譜を楽しみにしています。
とりあえず、私としては多くの人にリアルタイムでタイトル戦を楽しんでほしい、という思いがあるので、合法的に無料で見られる生中継サイトを
別ページ(囲碁の生中継リンクまとめ)にまとめました。興味のある方は、このページから生中継の棋譜を観戦したり、過去のタイトル戦の棋譜を楽しんでほしいなあ、と、ささやかながら思っています。
→
ページトップへ
最後に Interest-Driven Learning
NHKのEテレ「スーパープレゼンテーション」の司会者が、
「Interest-Driven Learning」という言葉を使用していました。どういう文脈だったか忘れてしまいましたが、この言葉はとても印象的でした。システム開発に携わった者らしい訳し方をするならば、
「興味駆動型学習」というところでしょうか。
今回の試みは、囲碁とオブジェクト指向に興味を持っていた人間が、そのまま興味の足し算をして取り組んだ学習です。つまり、ジャンル分けにこだわらない取り組み、ということです。
「興味駆動型学習」とは、
「ジャンル分けにこだわらない取り組み」だと解釈しています。
私の生きた時代は、人をジャンルに押し込める言葉が横行した時代でした。「文系」「理系」「芸術系」「体育会系」など、最近では「草食系」「肉食系」など、生々しいジャンル分けもあります。私は、こうした言葉に、人の可能性を摘んでしまうマイナスの効果があると思っています。人の興味は多種多様、多面的です。それを限定してしまう言葉が横行することで、ジャンル横断的な取り組みを発想しにくい雰囲気になってしまいます。デジタル社会になって、ジャンル横断的な試みや組合せが増えてきました。もっともっと、これまでと異なる組み合わせを試しながら、社会にとって役に立つ、面白いものが出てきたらなあ、と期待しています。
話が脱線気味になってきたので、このあたりで止めようかと思います。ここまでお付き合いいただいた方、本当にありがとうございました。
→
ページトップへ