人月の神話【新装版】

ソフトウェア開発およびそのプロジェクトマネージメントの古典的な書として、ずっと気になっていたこの本、やっと読了できました。個人的にはプロジェクトマネジメントの話より「概念構造体」などの言葉で語られるソフトウェア開発の難しさについての洞察が興味深かったです。ソフトウェアは目に見えないので、対象を抽象的な概念で捉え・モデル化し・伝えることが常に求められるのですが、この年になってもまだまだそのスキルは十分でなく向上が必要なのを思い知らされる毎日です。今回、新装版が発行されたのをきっかけに手にとってみましたが、原文の出版が1975年ということで、なんと40年も前の古典になります。この書で示される数々の洞察が今もなお色褪せていないということが、ソフトウェア開発の本質的な複雑さ・難しさを粛々と語っていますね。

以下、心に響いたセンテンスを引用します。

インプリメンテーションが定義を過剰に規定してしまっていた。つまり機械が何をすべきかについてだけでなく、どのようにすべきかという点についてまで多くを語り過ぎたのである。
(p59)

コスグローブは(略)彼が見たところによると、デザインを文書化したくない理由は、単なる怠慢や時間的圧力にあるのではない。むしろ、仮のものだと分かっている決定事項に対して弁明の言質をとられたくないというデザイナーの思いから来ているのだ。「デザインを文書にすることで、デザイナーは自分自身をあらゆる人からの批判にさらすことになり、自分で書いたことすべてを弁明できなくてはならない。組織機構からなんらかの脅威を受けているとすれば、完全に擁護できるようになるまでは、何も文書化されないのだ」。
(p108)

ソフトウェア実体の本質とは、データセットやデータ項目間の関係、アルゴリズムや機能呼び出しなどが組み合わさったコンセプトで構成されたものである。この本質は、同じ概念構造体が多くの異なる表現で表されるという点で抽象的である。それにもかかわらず、非常に正確で十分に詳細なものである。私は、ソフトウェア構築において困難な部分は、この概念構造体の仕様作成とデザインおよびテストにあって、それを表現する仕事やその表現に忠実か否かをテストする仕事ではないと考えている。
(p170)

ソフトウェアの構造を図にあらわそうとするやいなや、1つではなく複数の一般的な有効グラフで構成されていて、しかもそれらが互いに重なり合っていることに気付く。いくつかの図には制御の流れ、データの流れ、主従関係、時間的順序、名前とスペースの関係などがあらわされている。通常これらは二次元にさえなっておらず階層化されていることなどまずない。実際のところ、こうした構造に対して概念的制御を確立する方法の1つは、1つまたはそれ以上の階層構造図になるまではグラフの結び付きを取り除き続けることである。
(p174)

人月の神話【新装版】

人月の神話【新装版】