コーディングの工程を「製造」と呼ばないで

 今回書くことは、ある意味、以前書いたことと相反してるんですがね。まあ、世の中たいてい真実は中間へんにある気もしますし。
 さて、実のところこんなことはいまさら私が言うまでもなくとっくに語られてきたことではあるのですが。

 世間にはシステム開発の工程を設計・製造・テストといった段階に分けて管理しているところが多々あります。これはおそらく製造業のメタファで、末端でソースコードをゴリゴリ書いているプログラマは、工場のラインでネジ締めしている労働者と同じ、という考え方なのでしょう。
 しかし、工場のラインでの「製造」は、基本的に「まったく同じもの」の複製です(色とか多少の差異はあるかもしれないが)。「まったく同じもの」をフエルミラーのごとく量産するのであれば、ソフトウェアならコピーコマンド一発なのであって、わざわざ人を雇うほどのものではありません。よって、いかに末端のプログラマであっても、彼らの作業は「設計」であり「製造」ではないわけです。ソースコードはそれ自体設計書であり、それを元にコンパイラが金型作って試作製造して、うまくいったらコピーコマンドが「製造」、というのが製造業にたとえた場合の正しいレイヤでしょう。

 とはいえ、設計にもやっぱり「段階」というものはあるのであって、UIレベルの外部設計から始まって、データ構造やクラス構造の設計やら主要なインタフェースの設計やらがあり、末端は、メソッドの内部実装あたりになるかと思います。これについて、スーパープログラマが上から下まで全部やる、というのがある意味理想なのでしょうが、なかなかそうはいかないわけで、上位の設計と下位の設計とで分業すること自体は悪いことではない。でも、そうするのであれば、上位の設計者は、下位の設計者よりもより「抽象度が高い」レベルでものを考えてなきゃいけないわけで。
 ソースコードと1:1に対応するようなものを「設計書」と呼んでちゃいけないですよねえ。
 と、このへん見てて思ったのでした。
 細かいところまで指定する設計書は実在する。