天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます

「Code Complete(第2版上巻)」を読んだ

Code Complete(第2版上巻)を読んだので、感想を書いていきます。

読んだきっかけ

昨年末に、Steve McConnell著のMore Effective Agileを読んだのですが、内容が実践的で学びが多く良い本でした。
Steve McConnellと言えばCode Completeで、こちらもプログラマーのバイブルとして紹介されることが多い本ですが、自分は新卒の時に何が書いてあるのか良く分からずに途中で投げ出してしまった記憶しかないので、改めて読んでみることにしました。

aki-m.hatenadiary.com

本書で印象的だったこと

メタファについての解説

ソフトウェア開発におけるメタファとして、良いメタファと悪いメタファの違いや、ソフトウェア開発に有効なメタファの例(建築学…)が出てきました。
メタファは様々な本で登場してきますが、良いメタファと悪いメタファの違いについて解説されている書籍は記憶がなく、勉強になりました。
また、メタファは相互排除的なものではなく、組み合わせて活用するものであるという提言からは、ソフトウェア開発以外の分野から学び、ソフトウェア開発に適用できるものがないかを考えることの重要性を再認知できました。

実践的データ・参考文献が豊富

具体的なデータが豊富で、学術的根拠の下に主張が展開されていることが多かったです。(要求変更タイミングに応じて変更コストがどれ位変化するか、有効なelse文の割合...)
参考文献も豊富で、各章が終わるごとに、多数の書籍や論文&書籍や論文の簡単な紹介が記載されていました。(巻末にも参考文献のまとめあり)
今勉強しているオブジェクト指向関連の書籍も多数あったので、何冊か購入して読んでみようと思います。

具体的な解説

設計に関する解説について、多数のヒューリスティックスがプラクティスが紹介されており、現場で発生し得る状況ごとにどのように適用させていくのかが詳しく記載されていました。
ソースコードに関する解説について、リーダブルコードに書かれている内容に具体的なデータや参考文献を追加して、より詳しく解説されている印象を受けました。
More Effective agileを読んだ時にも感じましたが、どの部分についても解説が具体的で、現場ですぐに適用したくなるようなものが多かったです。

複雑性への対応

ソフトウェア開発の複雑さや、複雑性に対応する重要性は様々な本や記事で見かけますが、複雑性と付き合うための工夫がここまで細かく具体的に記されている本は初めてみました。
知っている内容もありましたが、哲学を活用する話や、変更予測の話、設計が十分と言える条件...興味深い話や普段悩まされているけど問題を整理できていなかった話が多数あり、読んでいて楽しかったです。

全体を通した感想

2005年に初版が発行された本なので、古い内容が多いことをある程度覚悟していましたが、今の自分には学びになる実践的な内容が多く、読んでよかったと感じました。*1
FORTLANやSmalltalkなど、時代を感じさせる古い言語についての言及が具体的にされていたり、サンプルとなるソースコードで古めの記法が登場していた点については、時代を感じました。
古い本よりも最近話題になっている本をどうしても読みたくなってしまうのですが、(技術的な書籍に関しては特に)バイブル的な本を何度も読み直していくことをしていきたいと思いました。

さいごに

分厚い上に一度挫折した本だったので読めるか不安でしたが、挫折せずに一通り読むことができました。
ソフトウェア開発に対して真摯に向き合えるようになり、これまで挫折していた技術書が読めた&知識が定着してきた感覚を感じられて、嬉しいです。
同時に、読書法にも一定の効果を感じているので、その内整理して公開しようと思います。(言語化するのに苦戦しているのでいつになるか分かりませんが...笑)

*1:"ソフトウェア開発においては殆どの場合で逐次型よりも反復型が有効"という記載もありました