平鍋さんの『ソフトウェア工学の名著探訪』第3回( #agileway )

平鍋さん( @hiranabe )がUSTでソフトウェア工学の名著紹介を
おこなわれている際に紹介されていた本をまとめておきます.
ちなみにハッシュタグは #agileway です.

今回は,第3回目についてです.

http://www.ustream.tv/recorded/9545062


今回は Steve McConnell の Code Complete についてでした.

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

CODE COMPLETE 第2版 上 完全なプログラミングを目指して


CODE COMPLETE 第2版 下 完全なプログラミングを目指して

CODE COMPLETE 第2版 下 完全なプログラミングを目指して

まずは,エラーハンドリングの設計に防火壁の概念をもうけることに
ついてでした.この話は聞いていて,その場でなるほどと思いました.
防火壁という統一思想を導入すると,エラーハンドリングが含まれて
いたとしても,すっきりとした構成が作れそうです.


そして,次に 問題の解き方に関してでした.Code Complete 内では
George Polya の How to Solve it が参照されているようです.

How to Solve It: A New Aspect of Mathematical Method (Princeton Science Library)

How to Solve It: A New Aspect of Mathematical Method (Princeton Science Library)

日本語訳では,『いかにして問題をとくか』です,
いかにして問題をとくか

いかにして問題をとくか

一般的に問題の解き方は,理解-分割-実行-ふりかえり,の4ステップであり,
Divide and Conquer (分割攻略)が知られているが,抽象度を高める形での
Name and Conquer (定義攻略) による解き方もあるとのこと.
確かに Name and Conquer に関しては,オブジェクト指向設計と似ていると
感じました.ただ,平鍋さんも勘と経験とおっしゃっていたように,
うーんと問題をにらんでえいやっと導き出すことになりそうです.


その次に,複雑なIf-else文を単純にするテーブル駆動方式についてでした.
関数ポインタテーブルやポリモーフィズムなどにより,確かに分岐が
減りますね.構造がすっきりすることは意識していましたが,分岐が
減るということは意識していませんでした.実際は同一のことでしたが.


おまけで,上村敏彦さんの『「やり残しゼロ!」の仕事術60』を紹介されていました.

「やり残しゼロ!」の仕事術60

「やり残しゼロ!」の仕事術60

本自体は,仕事をうまくやる方法集とのことですが,平鍋さんとしては,

  • タスクの目的を意識する.タスクを依頼する際には目的を添える.
  • 達成感(Sense of Completion)

を意識しているそうです.明日から私自身も意識していこうと思います.


今回も色々勉強させていただきました.平鍋さん,ありがとうございます.
プログラミングで悩まないように,ある程度 Code Complete を読んでおき,
それでも困ったときに再度読み直すようにしておこうと思います.


#平鍋さんがUST内で言いわすれて,その後tweetしたことを下記にメモ.

  • 「OOは分岐除去の仕組み。唯一除去できないポイントは、new というオブジェクトの誕生の瞬間である。ここを分岐可能にするのが、Factoryであり、DI コンテナ。」
  • 「assertion はユニットテストの直系祖先で、設計を支える実行可能コードと開発者の習慣。assertionが製品コードの外にでて、ユニットテストとなり、エントリポイントを多数持ったのが画期的。それによって、リズムと色!、がでて開発者の習慣に繋がった。」
  • 「コードの分岐をデータで表現したのがテーブル駆動。やりすぎたのがxmlコンフィグ地獄。コードの分岐を「名前」で消去できないか考えたのがConvention over Configuration. 」
  • 「Code Complete と Sense of Completion は Complete つながり。」