February 11, 2014

CODE COMPLETE 第2版

キーワード:
 スティーブ・マコネル、コード、コンストラクション、可読性、奥義書
米ソフトウェア界の第一人者による、プログラミングの指南書。目次はかなり多いので、以下のリンク先を参照。最初に結論を示しておこう。

プロプログラマーならこれを読まずにプログラミングをすることなかれ!!なぜなら、これはプログラマーにとっての圧倒的な奥義書だからだ!!

初版は1994年に出版されており、2005年に改訂版として本書が出版されている。上下巻構成で合計1,272ページ、重量約2kg(体重計で測った!!w)の圧倒的なボリュームであるが、プログラミングのお作法的な本として、テーマの網羅性、内容量、分かりやすさ、使える度に関して、これ以上の本は読んだことがない!!もしこの本以上のプログラミングお作法本があるなら、教えてくれ!!っていうような内容。

本書のテーマとして、「ソフトウェアコンストラクション」という言葉が示されている。これはソフトウェア開発におけるプロセスのことで、本書では特にコーディングとデバッグがメインで、その他に詳細設計、コンストラクション計画、単体スト、統合、統合テストといった部分が示されている。

そして、このソフトウェアコンストラクションはなぜ重要かというと、以下の理由が示されている。
  1. コンストラクションはソフトウェア開発の大部分を占める
  2. コンストラクションはソフトウェア開発の中心的なアクティビティである
  3. コンストラクションに専念することで、個々のプログラマの生産性は驚くほど向上する
  4. コンストラクションの成果物であるソースコードは、多くの場合、ソフトウェアを正確に書き表した唯一のドキュメントである
  5. コンストラクションは必ず実行される唯一のアクティビティである
なので、特にコーディングに関しては以下の2点が最重要なテーマとなる。
  • ソフトウェアに不可欠な技術的な要素として、設計、コードの複雑さに適切に対処すること
  • コードの読みやすさ
これらをテーマとして、目次に示されている内容がかなり分かりやすく、網羅的に示されている。

もう少し補足すると、複雑さに対処するということはどういうことかというと、設計やコードをなるべく分かりやすくすべきということになる。複雑な部分は他の人が理解するのに余計な労力を強いることになり、そしてそういった部分にバグが混入しやすい。結果的にソフトウェア品質が落ちてしまう。

よって、変数名は分かりやすく意味のあるものを付ける、クラスを適切に分割する、カプセル化でメンバデータを保護する、クラスの継承をしすぎない、多重ループを避ける、if分のネストも制限する、ポインタを使用しなくても実現できるなら使用しない、ルーチンの引数を増やしすぎない、などなどといったプログラミングの基本的なお作法が必要になる。

また、ソフトウェア開発におけるプログラミングというのは、本書によれば、実際にコードを書いているよりも他の人が書いたコードを読んでいることのほうが時間的に多いので、適切なコメントを設定し、読みやすくするべきとある。たとえ自分しか読まないコードだったとしても、それを1ヵ月後などに手を入れる時などに、読みにくいコードを書いていた場合は、なんだこれは!!と思うことは確実なので(あるあるw)、ちゃんと読みやすくしましょうと示されている。

詳細な内容については、もう読んでくれ!!としか言いようがない。もちろん、著者もまえがきで示している通り、すべてに納得がいくわけではないとある。それはその通りであるが、納得がいかない部分に関しても、自分なりのコードのスタイルを確立するための一つの参考になり、結果的に勉強になる。

上巻は主にコードの書き方そのものに関して示されており、下巻はすでにあるコードの改良やプロプログラマーとしての心構えなどが示されている。上巻だけでよい、ということはなく、下巻も合わせて読むべき。個人的にはむしろ下巻のほうが割と心に残った気がする。

ボリュームは相当多いのだけど、他の翻訳本にありがちな分かりにくさはほとんどない。まず日本語訳がすばらしい。意味の通らない文、原文が想像できるような変な日本語はなかった。また、本書のページ構成もちゃんと構造化されていて、分かりやすい。そもそもコードを読みやすくしましょうと説いている本が読みにくい構成だったら説得力がないし。つまり、翻訳技術本としてはかなり読みやすいと実感した。

これがなぜ奥義書かというと、分かりやすさとテーマの網羅性もあるのだけど、決定的なのは先人の英知の結晶であるから。つまり、本を書いたのは著者一人なのだけど、初版から第2版まで相当の専門家のレビューを受けているし、何よりも圧倒的な参考文献の量が品質を担保していると言える。

参考文献だけで30ページも詳細に示されており、研究論文から定番本の『人月の神話【新装版】』など様々な文献が示されている。なので、これ1冊読むだけでプログラミングのお作法的な内容はほぼ網羅されていると思われる。また、本書からそれらの参考文献に知識を広げていくのもよい。

また、以前取り上げた似たテーマの以下の本も推薦図書として示されている。こちらも合わせて読んでおいたほうがいいね。

