コーディングは設計か製造か

cppll_novice というメーリングリスト (ML) から、なかなか面白かった投稿を紹介します。

ソフトの設計書は、ハードでいうところの回路図にあたり、コーディングは配線及び基板実装に当たると思います。

UMLを元にコーディングするという行為は、回路図を元に基板のレイアウトや配線を人手でおこなうのと同じだと思っています。(なので、キチンとチェックしないと回路図と実装が違う事があります)

それは、コーディングがアセンブラやパンチカード作りだったときの話です。(コーディングがコストも手間もかかる作業だったから、コーディング前に全て設計しないと行けなかった)

現在は、コーディングは詳細設計であり、ビルドやCD-Rに焼くことが製造になります。UMLで行う設計とは、回路図を作るほど詳細な設計ではなく、基盤レイアウト(石や部品を基盤上にどう配置するか)を決める行為に当たります。

UMLの虚構 - cppll_novice

実際にソフトウェアのコーディングを仕事としている人以外の間では、最初に紹介した投稿者と同じように思っていることが多い(コーディング=製造)ようです。そして、それはその投稿者が「当たり前の事」と思ってしまうほど深く根付いているようにも思います。

ただ、いくら設計書を元にコーディング(製造)するだけといっても、コーディングにはやはり創造といった類のものが入り込んできます。そして、この部分が他の分野の「設計書を元に製造する」事とは異なる特徴であり、やっかいな部分でもあります。コーディングの段階で創造という不確定要素が入ることによって、そのソフトウェア開発が失敗する可能性が高まりますが、さりとてその創造を排除するような完璧な設計書を作成するのは(恐らくは)不可能である、と。この事実には、かなり多くの人が既に気付いてはいるのですが、ではどうしたらいいのか?と問われると、なかなか難しいようです。

話が逸れますが、このML中で「コーディングが設計という性質を含むことの証明」というものが紹介されていました。なかなか明快で面白かったので、ここでも紹介します。

コーディングが設計の一部だというのは、かなり昔からの定説です。

90%が創造的な作業であるソフト開発に「製造」の管理手法を無理やり適用させようとしている「自称ソフトウェア工学屋さん」が、この定説に対してマトモに反論している文書を読んだ事がありません。

逆に、コーディングが設計作業だという証明は簡単に出来ます。

  1. コーディングから創造的な作業を無くすほど完全な設計書があったと仮定する。
  2. その設計書には完全に動作が記されているので、人間がコーディングしなくてもその設計書のコンパイラを作ればその設計書通に動くソフトウェアが作成できる。
  3. その設計書は、コンパイラで変換できるので、ソースコードである。
  4. その設計書はソースコードなので、その設計書を書く作業はコーディングである。
  5. 1.と4.は矛盾するので、1.の仮説は間違い。
散々言い尽くされた話 - methaneのブログ