わくわく計算ライフ

ゲーマーによる節約生活。はじまります。

【書籍レビュー】良いコード/悪いコードで学ぶ設計入門

最近ちゃんと読んだ本のレビューをしとくと、他の人が購入する際の助けになるかもしれない、と思ったのでレビューを書くことにしました。
ジャンル偏ってるとは思うけど、皆が得意ジャンルレビューすればいいんじゃよ。

ということで、記念すべき第1回はこれ!

「良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方」です。 最近の書籍、小洒落たフランス料理店のメニューみたいにサブタイが長い傾向があるので記事トップは本題と思う箇所までで切る方向性で。

ソフトウェア開発における永遠の課題、「良い設計とは何か」について現時点での有効な考え方をまとめてある良著と思います。
サンプルコードの文法はJavaですが特に言語には寄らない話をしています。
とは言え静的型付け言語を使用している人の方がすっと落としやすいところだと思います。

1. 基本情報

項目 内容 説明
出版社 技術評論社 技術書では安定の有名どころ。
初刷日時 2022/5/12 手元の本は第6刷。この間1ヶ月なのでかなり売れている本だと思います。
ページ数 383 通しで読んだ方が良い本なのでちょっと重いかも

2. 購入動機

ソフトウェア開発を生業にしていますが、良い設計やコードを安定して生産するのは永遠の課題。
ちょくちょくアップデートしていきたいものです。 最近はTwitterで流れてきたよさそうな本を買いに行く感じになっています。
具体的な購入動機としては以下がトリガーになりました

  • 最近この手の本あまり読んでいなかった
  • 優秀なエンジニア確保が困難となる昨今教育の必要性が上がった
  • そろそろオブジェクト指向についても考え直したかった

3. 書籍概要

詳細が気になる人は、出版社のページ等に飛んでくれ!となるので、ここでは概要まで。

3.1. 現代で有効な設計手法を網羅

日本のソフトウェア開発現場では長きにわたりオブジェクト指向が幅を利かせていたという歴史背景から生まれる悪い設計のコードのパターンおよび対策について網羅的にかつ簡潔に述べられています。
サンプルコードもJavaベースではありますが、特定のライブラリなどには依存しない形になっており長さも適切と感じました。

関数型プログラミングで良く出てくる、クラスメンバーはconstにし、変更が必要な際は新たな初期値のインスタンスを生成する手法を良く取っています。
これにより外部から値を変更させなくして追跡をしやすくするということです。

組み込みや画像処理等を触ることが多い身としては「インスタンス生成のオーバーヘッドが大きいのでは?」とは思いましたが、そちらもフォローされておりオーバーヘッドが問題になる場合はその限りでは無いとし、また現代はコンピュータの性能向上により画像処理の様な特殊ケースを除いては、そのオーバーヘッドが問題になることは無いとフォローされていました。

これは、おじになると良く忘れる話で、その時代時代の環境に合わせて最適な手法は異なるということを久しぶりに思い出しました。
「それ、理論上は品質良いコード書けるだろうけど重すぎでしょ?」みたいな手法も、コンピュータ側が十分早くなり余裕があれば「重いでしょ」が枷にならなくなるということです。

3.2. 設計の盤外戦術についても言及

ソフトウェア開発は1人でやることはほぼ無く、仮に人間自体が1人でも長期開発となれば過去/現在/未来の自分と連携を取らねばならないので、一定規模以上の開発は必ず複数人と言えます。
メンバーに設計やコーディングの技法を展開/活用してもらうための教育や、組織の上層部の理解(主にコスト関連)をどのように得るかといった、良い設計を通すための盤外の戦いについても言及されているのは非常に良いなと思いました。
餅を絵で終わらせずちゃんと食べれる形に誘導することにもアドバイスがあるのは良いと思いました。

3.3. 書籍紹介がありがたい

一般的な書籍には参考/引用文献リストがありますが、本書にはそれらに加え、著者が特にオススメしたい本については短い書評つきの紹介ページが用意されています。
これにより、次に読むべき本は何かが分かり、次のステップにも進みやすいなと感じました。

4. どんな人に向いている?

一定規模より大きなソフトウェア開発に携わる可能性がある人に向いた入門書であると言えます。
特に

  • 未だガチガチのオブジェクト指向しかしらない
  • オブジェクト指向で上手くいかない箇所に悩んでいる
  • チーム全体の設計レベルを上げたい
  • 若手に教育したい

などの人に向くと思います。

5. その他関連書籍

以前読んでいた(当時は第1版)設計/開発プロジェクトに関する書籍を紹介しておきます。
初版は「これからはオブジェクト指向だ!」な時代に書かれたものですが、人月やデスマーチ周りの話、開発者のあるべき姿勢の話は比較的普遍性が高く参考になりました。