上下巻合わせて約1,200ページもあるので、買って読むのはかなり躊躇するだろう。値段も合計12,200円+税とかなり高額になるし、残念ながらKindle版もまだ出ていない。実際僕も買って2年ほど積読して放置していた。しかし、最近また自分の技術力の底上げをしようと思い立って、読み始めてみたら、案外分かりやすく、お作法的な本は別に大丈夫だろうと思っていたけど、それでもかなり勉強になった。今まで読んでいなかったことを反省しているというくらいに。

さすがに量が多いので最後まで読むのはしんどいかもしれない。そのため、記録を付けていくのがいいと思う。僕は大体20日間(間に有給休暇を挟む)で約50時間近く(ネットしたり集中していない時間も含む)かかって読了した。1日大体2時間ペースかな。そんなに時間が取れない人は、1日30分からでもぜひ読んでみてほしい。はやりのソーシャルゲーム株に数万円投資して損失を被るよりも(('A`))、本書の上下巻12,200円+税と約50時間の工数の投資のほうが確実なリターンとなるのは間違いない!!

また、同じようなテーマの本として『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)』があるが、こちらは2012年発売で、本記事の投稿時点で26件のレビューが示されている。しかし、コードコンプリートは2005年発売で、上巻で16件、下巻でわずか5件となっている。評価もほぼ5つ星でにもかかわらず。このことから推測できることは何か?

これだけの圧倒的な奥義書にもかかわらず、下巻の最後まで読了した人は少ないということ。つまり、下巻まで読了するだけで並みのその他大勢のプロプログラマーから頭一つは抜け出せるっていうことだ!!

そもそも本を読んでいる人は少数派であり、さらに本書の存在を知っているプログラマーも実はそんなにいないかもしれない。たとえ知っていても、価格とボリュームの障壁で、最後まで読んでいる人はさらに少ない。ということで、チャンスだし消費税がアップする前に速攻で買って読むんだ!!

まだ読む気になれない!?では、本書に寄せられている著名人たちの賛辞で激しく同意!!と思ったものをいくつか引用しておこう。
  • 「プログラミングスタイルとソフトウェアコンストラクションのための優れた手引書」―Martin Fowler『Refactoring』
  • 「これまでに読んだソフトウェアコンストラクションの書籍の中で最高の1冊である。どの開発者も同書を1冊手に入れ、毎年最初から最後まで読むべきだ。私は9年間これを続けているが、それでもまだこの本から学ぶことがある」―John Robbins 『Debugging Applications for Microsoft .NET and Microsoft Windows』
  • 「プログラミング技術の向上を真剣に考えているならば、Steve McConnellの『Code Complete』を手に入れるべきである」―Jean J. Labrosse 『Embedded Systems Building Blocks: Complete and Ready-To-Use Module in C』
  • 「プロのプログラマを目指しているなら、この35ドルという投資は、これまでで最も賢明な投資かもしれない。この書評を読み終えるまで待つ必要はない。今すぐ書店へ駆け込み、この本を購入しよう。McConnellが述べているように、同書の目的は、業界の第一人者と一般的な商用ソフトウェアの習慣との格差を縮めることである...驚くべきことに、彼はそれに成功している」―Richard Mateosian 『IEEE Micro』
  • 「『Code Complete』は、ソフトウェア開発に携わる...すべての人の必読書である」―Tommy Usher 『C Users Journal』
内容をちら見したい人は、以下の章が(その他の一部の章も)公開されているので、それを読んでみるのがお勧め。最後に特に本書で琴線に触れた部分を引用しておこう。下巻の第33章『個人の資質』の「専門能力を養うことを誓う」という節の最後の部分。
 初級者レベルや中級者レベルであることは罪ではない。指導者レベルではなく、上級者レベルであることも罪ではない。罪であるのは、自分の能力を向上させるために必要なことをすべて知った後も、初級者レベルや中級者レベルに甘んじることである。
(下巻 pp.437)
もう経験年数もそれなりになってきているのだし、同一クラス(職位)に停滞したままではダメだなと思っていた。だから本書を読んで技術力の底上げを図ろうとした。その目的は確実に達成された。あとは本書を何度も繰り返して読みながら、自分のコードを練っていくだけだ。

本当にプロプログラマーにとっての奥義書なので、絶対買って読め



CODE COMPLETE 第2版 上
スティーブ マコネル
日経BP社
2005-03-26

CODE COMPLETE 第2版 下
スティーブ マコネル
日経BP社
2005-03-26

読むべき人:
  • プロプログラマーの人
  • プログラミングはやらない管理職の人
  • 奥義書を読んで修行したい人
Amazon.co.jpで『スティーブ・マコネル』の他の本を見る

bana1 プログラミング奥義書クリック☆  にほんブログ村 本ブログへ



トラックバックURL

コメントする

名前:
URL:
  情報を記憶: 評価:  顔   星