この本は、プログラミング言語の入門を済ませたけれど、もっと良く書きたいと思っている、中級者へのステップアップを目指す方のための本です。
プログラムというものは不思議なもので、習熟して思いどおりに書けるようになってくると、最初の「自分はこれで何でもできるんじゃないか」と思えた頃と打って変わって、だんだんと自分の無力さが見えてきます。
安心してください。自分が初心者の域からいつまでも出られないときちんと思えるのは、成長の証拠です。諦めずに考え続ければ、いつしか気づかないうちに中級者に手が届くようになってきます。そして、自分の頭で「プログラミング言語を覚えることよりずっと難しくて厄介な問題は、自分たちが作った設計のほうにあるんじゃないか」といった考えが湧き上がってくるようになれば、その時こそ、大きく階段を踏み上がるチャンスです。
「プログラミング言語を正しく書くだけなら、文法エラーをなくして動作が間違ってなければよいとわかるんだけど、うまくプログラミングする方法=ソフトウェア設計って話になると、何が正しいのかがわからないよ」「けれど、必要以上にややこしくなってすぐバグるのは、単にコーディング技法があるかないかじゃなくて、たぶんもっと大枠の設計がまずいんだろうというのはわかる」そんな悩みを抱えながらも、大きな一歩を踏み出せず、悶々とした気持ちで仕事をしている、あるいはこれから仕事をしようとしているプログラマーの方は、(はっきりそう意識できていなくても)とても多いと思います。自分がそんな悩みを抱えていた頃に、「これを先に知っていたら早かったのに」と思ったことを、この本の筋書きの中に入れ込みました。
本書の筋書きは、いまや当然となった、ごくありふれたソフトウェア工学の王道です。それぞれの専門書に比べると、決して網羅性が高いとは言えません。しかし、知識のとっかかりとして、そして何より、取り上げた各技法のつながりを理解して、あるひとつのソフトウェア設計の体系を認識するのに、本書がとても役立つと思います。
本書の中心を貫くのはたったひとつの価値観です。便宜上それはオブジェクト指向と呼ぶしかないのですが、まだ内容を読み進めていない方が想像するオブジェクト指向とは、少し違うかもしれません。回りくどい言い方をすると、「ソフトウェア工学のうち、かつてオブジェクト指向というトレンドをベースとして発達してきた領域」です。
フレデリック・P・ブルックスの名著で「狼男を倒す銀の弾丸はない」と主張した『人月の神話』の第2版(1995年)に書き加えられた章に、「オブジェクト指向は真鍮の弾丸かもしれない」という言葉が記されています。現代のプログラマーは、オブジェクト指向言語を使いこなせば無条件にソフトウェアが作りやすくなるなんてことを信じる人はいないでしょう。ただ漫然とオブジェクト指向であるだけでは意味がありません。ブルックスはなぜオブジェクト指向は真鍮(銀の代わりに使われる庶民的な金属)になると予測したのでしょう? この真鍮を妥当な効果のある弾丸にするとは、いったいどういうことなのでしょうか? それ自体に明確な言葉はないけれど、オブジェクト指向で語られる「原則」と「技法」と「パターン」を通して、「それ」をひとつ、この本から見つけ出してください。
各セクションを理解できると、思わずクスッとなるかわいい挿絵が待っていますよ。がんばって読み進めましょう。