後知恵で極端な話になってしまっているのでは?というケースもあるが、これまでに筆者が関わってきたプロジェクトで発生した問題を背景として説明されており、割と現実味があるように感じられた。特に、システム開発プロジェクトで働いている人間が何を考えるか?を検討の遡上にちゃんと載せられているところがよい。
- p.30 いろいろ議論はあるけど「コード行あたりのコスト」って指標として受け入れやすいでしょ、という例。
- p.43 コード変更のコストがメリットを上回ると変更が「事実上できなくなる」。
- p.76 プログラミングのパラダイムはどれもコードの書き方に制限を加えている。新たな能力を追加しているわけではない。
- 構造化プログラミングは、直接的な制御の移行に規律を課すものである。
- オブジェクト指向プログラミングは、間接的な制御の移行に規律を課すものである(依存関係の方向を制御できる)。
- 関数型プログラミングは、代入に規律を課すものである。
- p.126 コンポーネント間の循環依存に注意という話。チーム間で他のチームのリリースを取り込むかという判断が発生するとか、コンポーネントのビルドの順番を決める必要があるという前提も現実に即している感がある。
- p.152 アーキテクトとして、方針と詳細を切り離すことで、できるだけ長い期間、できるだけ多く選択肢を残しておき、その間に適切に作るための情報を数多く手に入れるという話。文字通り受けとっていいかは別として、受けを広く取るのはその通りかも。あとは個別の事情(たとえば開発者のアサインとか)との兼ね合いですかね。例はどちらかちおうとp.158にあるものの方が分かりやすい(シングルスレッドで処理するとしても、マルチスレッド化してもいいように作っておくとか)。
- p.163 重複が本物の重複か偶然の重複か見分ける。偶然の重複を排除してしまったら(=無理な一本化をしてしまったら)、あとから分離するのは大変。
- p.200 クリーンアーキテクチャって何?という話。
- p.286 「予算や納期が迫ってきたときに何が起こるか」を想定する(ルールを守らなくなる動機や正当化が生まれる)。
- p.297 Robert C. Martinが過去に関わってきた各種のプロジェクトの話。あまりにも完了しないプロジェクトが多いが、よくソフトウェア工学の学びはじめに言われる「完了しないプロジェクトが全体の何割」という話はこういうことなのか、という雰囲気が感じられる。