良いコード/悪いコードで学ぶ設計入門 - 保守しやすい 成長し続けるコードの書き方

1995年ごろ (Windows NT 3.5にWin32sサブシステムが追加されて3.51になったころ), IRIX + ANSI CからVisual C++に乗り換えることになった僕らは、職場でいわゆるGOF本を読まされた。
しかし文体と内容が高踏的で、語られている設計手法を自分ごととして理解するには知見も経験も不足しており、どれをいつなぜ使うのかもピンとこなくて、デザインパターンとはなんだか難しいものだなぁ、という読後感のみが残った。読後感なんていうほど立派なものではなく、食べきれなかったご飯のあとのげっぷみたいなものだ。

当時僕らにGang of Four本を読ませてくれたほうの立場を考えると、若手にC++開発環境を与えたはいいが、でっかいクラスになんでもいっぱい詰め込んだり、それもつぎはぎのコードでぶくぶく膨らんで…… あとあと自分たちみんなが辛くなることを分かってもらいたい…… といった事情が想像できる。しかし、この手の課題のあるべき設計論だけをエッセンシャルに記されても、学ぶべき人たちには理解や体感のためのとっかかりが難しいだろう。まさに銀の弾はないのだ。

この本には、そういった課題を起こす人たちが咀嚼でき理解しやすいよう、 具体例や比喩をふんだんに載せ、こういうコードはこういう問題があるから後々よくないんだよ、こうすると良いんだよ、というアドバイスがぎっしり詰まっている。地に足がついている。先人たちの理論へのreferも適切になされている。

大人には、「あちゃー」というコードに接した時、 そのコードを書いた人と同じ目線に立ち、コード改善とスキル成長を助ける責務がある。 そのとき、自分の経験知見のみを出発点にしてしまうと、結局自分の主観の押し付けになってしまったり、issueごとの対処の比較ができなかったりブレも生じてしまうだろう。

このあたりのキャリブレーションをしないとな、と思っていたが、 2022年にまたデザパタ本を読むのはヒストリカルすぎるので、手頃な一冊を求めていた。
文中で示されているサンプルコードはJavaになっている。 いまJavaがどの程度前線で使われている武器かというとなんともだが、 OOPにまつわる諸問題を汎用的に例示するなら適切だ。 practicalなpesudo codeといったところだ。