プログラミングは製造ではなく設計だ

オブジェクト指向プログラミングとSimula言語の父であるクリステン・ニゴールは、かつてプログラミングとは学習だと言っていました。プログラミング、より正確に言えばソフトウェア開発は、工学や建築のプロセスではなく、発見と学習のプロセスだということを受け入れることこそ、ソフトウェア開発の実践を前進させるのです。伝統的な工学や建築というコンセプトをソフトウェア開発に適用しようとしてもうまくいきません。ソフトウェアについての思考をリードする人々は、30年以上も前から、このことについて論じてきました。たとえば、フレデリック・ブルックスJr.は、1987年の「軍事ソフトウェアに関する国防科学評議会報告書」の中で、規定してから構築するという文書に支配された方法こそが、多くのソフトウェア問題の根本だと述べています。

では、ソフトウェア産業は、その実践を改善させるために、何に着目すればよいのでしょうか。自動車、薬品、半導体など、大市場を抱える製品の製造過程を見てみる必要があると思います

保険業界のそんな産業動向を知っていれば、クライアント企業がまだビジネスモデルの一部としてそのような商品を計画していなくても、アーキテクチャーにこの種の商品を取り入れるためのプランを立てておけます。

では、この自動車製造のシナリオから何が学べるのでしょうか。重要なことは、新車の製造には2つのプロセスが含まれているということです。第1のプロセスは、製造ラインの確立も含む、創造的な設計プロセスです。第2のプロセスは、顧客の指定に基づいて自動車を作る製造プロセスです。これらは、ソフトウェア産業でもさまざまな意味でよく見かけるプロセスだと言えます。問題は、これらの言葉に何を詰め込むかです。

ジャック・リーブズは、「ソフトウェ絵エア設計とは何か」という論文において、ソフトウェア工学が作り出すものの中で、伝統的な工学用語としての設計文書の基準を満たすものは、ソースコードだけだと述べています。ソフトウェアの製造は、コンパイラとビルド、テストスクリプトによって自動化されています。

ソースコードを作り出すことは、製造ではなく、設計であるという考え方を受け入れれば、機能することが実証されている作業管理の手法を取ることができます。それは、新車、新薬、新しいコンピューターゲームの開発のように創造的で結果が予測できない仕事を管理するための手法です。つまりスクラムなど、アジャイルの開発管理手法のことを言っているのです。これらの手法は、カスタマー・バリューの面で投資効果を最大限に引き上げることを重視しています。

ソフトウェア産業がこれらの手法から最大限の効果を引き出すためには、プログラミングとは設計であって、製造ではないということを決して忘れてはなりません。