memorandums

日々のメモです。

人月の神話

積読状態だった上記著書を昨日ざーっと読んでみました。研究テーマにソフトウェア工学を掲げている以上読まなければならない著書だったのですが。。。読みそびれてしまいました。
著者であるブルックス氏はIBMOS/360の開発マネジャー等を経験し、現在、ノースカロライナ大学の教授をされている先生です。

著書はソフトウェア開発の性質に関する様々な話題がエッセイ集のような形でまとめられています。
20年前の著書ですので、当然、書かれている内容は古いのですが、システム/ソフトウェア開発の話題の多くは現在にも通じ、現場でソフトウェア開発を経験された方なら誰しもがうなずける内容になっています。本書を学生が読むべきかは非常に悩ましいところです。それは実践経験がないと恐らく理解できないだろうからです。設計手法、プログラミング言語、チーム開発、プロジェクト・マネジメント、ソフトウェア見積もり、どれをとっても現場では当たり前のことですが、それを学生が理解するのは少し難しい*1。もちろん、読むなとは言いませんが、そういうものだと頭に置いて読むといいかもしれません。とりあえず16章だけでも読んでみるといいかと思います。

著書の「狼人間を撃つ銀の弾はない」という名言は、ソフトウェア開発に関わっていれば、本書を知らなくても目にすることがあるでしょう。私も講義で何回か引用しました。これは「(論文が発表された1986年からの)今後10年間でプログラミングの生産性の大規模な改善をもたらすような、ソフトウェアエンジニアリングの発展は一つもないだろう」という主張を一言で言い表した言葉です。本書を読んでこの主張の本当の意味を知ることができました。誤りがないように本書168ページを少し引用します。

私は、ソフトウェア構築において困難な部分は、この概念構造体の仕様作成とデザインおよびテストにあって、表現することやその表現に忠実かをテストすることではないと考えている。私たちは今でも必ず構文上の誤りを犯すが、システムでのコンセプト上の誤りに比べたら、たいていとるに足りない。
これが本当だとすると、ソフトウェア構築はいつでも困難だということになる。本質的に銀の弾という特効薬がないからだ。

本質的な問題は、ソフトウェアシステムに備わっている固有の性質、複雑性、同調性、可変性、不可視性、からきていて、それらの問題を解決する手段として、(執筆時点で)オブジェクト指向プログラミング、人工知能エキスパートシステム自動プログラミング、ビジュアルプログラミング、プログラム検証、環境とツール、ワークステーションなどがあるとあります。また、要件定義、RAD、インクリメンタル開発などの開発プロセスに言及し、最後に概念構造体を創造するのは人間であり、そうした人間を育成することが有効な解決策の一つだとまとめています。

確かにオールラウンドにソフトウェア開発の生産性を向上する方法は実現していません。ソフトウェア開発はあいかわらず難しく開発者がよってたかって頭を悩まさなければ完成しない代物です。現在、Ruby On Railsをはじめ各種フレームワークの登場によって定型的なアプリケーションの生産性は高くなっていますが、これはブルックス氏が言う「偶有的な問題」への対処に過ぎないかも知れません。

もしかすると、人間がソフトウェアを作っている以上、要件定義技術が向上しようとも、モデリング言語が精度を上げようとも、この問題を解消することはできないのかも知れません。本書の冒頭に書かれている通り、より良く理解するために、何度か読み返してみたいと思います。

*1:理論的に難しいという意味ではなく経験がないと意味を想像したり理解することが難しいだろうという意味です