プログラミング雑誌の編集をしていると,ソフトウエア開発やプログラミングは,何に似ているだろうか,と思うことがある。

 昔から様々な比ゆ(メタファ)が用いられてきている。Webで検索できるものを挙げてみても,料理,音楽(作曲),小説の執筆,面白いところでは,精神分析,臨床心理学…などの意見が見つかる。興味のある方はぜひググってみるといいだろう。

 様々なメタファがあるなかで,最も広く知れ渡っているものを挙げるとすれば「建築」だろう。ソフトウエア開発を「建築物を作ること」ととらえ,開発プロセスを大きく上流(設計)工程と下流(建設)工程に分けるという考えは,単なるメタファにとどまらず,ソフトウエア開発の様々な面に大きく影響を与えている。

 例えば,○○アーキテクチャとかITアーキテクトといった用語が出てくるのは,建築をメタファとした影響だろう。ソフトウエアの設計ノウハウの集まりであるデザインパターンが,建築家Christopher Alexander氏がまとめた「A Pattern Language」にインスパイアされて考えられたものであるのは有名な話だ。

 建築のメタファは,日本の企業情報システム開発の現場で,システム・インテグレータの組織や業界構造の形成にまで影響を与えている。ソフトウエア技術者は,設計職=SE(システム・エンジニア),製造職=PG(プログラマ)といった役割に分けられ,プロジェクトの体制も,まるで建設業界のように,建設(製造)部分は下請けに出すという構造になってしまっている。

建築よりガーデニング

 しかし,ソフトウエアの適用分野が広がるにつれ,建築というメタファは適切ではないという考え方が少しずつ注目されるようになってきた。建築に代わるメタファとして登場してきたのが,主にアジャイル開発の文脈で使われる「ガーデニング」だ。ソフトウエアを,建築物のような「無機物」ではなく植物のような「有機物」ととらえ,「作る」のではなく「育てる」と考えるのである。

 実際,企業情報システムの多くは,運用・メンテナンス・拡張など,開発した後をどう保守していくかが課題になっている。顧客の要求はめまぐるしく変わり,極端な場合,システムが完成したときにはもうそのシステムは必要ない,というほど様々な環境要因がどんどん変わっていく。環境に適応したソフトウエアを適切なタイミングで提供していくことが求められる現在のソフトウエア開発は,確かに試行錯誤しながら庭を造っていくガーデニングのメタファのほうが建築より適しているように思える。

 こういった考え方は,「達人プログラマー」や「ソフトウェア職人気質」などの翻訳で知られる村上雅章氏が,「変わりつつあるソフトウェア開発の価値観 アーキテクトニクスからホーティカルチャーへ」で,とても分かりやすく論じている。

 また,「ソフトウエアを育てる」という観点に立つと,ソフトウエアの開発モデルも違って見えてくる。日本XPユーザグループの代表である倉貫義人氏は「改善型開発 ~ システムを作るのではなく育てるという発想」で,前向きな保守としての改善型開発という斬新な意見を述べている。

メタファの呪縛を解き放て

 しかしである。最近,筆者はガーデニングというメタファにも,ややピンとこないものを感じるようになってきている。

 例えばWeb 2.0におけるソフトウエア開発はどうか。「永遠にベータ版」などの発想は,庭造りに終わりがないようにガーデニングに近いと言えるが,「集合知の利用」だとか「ユーザー参加型のアーキテクチャ」といったものは,ガーデニングというメタファだけではうまく説明できないように思える。

 GoogleやYahoo!などが提供する様々なWeb APIなどのサービス,あるいはそれらを利用するマッシュアップという考え方も同様だ。ソフトウエアが,プロダクトからサービスへと変化するのだとしたら,ソフト技術者は庭ではなくて何を育てるのだろう。

 情報システムの位置付けも従来とは大きく変わってきている。古くは合理化・省力化が目的で,開発者は現場にヒアリングすれば,それなりに適切な設計を考えることができた。しかし現在は,システム化の対象が組織の一部分から全体になり,ビジネスとITのつながりは密接になる一方だ。現場も,それらすべてを把握することが難しくなってきている。まして,それが一企業ではなく,社会全体の中で使うシステムとなると,もはや人間がどこまでコントロールできるか怪しくなってくる。

 ここでもう一度,ソフトウエア開発は何に似ているだろうかという冒頭の質問に戻ってみよう。その質問に対する筆者自身の回答は---

  「ソフトウエア開発は,何ものにも似ていない」

---である。

 古くは建築でもよかった。ガーデニングも悪くない。しかし,もはやソフトウエアの存在や意味は,私たちが想像する以上に大きくなろうとしているのではないか。私たちは,ソフトウエアというものが持っているポテンシャルの,まだほんの一部しか理解できていないのではないか。

 もしそうなら,既存の言葉に頼ってしまうと,それらの言葉のイメージや慣習に束縛されて,これからのソフトウエア開発というものを誤ってとらえてしまうように思えるのだ。梅田望夫氏の「ウェブ進化論」風にいうなら,「あちら側」の世界を語るのに「こちら側」のメタファは適さない,ということだ。

 ソフトウエア開発とはいったい何なのか---メタファではない“新しい言葉”を見つけ出したときこそ,私たちはソフトウエア開発のための適切なプロセス,人材,組織を考えられそうな気がする。

------ 真島の『記者の眼』 ------
XPは「大人」になれるか? (2003/07/01)
求む! エンジニア向けの英語教材 (2002/11/27)
テスト・ファーストなんて嫌いだ! (2002/09/05)
ソフトウエア開発は楽しいですか? (2002/01/21)
ソフトウエア開発のどこまでを設計と呼ぶか? (2001/05/29)
良いコミュニケーションが質の高いソフトウエアを生む (2001/04/02)