10年前は中学生だった!とか、いま中学生だから10年後は!という話を読み、触発されつつ書いています(いや皆様すごいお話ばかりです)。10年前。変わらず今の会社の会社員でした。震災のあった年というのは多かれ少なかれ記憶に残った年ですが、私はその頃ようやく中堅からリーダーを担えるようになって日々の成分としてはほぼお仕事漬けの日々でした。
10年前に読んでいた本
振り返ると入社以来ほぼ同じドメイン「人事・給与」の開発に携わっているのでそこは今と大して変わらないのですが、その頃読みまくった本というのがGoFのデザインパターン本からのおよそ結城先生漬け。
増補改訂版Java言語で学ぶデザインパターン入門 | 結城 浩 |本 | 通販 | Amazon
増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 | 結城 浩 |本 | 通販 | Amazon
Java言語で学ぶリファクタリング入門 | 結城 浩 |本 | 通販 | Amazon
そして再現したりしなかったりするアプリケーションサーバーのハングを調べるためにマルチスレッドと並行処理との何たるやを調べる日々...。
Effective Java 第3版 | Joshua Bloch, 柴田 芳樹 |本 | 通販 | Amazon
Java並行処理プログラミング ―その「基盤」と「最新API」を究める― | Brian Goetz, Joshua Bloch, Doug Lea |本 | 通販 | Amazon
10年前に読みたかった本
いずれの本も素晴らしいと評されているものばかりでしたが、敢えて10年前から読みたかった本、勉強していたかったことを考え始めると、「設計」です。Microservice記事が2014年だそうなのでそこまで最新情報を追いかける余力も当時の私にはなかったなと振り返りつつ。
いやこれは単なるタラレバ論でそんなこと言っていないで今から頑張って勉強しなおせよという話であります...。
デザインパターンの今
デザインパターンの言われようは、いま非常に面白いです。
Template Methodパターン、Iteratorパターン、批判の槍玉に挙げられるパターンはいろいろあるでしょうが、上述のとおりそもそものベースが、別に数学的な定義が明確なわけでもなく、かなりざっくりとした分類でしかないので、これが良い悪いという議論は極めてやりにくいです。そういう意味でもデザインパターンという枠組みの上にこれ以上まともなものが積み上がる期待値は小さいわけですが、あえて、最も典型的で異論も少なく理解もしやすそうなパターンをここでひとつだけあげるとすれば、Singleton パターン 、これは明らかにアンチパターンです。
Singletonパターンは当時から確かになんやかや言われていました。しかし合わせて
The criticism is not of design patterns. The criticism is of the poor abstracting power of modern OO languages.
と、デザインパターンというよりも、そもそもモダンなオブジェクト指向言語の貧弱な抽象化能力に批判がある、と分析しています。
デザインパターンというのはOOPスキルが高いとされる4人(GoF)によるコードの類型カタログ化のような代物ですが、単なる経験則であり、それ故、確固たる数学的論拠、まっとうな妥当性の担保が存在していません。
デザインパターンっていうのは良かれ悪かれ、そういうパターン、類型になる、って言ってるだけなのか、それとも見習うべき「ベストプラクティス」のひとつとして採用しよう、と推奨しているのかがよくわかりません。書籍によってその解釈が様々だったり、立場も玉虫色でまるではっきりしないです。
多分こう言うと、案の定「ケースバイケース」「状況によって使い分ける」とか言う人が多かったり、GoFのデザインパターンにしても古びてはいるが分類学的には有用だという、ある種の「慰め」の論調とも言えるものが「魅力的」と支持を集めやすいでしょうね。
うん。まあ、そうですよね。当時私もわかった気になっていましたがじゃあ実際いま目の前の私の対処すべきプログラムに当てはめるべきなのかそれはどうすれば... という気持ちにもなっていました。
まとめ
そんなのは後出しジャンケンな話なのですが、この界隈には流行り廃りや色々なものの見方があります。デザインパターンもすべてが悪いとはいまでも言われていない、むしろ経るべき重要な議論であると思います。とはいえ「10年、20年使われる(可能性もある)ソフトウェアをどのように作るのか」、は常に勉強だなあと今ひしひしと実感します。
今から10年、加速して過ぎそうなことにドキドキしつついずれにしてもいま目の前の課題に目を背けず勉強したいですね。
10年後Javaもどうなっていくものでしょうか、以上小話、楽しんでいただければさいわいです。