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

アイナー・ランドル

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

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

 たとえば、自動車産業を取り上げてみましょう。新しいモデルを計画するときに最初に行うことは、コンセプト、アイデアを選択し、アーキテクチャーにどんな位置づけを与えるかを決めるのです。たとえば、BMW X6 は、新しいコンセプトを打ち出しています。このコンセプトとは、SUV とクーペの特徴を組み合わせたもので、BMW はこれにスポーツ・アクティビティ・クーペという名前を与えました。しかし、あなたが X6 の新車を買えるようになる前に、BMW はすでに膨大な時間と資金を費やして、自動車自体とその製造ラインを設計しています。そして、あなたが BMW に新車を発注すると、製造ラインの 1 つが動き、あなたがカスタマイズした X6 が作られます。

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

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

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

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