↑の何がすごいのか

僕は工学というものを「凡人でもできる限り高品質のものを短期間・低コストで作れるようにすること」と捉えています。バイトの兄ちゃんが作ろうが海原雄山が作ろうがビックマックビックマックっていうことです。抽象的に言うならば特殊な技能(職人芸)を必要条件とせずに均質な生産を行う製造プロセスを構築するということです。(そうではなくて、普通の人に簡単に職人芸を身につけさせる教育方法を構築するという手段もありえますが、これは工学の範疇ではないと思います)

ソフトウェアの生産において、均質な生産を行う製造プロセスを構築するのはおそらく不可能であろうと推定していました。ソフトウェア開発に銀の弾丸はないのです。

一般に考えられているように、また昨日まで僕が考えていたように、ソフトウェアの製造作業をコーディングであると定義した場合、これを誰にでもできる単純作業に落とし込むためには完璧な仕様書が必要です。しかしそのような仕様書は本質的にソースコードと等価です。そのような仕様書は、単にソースコードを出力するためのメタプログラミング言語のソースコードと言っても過言ではありません。結局それは単なる高級言語に過ぎず、その仕様書(仕様記述用高級メタプログラミング言語のソースコード)を書くには本質的にコーディングと同じコストがかかります。

これを帰納的に適用すると、メタ言語メタ言語メタ言語の....と積み重ねていっても、「銀の弾丸はない」(=ソフトウェア開発の困難さは偶発的な困難さではなく本質的な困難さに起因する)という仮説が正しい限りにおいて、コーディングを単純作業に落とし込むことは不可能です。つまり、銀の弾丸がないことと、ソフトウェア工学が成立することは矛盾するわけです。


しかしながら、「ソフトウェアにまつわる作業はすべて設計作業である」とするのならばソフトウェア工学はこの矛盾から開放されます。ハッカー文化とガチガチの開発手法は、目指す頂きが違うのではなく、同じ山の異なる登山ルートに過ぎなかった、という訳です。ああ、これぞアウフヘーベン。そして、どちらの登山ルートがよりよいのかは、単に市場が判断してくれるということなのでしょう。