タールの沼
情報
訳者:滝沢徹
書評:人月の神話 書評
解読「第1章:タールの沼」
太古の昔から、タールの沼に落ちた巨大な獣が死にもの狂いで岸に這い上がろうとしている光景ほど鮮烈なものはない。
第1章の書き出しである。個人的には衝撃的な小説的書き出しだったのだが、皆さんはどう思われるだろうか。ここからシステム開発に関して論じられていくと想像できる者は少ないように思う。
とりあえず、この冒頭の意図としては、ここ100年(本著が書かれたのは1975年である)もの長きに渡って、大規模システム開発で見られた光景を比喩で的確に伝えている。
もがけばもがく程にタールが絡み、苦しめられていく地獄絵図が、システム開発におけるスタンダードだった……と言われると、何とかしなければならないと危機感を煽られるのではないだろうか。
本著全体を通して、システム開発における問題点や改善点などを論じていくことになるのだが、この第1章ではその大前提が語られていく。要は『システム開発とは何ぞや?』という話である。
そもそもソフトウェア開発における最終的な成果物とは何か。そこに至るまでにはどのような経路を辿る必要があるのか。
どのような製品も最初はただのプログラムから始まる。
このただのプログラムに対し、下記のような工程を経ることでプログラミング製品となる。
- 一般化……入出力の範囲や形式、アルゴリズムが妥当であることの検証
- テスト……しっかりとしたテストケースを用意し実施、記録すること
- 文書化……だれでも使用、修正、拡張できるように文書を作成すること
同様にただのプログラムに対し、下記のような工程を経ることでプログラミングシステムとなる。
- インターフェース化……それぞれのプログラムの入出力を明確に定義し、構文およびコマンドの語義に準拠すること
つまり下記の通りの変遷を遂げる。
- プログラム⇒(一般化、テスト、文書化)⇒プログラミング製品
- プログラム⇒(インターフェース化)⇒プログラミングシステム
しかし、最終的な成果物としてプログラミング製品やプログラミングシステムは完璧とはいえない。顧客が求める完成品のことをプログラミングシステム製品といい、下記の工程を経ることが求められる。
- 一般化
- テスト
- 文書化
- インターフェース化
つまり、まとめると完成させる方法としては下記の2つの経路が考えられる。
- プログラム⇒(一般化、テスト、文書化)⇒プログラミング製品⇒(インターフェース化)⇒プログラミングシステム製品
- プログラム⇒(インターフェース化)⇒プログラミングシステム⇒(一般化、テスト、文書化)⇒プログラミングシステム製品
これらは一人、二人で完遂できる作業ではない。それぞれよりよい製品を作るという大前提の元、必要とされる最低限の工程ということは留意すべきだろう。
さて、そんな多数の壁を乗り越えなければいけないシステム開発だが、この第1章ではプログラミングの楽しさや苦しみといったものについても語られていく。そういえば、自分はそういった楽しさに骨抜きにされてエンジニアになったという過去が思い出される。
本著は難しいという印象を抱かれるかもしれない。実際、一般化やインターフェース化といった概念に対する詳しい説明は、第1章では描かれていない。今後、そういった概念に対して深掘りしていく回もあるので、この第1章で蹴躓いて読むのを諦めたという方は、プログラムからプログラミングシステム製品ができあがるまでの流れと、作る喜びというものを回顧できれば上々の読書体験といえるのではないだろうか。