「ソフトウェア設計とは何か?」がすごい

結構前のエントリになりますが、cles::blogさんで紹介されている「プログラミングは設計か製造か?」に感銘を受けました。はてブを見ていると、最近になってwebarchiveから発掘されたようです。

原文はこちらで公開されている模様。

全編にわたって非常に示唆に富んだ内容となっています。印象深かったトピックは以下。

  • ソースコードは設計であり、ドキュメントである
  • ソフトウェア開発における「製造」とはビルドである
    • 製造はコンパイラとリンカの仕事であり、コストは非常に小さい
  • テストやデバッグは設計の検証と洗練のプロセスである
    • 他の工学分野のそれと等価で手を抜くべきでない
  • 「コーディング」「テスト・デバッグ」「(俗に言う)設計」は全て設計の一部である
  • 上位設計・下位設計は密接に関わっており、同程度に重要である
  • 上位設計の意図を伝えられる、表現力に優れたプログラミング言語が必要である

アジャイル開発、XPといった潮流の中で近年さかんに提唱されてきた概念が、今から20年近く前に既に提唱されていたことに驚きと感銘を受けます。

更に言えば、ソフトウェアのビルドを「製造」と位置付け、上位設計からコーディングまで全てを「設計」とする視点は今でも非常に新鮮なものに思われます。

この論によれば、LLに代表されるインタプリタ型の言語で一定規模のアプリケーションが作成可能となった現在では、ビルドのコストは安価であるどころか意識することさえありません。また、それらは擬似コードと同等のレベルで抽象化されたコードが書けるだけの柔軟な言語仕様を持っています。テストを書いたり実行する環境も当時とは比較ならない程の進化を遂げているはずです。

これだけ恵まれた環境にある我々がソフトウェア設計について甘い認識を持ったままコードを書いたり、テストやリファクタリングから目を背けることはソフトウェアに対して失礼なのではないかとさえ思えてきます。ソフトウェア設計をなめるな。


僕がこの文章を読んで真っ先に頭に浮かんだのは、よしおかさんの「20年前でも当たり前にテストを書く文化はあった」という言葉です。インターネットの発達によって我々が得ることの出来る情報は爆発的に増えましたが、インターネットが普及する以前の情報というのは実はそれほど充実していません。ネットに存在する「当時の生の声」はもっと評価されていい。

さて、文中には「昔々,私たちはウォーターフォール・プロセスを実践していました」ともあります。今は何年でしたっけ。