本書の情報
-
https://gihyo.jp/book/2015/978-4-7741-7413-6
第1刷は2015年と古いが、第4刷は2025年4月と比較的最近
本書との出会い
- 秋葉原の本屋で『ゲームプログラミングC++』を買おうとした際、たまたま隣に並んでいた
- 気になってその場でパラパラと立ち読みしてみたところ、良さそうだったのでついでに購入。
Switch2落選の鬱憤を晴らすために、ちょっと高めの買い物をしたかった
本書の構成
-
構成は非常にシンプル
-
第1章:わかりやすいコードを書くためのテクニック(関数の章)
初心者向けの章。関数を単位とした細かなテクニックを紹介しており、クラスの話も少し先取りしている -
第2章:シンプルな設計のための原則とパターン(クラスの章)
中級者向け。主にクラス設計の話で、GoFのデザインパターンもいくつか紹介されている -
第3章:ソースコードの品質計測(パフォーマンス測定の章)
前2章とは内容が変わり、QA的な内容にシフト。初心者から上級者まで広く対応している。付録的な位置づけで、ボリュームは少なめ
-
本書の優れている点・感想
-
初心者へのアプローチが非常に優れている
- 「綺麗にコードを書きたい」という気持ちはあるが、設計原則や理論のイメージが掴めない初学者(=自分)にとってはドンピシャだった
- 複雑なコードを書いた経験があまりないため、設計原則やクラス設計の理論は理屈としては理解できても実感が伴わない
- クラス設計の理論に沿ってコードを書くとわざとらしさが出てしまう上に、コードが読みやすくなる実感も持てず、どうすればよいか分からない
- そんな状態の自分に、本書冒頭から展開されているアドバイスはまさに必要としていたものだった
-
第1章での「関数を基本単位とせよ」というメッセージが特に良かった
- オブジェクト指向を学び始めると、クラスや継承を使いこなしたくなるが、個人開発レベルではクラスが不要なことも多い
- 小さな単位である関数に焦点を当てることで、初心者でも実践しやすく、自分のコードにもすぐに適用できそうなテクニックが多かった
- 読んですぐ実践し、疑問に思ったらまた読み直すというサイクルを回すことが上達に必要だと再認識した
-
1章後半~2章にかけて、中級者への導線が丁寧だった点も評価したい
- まずは小さな関数をたくさん書き、共通点のあるものをクラスにまとめるという、シンプルで実践的なアプローチが紹介されていた
- 同じ名前を持つ関数同士を1つのクラスにまとめる、という分かりやすく納得感のある基準も提示されていた
-
第3章では、「結合度」「凝集度」といった概念に対し、定性的な説明に留まらず、定量的な指標を提示している点が良かった
- 定量的な基準があることで、自分のコードにどう適用すべきかの判断がしやすくなる。初心者にとっては「なんとなく減らす/増やす」ではなく、妥当な範囲が提示されているのがありがたかった
印象に残ったメッセージ
- 「職業でコードを書く人はある程度アウトプットの機会が担保されているため、インプットを重視すべき」という指摘
- 技術書や他人のコードを読まないと成長しない
- 「アウトプットが大事!」という言葉を真に受けて、ひたすらアウトプットしていた自分には刺さる内容だった
向いている読者層
- C++の基本文法やオブジェクト指向の基礎を一通り勉強した人
(if, for 等の制御構文、四則演算、論理記号などを理解しており、クラスや継承のイメージがついている)- 目安として『独習C++』を一読していれば十分
- GoFのデザインパターンに興味があるが、理解が浅く、ちゃんと学びたいと思っている人
- ゲーム制作に興味がある人
- C++で簡単なコードは書けるが、複雑なコードの設計に悩んでいる人
- 初心者から中級者にステップアップしたい人
余談
本書や『オブジェクト指向のこころ』に出てくる「変更が多い部分とそうでない部分を分離して管理する」という考え方にどこか既視感があると以前から思っていたが、この既視感の正体が「抗体に多様性が生じる仕組み(抗体の可変領域の組換え)」であることに最近気づいた
※筆者は生物系の出身で、抗体の可変領域の組換えについては高校や大学の頃に学んでいる
- 「変更が多い部分とそうでない部分を分離して管理する」というのは、『オブジェクト指向のこころ』では「共通性・可変性分析による流動的要素の切り出し」として表現されている内容に相当する
- 大雑把に言うと、ソフトウェアの設計において「どの部分が共通で、どの部分が変化しやすいか」を明確にして保守しやすい設計にしましょうという考え方
- 一方の「抗体の可変領域の組換え」は、生物の免疫システムにおいて多様な抗原(病原体など外部からやってきて悪さするやつ)に対応して排除するための仕組み
- 抗体の基本構造(定常領域=Constant region)は共通で、抗原に特異的に結合する可変領域だけが多様化するというげんr
- 参考
- このイメージが頭にあったおかげで、本書や『オブジェクト指向のこころ』で説明されている共通性・可変性分析の考え方もすんなり理解できた
- 生物系の自分にとって、思わぬところで役立つ知識が知らず知らずのうちに身についていたことに驚いた。思考のフレームワークはおもしろい