コーディングが出来たとしても、ソフトウェア・デザインとなるともっと大きな視野が必要になる・・・と悩んでいた時にちょうど巡り合えた一冊についての感想をまとめたいと思います。とても良い本ですが、残念ながら日本語版は現在出ていません。
この本、A Philosophy of Software Design はソフトウェア・デザインに関する本です。そして、その主なテーマは『複雑性』となります。
複雑性とは
この本は『複雑性 (Complexity)』について書かれた本です。良きソフトウェア・デザインにおいては、複雑性の発生を抑え、存在する複雑性をコントロールすることが重要であると著者は説きます。
プログラミングは自由度がかなり高いので、なんらかの指針が必要になるわけですが、その指針のひとつが「複雑性」ということですね。
この本ではまず複雑性そのものについての解説から始まり、その性質やそれにより引き起こされる問題、発生する原因について語られます。そして、じゃあこの複雑性をコントロールするためにはどうすればいいか?を探っていく、という構成です。
しかし、例えば『短いコードの方が良い』みたいな直接的なことはあまり書かれていません。もちろん結果的に短いコードが複雑性の低いコードになることが多いでしょうが、それよりももっと広い視野からの普遍的な『考え方』を示しているのが、この本の良い部分だと思います。ただ、そのようなアプローチだと、内容はどうしても抽象的なものになってしまうでしょう。
地に足ついた抽象論
著者は大学でソフトウェア・デザインのクラスを長年担当しており、この本はその生徒達とのやり取りの中で培われた知見を元に書かれたものです。
前書きで「抽象的で分かりにくいかも・・・」と著者自身が注意書きしていたりしますが、しかし実際に読み進めるとかなり分かりやすく明快な文章でソフトウェアデザインの抽象的な部分を解き明かしていっています。
もちろん理解する上で、ある程度のプログラミング経験が必要になるとは思います。しかし、地に足ついた抽象論というか、とにかく内容は分かりやすく生徒達に慕われているんだろうなぁと分かるくらいに物腰の柔らかい文章なので、読んでいてとても面白いしストレスはありません。
ここはまさに本の中でも書かれている、ただ動くだけのコードではなく、それを読む人のためのコードでなければならない、というソフトウェアデザインの哲学をこの本自身が体現していると言えます。
Deep Moduleと抽象化
この本で一番画期的な概念だと思ったのは、Deep Moduleというものです。直訳すると『深いモジュール』となりますが、モジュールはオブジェクト指向プログラミングではクラスやメソッドを指すので『深いクラス』を作ろう!というような話になります。
クラスをどう設計するべきかをこれほどまでに端的に言い表す言葉はそうそうないんじゃないかと感銘を受けました。この本を読んで良かったなという部分です。
つまり、クラス内部にはたくさんの知識が収納されていて機能性が充実しているが、そのインターフェイスが狭く絞られているべき、というのが『深いクラス』なわけですが、これは抽象化とカプセル化の重要性を同時に示しているとも言えます。
この本に書かれている主なテクニックは『抽象化』であり、抽象度のコントロールです。複雑で猥雑な部分を如何に抽象化して、人間にとって分かりやすくしていくか、という考え方を示す本になっています。
コメント
あとこの本の良い所が、とにかくコメントの重要性を強く訴えている部分です。おそらく全体の三分の一近くはコメントについて書かれています。それくらいコメントの重要性を強調しているので良い刺激になります。
本著ではロバート・マーティン氏によって書かれた『クリーン・コード』について、二回ほど明確な批判をしているのですが、名著と言われる『クリーン・コード』の中で『コメントとは失敗である』とマーティンさん書いていたんですね。
それに対して、コメントにはコードだけでは達成できない別の働きがある!コメントとはそんなネガティブなものではない!と著者は強く反論します。ここはなんか笑ってしまいましたね。
このくらいにコメントについて強い想いを持っていますし、コメントこそが複雑性への対抗手段であると書いています。
コメントは今までどうしても軽視したり、後回しにしがちな部分だったので、このくらい言ってもらえた方がコメントに向き合う気持ちにはしてくれますね。コードをただ書くだけでは駄目だ・・・と痛感していたので、この本は良い薬でした。(良薬は口に苦し)
まとめ
というわけで簡単にですが、A Philosophy of Software Designを読んだ感想をまとめてみました。より高い視点からプログラミングを考える、という内容ですが全然堅苦しくないし、文量もそこまで多い本ではないので割と直ぐに読める本だと思います。
著者自身も読者がプログラミングを楽しくできるようにしたい!という気持ちから書いた本なので、気軽に読んでほしいとオススメしたい一冊です。