読んだ: Code Complete 第2版

少し前に電子合本版がセールで確か半額だったのを購入して読んでました。
いつものように読書メモ。
読みながらメモしたのではなく一度全部読んでからメモしたので本の意図と全然違うことが書いてあるかも……(是非読んでいただければと)

第1章 ソフトウェアコンストラクションへようこそ

導入部分。本書で扱うスコープの説明。

第2章 ソフトウェア開発への理解を深めるメタファ

たとえは理解しやすくあるものもあればミスリードさせるものもある。

第3章 2回測って、1度で切る:上流工程の必要性

プロジェクトの性質に応じてウォーターフォールライクに準備をするかアジャイルライクに準備をするか決める。どのようなプロジェクトでも事前準備で後工程のリスクを抑制することは必要。

第4章 コンストラクションの重要な決断

言語の中へのプログラミング。言語構造から考えるのではなく、考えを言語構造に落とし込む。

第5章 コンストラクションにおける設計

必要十分なサイズで、隠蔽して、疎に。

第6章 クラスの作成

第5章の内容をクラスレベルでより特化させたイメージ。

第7章 高品質なルーチン

ルーチン(関数・プロシージャ)についてもそれ単体で処理が完了するものが望ましい。名前・長さは適切か?

第8章 防御的プログラミング

異常系をどう扱うか。異常なものがそのまま処理結果で出てくることだけは避ける。

第9章 擬似コードによるプログラミング

個別ルーチンレベルでの設計は擬似コードで行うとよさそう。プログラミング言語固有の記載は擬似コードに入れない。いい擬似コードはそのままソースコード中のコメントに転用できる。

第10章 変数の使用

使用は局所的に。使いまわしをしない。

第11章 変数名の力

具体的な名前を付ける。命名規則には従う。

第12章 基本的なデータ型

基本データ型の説明と使用時の注意点とか。マジックナンバーは使っていないか。最近話題になった? 2進化10進数についても軽く触れられています。

第13章 特殊なデータ型

構造体とポインタ。グローバルデータについてはここで触れられている。

第14章 ストレートなコードの構成

上から下に読めるように。順番に依存するものはそれが分かるように明示する。

第15章 条件文の使用

if-then-else、switch-caseを書くときのお作法について。適宜コメントで補うこと。

第16章 ループの制御

適切な制御構文を使用する。ネストを深くしすぎると読めなくなる。カウンタ用変数名にiとかjを付けるとバグの元になる。(よくやってしまう……)

第17章 特殊な制御構造

returnはコードを読みやすくする意図で使われているか。再帰は停止するか。再帰をループ制御で表現できないか。gotoは最終手段でしか使わない。

第18章 テーブル駆動方式

同一データに対するif-elseの連続や非常に長いswitch-caseはテーブル化できないか検討する。

第19章 制御構造の問題

論理式のあれこれ。複雑な論理評価は関数として独立させる、数値の範囲評価は数直線的に記載する、括弧でわかりやすくする、短絡評価が行われるかどうかは言語によって異なるらしい(!)。ネストが深くなりすぎたら設計を見直す。

第20章 ソフトウェアの品質

品質には様々なメトリクスがあり、相反するものもある。品証作業は早い段階から盛り込むこと。

第21章 コラボレーティブコンストラクション

コラボレーティブ開発の様々なやり方、メリットについての説明。

第22章 デベロッパーテスト

開発側でのテストの重要性とテスト手法についての説明。テストはそれだけで本が数冊書けるレベルなので、メモ書きとしては割愛。(まとめられるほど理解しきれていないとも言う……)

第23章 デバッグ

デバッグは当てずっぽうに進めない。データを集め、仮説を立て、問題を特定、完全に理解し、正しく修正する。

第24章 リファクタリング

これもこのテーマ単体で本が書けるレベルなので……リファクタリングは小さく、それ単体で(ほかの修正とまぜこぜにせずに)やる。

第25章 コードチューニング戦略

ホットスポットの特定には必ずプロファイラを用いる。また、チューニングは可読性を下げる方向に向かう行為なので、通常は設計やアルゴリズムレベルでの修正を行い、最終手段としてチューニングを用いる。

第26章 コードチューニングテクニック

チューニング手法が書いてあるので必要になったら読む。言語、コンパイル環境によってチューニングの効果は異なるため、ある言語で通用したテクニックがそのまま通用するとは限らない。ここは実測が必要。

第27章 プログラムサイズが及ぼす影響

プロジェクト規模に応じてやり方を変える必要がある。

第28章 コンストラクションの管理

仕変は必ず管理する手続きを用意する。コストがかかることを理解する。初期の見積もりは不正確。プログラマは人間。

第29章 統合

モジュールやクラスなどなどの統合戦略について。プロジェクトごとに最適な手法は異なるため考えて選ぶ必要がある。

第30章 プログラミングツール

良いツール使っていますか? 最近だとVSCodeとか人気ですよね

第31章 レイアウトとスタイル

宗教戦争が起こるネタだが、規約を設定してそれに従うこと。

第32章 読めばわかるコード

まずはコードが読めて、何をしているか分かることが正義。コメントはルーチンレベルでの説明や、コードでは伝わらない意図の説明に使う。

第33章 個人の資質

第34章 ソフトウェア職人気質とは

節のタイトルが基本的には書いてあることのすべてだと思います(目次はググれば出てきました)。

感想

序文あたりでも触れられていましたが、ここまで網羅性が高い本は珍しいと思いました(そして値段と分量もそれ相応にあります)。参考文献もおおく挙げられているので必要なテーマ等あれば参照していきたいですね。そして、この手の本は繰り返し読む習慣を取り入れないといけないですね……(ずいぶん昔に買ってもう内容を忘れてしまったリーダブルコードとかデザインパターンの本を視界の隅に入れながら)