「プリンシプル オブ プログラミング」を読んで

はじめに

しばらく前に会社の同僚からすすめられて読んだので今更ながらまとめます。
「3年目までに身につけたい 一生役立つ101の原理原則」という副題がついているにもかかわらず、3年目どころではない私でも楽しめました。

プリンシプル オブ プログラミング

概要

タイトルにプリンシプル、副題に原理原則とあるように、本書は最初から最後まで徹底して「これはこういうものだ」というものが紹介されています。

「前提」「原則」「思想」「視点」「習慣」「手法」「法則」の7つで章立てされていて、各章でいくつかのプリンシプルが紹介されています。
すべてのプリンシプルは、どういうことなのか、どうして必要なのか、どうすれば実現できるのか、といったことが述べられていて、ただの押しつけにはなっていません。
また、コードは一切出て来ず、概念としての説明が主になっています。

感想

一番の感想は、よくこれだけの原理原則を集めたなということです。
リーダブルコードであればコーディングに関する内容ですし、各アンチパターン集であればその分野に特化したものになっていると思います。
その中で、プリンシプルに特化して101も紹介しているのは中々無いような気がします。

とは言え、コードは一切出て来ず概念的な説明が101回続くだけなので、たしかに一気にすべて読もうと思うと大変ですが、参考書的に必要な部分を掻い摘んで目を通していくような読み方をするなら、1冊もっておくのはアリだと思います。

実際読んでいると、DRY、カプセル化、3大美徳、車輪の再開発など、よく知られた聞いたことのあるプリンシプルが出てきます。
一方、なんだこの法則は!と思って読んでいると、ああこれはこういう名前なのか...と発見につながることも多々ありました。
例えば、ジョシュアツリーの法則やセカンドシステム症候群などがそうでした。

結局こういうプリンシプルは、カッコいい名前がついていて厨二感をくすぐられます*1が、名前自体に意味はなく、その内容をどれだけ理解しているかが重要だと思います。
ただ、共通認識として共通のワードがあれば意思疎通も効率的になるので、内容を理解している前提でチーム間で用語を共有できれば良さそうに思います。

本書で好きだった項目は、「1.1 プログラミングに銀の弾丸はない」「6.6 コンテキスト」です。

「プログラミングに銀の弾丸はない」に関しては、1.1という読者が一番最初に触れる部分にありながら、特効薬はないんだ難しいんだということを紹介しています。
内容自体はプログラミングに関することではあるのですが、言外に「だから本書で紹介するプリンシプルも銀の弾丸というわけではない」という主張が隠れているような気がして、構成の妙を感じました。

「コンテキスト」は、一番長く詳細に述べられている項です。
他の項目は長くても2〜3ページだけであるのに、この項目は10ページにも渡って紹介されています。
そのためなのか、それだからなのか、例示がたいへん多くしかもわかりやすくなっています。
達人と初心者の話として風呂掃除について、伝導能力のための背景の大事さの話として簡単なクイズとトイレについて、例え話があり、大変わかりやすいです。
コンテキストとドメイン駆動設計は切り離せないものなのか、ドメイン駆動設計への言及もあります。
さらには、西洋哲学、仏教哲学についても出てきます。
これだけ濃い項目は他には無く、背景や関係が大事だという話なのですが、とても印象深いです。

どのプリンシプルも、どうしてこれが必要なのかという点をしっかりと説明してあるので、よくある「べき論」で押し付け感があるということもありません。
逆に言うと、その説明に納得がいかなければ、そのプリンシプルは無視しても良いと思います。

全体的に、3年目までに身につけた方が良いかはよくわからなかったのですが、参考書的な読み方ができる良い本だと思います。
ただし、何度も言うようにコードは一切出てこないので、コードレベルでのサンプルがほしい場合はおすすめできません。

*1:これに名前がほしい