技術 ブログ

読書メモ:コードコンプリート第2版 上下



よくソフトウェア開発において名著として上がる「コードコンプリート」ですが、上下巻合わせて1000ページ以上あるため積読状態でしたが、思い切って読破しました。
ソフトウェア開発について詳細に書かれているのかと思いきや、ジョークなども交えた著者の経験や膨大なソフトウェア開発に関する本を集約したような内容で、本のサイズに対して余白や図が多く、思ったよりあっという間に読める内容でした。
詳細事項については、現場で経験していたり、書籍内の参考文献を読まないとわからない部分も多々ありましたが、翻訳本にしては思ったより読みやすく書かれていました。
理解が浅い部分については、参考文献を頼りに深堀りしてみようと思います。

以下に、内容について簡単にまとめます。


第1部 基礎を固める



この本では、ソフトウェア開発ではなくソフトウェアはコンストラクションであるという捉え方から、ソフトウェアコンストラクションとは何かについて述べています。
さまざまなメタファーを用いてソフトウェアコンストラクションの特性について理解を深めます。


第2部 高品質なコードの作成



コードコンプリートというタイトルからコードが中心と思いきや、設計の重要さをまず学びます。レベルの高い観点でまず、設計がプロジェクトの成功においていかに重要か、そして後半において、高品質なコードをどのように書いていくか、それを実現するための効果的な疑似コードの使い方などを学びます。


第3部 変数



この章は、「リーダブルコード」などとも内容が被りますが、どのように変数や構造体に命名を行ったり、宣言を行うべきかについて学びます。そして、オブジェクト指向ならばクラス名やメソッド名、ルーチンの命名など、保守性において最も重要になる、読みやすいコードを書くためのヒントが満載でした。


第4部 ステートメント



条件文の効果的な書き方を学びます。各プログラミング言語の書籍では条件文を書く方法しか述べられていない一方で、この書籍ではどのように条件文を書くべきかまで踏み込みます。
goto文やbreak、ネスト構造など、実際の業務においてのバッドプラクティスがあるのは事実で、複雑で保守しにくい条件文を書かないためにどのように書くべきかについて書かれているという部分は、やはりチームで開発することにおいて大切であることが身に沁みました。


第5部 コードの改良



書かれたコードのインスペクションなどをチームでどのように行うと有効なのかについて学びます。また、自動テストや同値分割、境界分析など、チームでどのような検査をしていくのが有効かについて述べられています。
そしてリファクタリングですが、マーティン・ファウラーの「リファクタリング」に載っている内容を短くまとめた感じで、この部分においてもやはり複雑で読みにくいコードを保守しやすい形に変えていくという点は、どのソフトウェアエンジニアリングの本でも共通事項となっている部分でした。
コードのチューニングについては、アルゴリズムやOSなどのシステムコールの選択によって速度を上げるという部分ではなく、既存のコードの記述を工夫することによっていかに速度を上げるかについて述べられています。ただし、この部分はコンパイラの最適化機能や言語ごとに異なることがあるので、まずはやはりコードを読みやすく書き、必要に応じて最終的にコードをチューニングすべきかどうかを検討する必要がありそうです。


第6部 システムの考察



この章では、ソフトウェアのマネジメントを主に取り上げています。見積りや開発環境、ボトムアップ開発やトップダウン開発などにおける統合方法などのほか、デイリービルドをどのタイミングで行うか等が述べられています。
また、さまざまなツールをどのように有効活用するのか、またツールの利用や開発が有効かどうかについても学んでいきます。
この章を通して、開発者としてどのような姿勢で業務に向き合うと良いかについて学べるきっかけが得られます。


第7部 ソフトウェア職人気質とは



最後の部となりますが、この部ではどのようにプログラムをインデントするべきかについて学びます。昨今ではIDEが自動でインデントしますが、それでも変数の宣言などを含めたレイアウトとスタイルによって、プログラムの読みやすさが全然変わってきます。
バグを少なくするために、いかにインデントとスタイルを統一することで保守性が向上するかについて学ぶことができました。
また、コメントについてもコメント不要論や有効なコメントはどのようなものか、改めてさまざまな気づきがありました。
勿論、レイアウトやスタイル、コードのドキュメント化は慣習やニーズによってさまざまかもしれませんが、書籍を通して正解は間違いなくあると思いました。
最後は、どのような姿勢で働くことが良いのか述べられており、毎日が単純な繰り返しにならないためには、自分自身の学ぶ姿勢や仕事に取り組む姿勢、生活習慣がいかに大事かが書かれておりました。胸に刺さる部分がかなりあると思いました。

かなりざっくりですが、上記になります。まとめると、プロジェクトの成功はかなり設計段階での仕様策定にかかっており、よくある曖昧な仕様ではほぼプロジェクトが失敗する運命にあり、実際に開発を進めるにあたり、プログラムの保守性を意識して分かりやすいプログラムを書くのがいかに重要か、またそのようなチームビルディングやプロとしての資質を保つことがいかに重要かが述べられている書籍だと思います。
多数の名著を詰め込んだような本なので、個人的に知識の足りない部分について理解できない内容が結構ありましたが、さらに曖昧な部分は別途参考文献を購入して調べ、技術知識を強化していこうと思います。
出版されてから大分経ちますが、未だに各フェーズにおいて参照できる名著だと思いました。

コメント投稿フォーム

メールアドレスが公開されることはありません。 が付いている欄は必須項目です