【91】ソフトウェアは実際には存在しない

チャド・ラヴィーニュ

 ソフトウェア・エンジニアリングは、土木工学などの確立された分野とよく比較されます。しかし、この比較には問題があります。従来の技術者が作る形がはっきりしたプロダクトとは異なり、ソフトウェアは実際には存在しないのです。伝統的な意味での存在では決してありません。1 と 0 の世界に住む私たちは、古典的な工学パラダイムを縛っている物理法則の制約を受けていません。工学の原則はソフトウェア設計にも応用できますが、伝統的な工学アプローチが使っているのと同じ方法で設計を実装できると思ったら大きな間違いです。

 ビジネスとソフトウェアは、ともに生きており、動く存在です。ビジネスの要件は、新しく獲得したビジネスパートナーやマーケティング戦略といったものによって急激に変わります。そのため、橋の建設なとき、従来の工学の仕事と同じように、ソフトウェアプロジェクトにアプローチしようとしてもなかなかうまくいきません。建設プロジェクトが半ばまで達したときに橋の位置を動かせと言われることはまずありません。しかし、ビジネスパートナーの買収により、アプリケーションに組織ごとのコンテンツ管理サポートを追加しなければならなくなることは当然予想されることです。このように比較すると違いがはっきりするでしょう。ソフトウェア・アーキテクチャーの決定は変更しづらいとよく言われますが、比喩的にも文字通りにも石に刻みつけられるようなものとは比べものになりません。

 私たちが構築するプロダクトの柔軟性やプロダクトの要件の流動性を知ると、私たちが動かないオブジェクトを作っている人たちとは異なる位置にいることがわかります。物理的な形のあるものを作る方が、「仕事のプランを立て、プランを実行していく」という形ではるかに簡単に作れます。ソフトウェアの場合、「仕事のプランを立て、プランをもみほぐしていく」という形で仕事を進めていかなければなりません。

 この違いは私たちにとって悪いことばかりではありません。私たちにとって有利に働くこともあります。たとえば、ソフトウェアシステムのコンポーネントは特定の順序で作る必要はないので、ハイリスクな問題に先に取り組むことができます。物理的な制約のために仕事を進める順序を自由に決められない橋の建設などと比べると、これは大きな違いです。

 しかし、ソフトウェア工学の柔軟性は、問題にもなります。もっとも、それらの問題の多くは、自ら好んで招いたものです。私たちは、アーキテクトとして、作ろうとしているものの「ソフト」な性質を知っており、問題を解くことが好きです。さらに悪いことに、ビジネスサイドの人々も、このことをうすうす気付いています。そのため、ビジネスサイドの人々は簡単に大きな変更をごり押ししてきます。いくら問題を解くのが性に合っているからといって、大規模なアーキテクチャー変更にあまり積極的になりすぎない方がよいでしょう。そんなことをすれば健全に進んでいたプロジェクトが破綻する危険があります。

 仕様書は青写真ではなく、ソフトウェアなどというものは本当は存在しないことを忘れないようにしましょう。私たちが作る仮想オブジェクトは、物理的な世界のオブジェクトと比べると簡単に変更できます。変更は何度も必要になりますので、これはよいことです。動かないオブジェクトを構築するのと同じように計画を立てることはかまいません。しかし、オブジェクトを動かせと言われでも、びっくりせずに、対応できなければならないというだけです。