ソフトウェア開発のメタファ
ソフトウェア開発のメタファーはいろいろある。建築、などと対比されることが結構多い。
ここでは、ラグビーで得点する、という活動と対比してみたい。敵の動きはあらかじめ計算できない。監督は試合が始まったら声をかけたりサインを出したりするが、基本的に現場で判断が起こる。つまり、「計画して忠実に実行する」という考え方では得点できない。
野中郁次郎先生が、"The New New Product Development Games"という論文で、製品開発の「知識創造活動」をSCRUMという形で定式化した。これが、アジャイル開発の1つの起源になっている。SECIモデルの知識創造が、現場で起こっており、それを支援するプロセスとして製品開発をモデル化している。
ただ、すべてのソフトウェア開発がこのような「動的な」ものだ、というつもりはない。ものによっては、「計画してその通り実行」というモデルに近いものもあるだろう。
例えば、「道路を作る」ということを考えてみる。
もし、人が踏み入ったことがないジャングルだとすると、かなり危険なプロジェクトだ。数人でチームを組み、まずは、細い道をキャンプを張りながら、日々迷いながら歩いてみることから始めるだろう。最初に大量のアスファルトを発注したりはしない。そして、森の向こうに到達できたら、そこから徐々に道を広げていく。これはアジャイルに近い。
逆に、地形が見渡せる平地に舗装道路を作る場合、過去の膨大な経験データの蓄積から、かなり精密に計画がつくることができるだろう。アスファルトの量や、ローラー車の稼動タイミング、必要な人工の積算。これは、ウォーターフォール型(計画駆動型)のソフトウェア開発に近いだろう。
ソフトウェアは目に見えない。また、一口にソフトウェアといっても、その特性はさまざまだ。いつでもメタファの危険は付きまとうが、いろんなメタファを元に考えてみることは有用だと思う。他にも、「育てる」メタファ(SimCityのメタファ)など。。。。違ったメタファがあったら教えて欲しい。