勘と経験と読経

略すとKKD。ソフトウェア開発やITプロジェクトマネジメントに関するあれこれ。

ソフトウェア犬小屋とビル建築

ソフトウェア開発におけるメタファーの話。某所でイケていないソフトウェア開発のことを「犬小屋づくり」に例えている文章を読んだ。わりと昔から目にする例えなんだけど、現在もその通りに使えるのかというと微妙だと考えた事。

http://www.flickr.com/photos/30748201@N08/3202141446
photo by ClicPhoto Studio

犬小屋のメタファーの原点

犬小屋とは、「ひとりで試行錯誤しながらつくる小さなものづくり」という事を指している(のだと思う)。犬小屋というメタファーの原点は、ソフトウェア開発の名著である「Code Complete」にあるようだ。というわけでちゃんと調べてみた。

たとえば、犬小屋のような単純な構造物を組み立てるとしよう。材木店に出かけて適当な材木と釘を買ってくれば、夕方までには愛犬の新居が完成するだろう。うっかり入り口を作り忘れたといったミスを犯しても、たいした問題ではない。修正すればよいし、何なら最初から作り直したってかまわない。午後の時間が無駄になるだけのことだ。こうしたルーズなアプローチは、小さなソフトウェアプロジェクトに適している。1,000行分のコードの設計が良くなかったら、リファクタリングすればよい。最初から書き直したとしても、失うものはほとんどない。


しかし、家を建てるとしたら構築プロセスはもっと複雑になる。設計に不備があった場合の後始末も複雑だ。まず、どのような家を建てたいかを決めなければならない。ソフトウェア開発で言えば、要求定義に当たる部分だ。次に、建築士と話し合って全般的な設計を決め、合意しなければならない。これはソフトウェアアーキテクチャの設計(概略設計)にあたる。そして、詳細な青写真を作り、建築業者を雇う。これはソフトウェアの詳細設計に当たる。建築用地を準備し、基礎を打ち、家の柱や梁を組み、壁を貼り屋根をふき、配管と配線を敷設する。これはソフトウェアコンストラクションだ。家がほとんどできあがったら、造園業者や内装業者を呼び、家や庭の仕上げに取り掛かる。これはソフトウェアの最適化に当たる。そして、このプロセス全体を通じて、用地や基礎工事や枠組みや配線などを検分するさまざまな検査官がやってくる。これらはソフトウェアのレビューやインスペクションに当たるものだ。


複雑になればなるほど、そして規模が大きくなればなるほど、作業の結果が及ぼす影響も大きくなる。

CODE COMPLETE 第2版 上 完全なプログラミングを目指して
第2章 ソフトウェア開発への理解を深めるメタファ

要は、ルーズなアプローチでは小規模なものは作れるけど大規模なものは作れないという話だ。

大規模犬小屋

ややこしいことに、ソフトウェアの世界には現実世界の重力にあたるものがないので、ビルのような犬小屋をつくったとしても自壊しないということだ。というわけで、実際にはスケールした犬小屋、大規模犬小屋は存在し得てしまう。

この大規模犬小屋の問題には、二つの文脈がある。

  • 犬小屋レベルの知識しか知らずに、巨大な構築物を作ってしまう
  • 試行錯誤しながら作り上げることが正しいと信じて革新的に巨大な構築物を作ってしまう

前者はある意味仕方がない・・・・・・というか「知らないことは罪ではない(プロでもないけど)」。

犬小屋の作り方しか知らない人間が果たして高層ビルをまともに構築できるでしょうか?もちろん無理な話なんですが、そのままやっちゃうんですよね〜。犬小屋の作り方で。

実際の建築ではビルは作れませんが、システム開発においては「とりあえず動くレベル」のものは作れちゃったりします。そして、なまじそんなシステムがリリースできたりすると、開発者は変な自信を持ってしまったりします。でも、所詮犬小屋の作り方がベースなので、フタを開けてみると中は目も当てられない惨状が広がっています。。。

犬小屋と高層ビルの違い - give IT a try

後者はちょっと難しくて、必ずしも間違いではない(が、見極めを誤るとハイリスク)。

  • 犬小屋をプロトタイピングで作って それを拡張、改修し続ければ高層ビルになるか?
  • ならない 当初犬小屋で良かったものが要求の変更で 高層ビルが求められる悲劇がそこにはあるが...
  • できるのはハウルの動く城

ソフトウェア設計のすすめ

進歩するDIY技術

ここで話をややこしくするのが、犬小屋をつくる技術も進歩しており、より大きな犬小屋が複雑な知識無しで作れるようになってきているということ。

目指すべきは、「ビル建築の方法論を知りつつ、必要に応じてDIY技術で犬小屋を手早くつくる」ということなんだろうと思うけど、ビル建築の方法論を学ぶコストが馬鹿にならないのが悩ましいところである。むしろ、最新DIY技術の限界を知り、ビルを作らないようにすることに特化したほうがいいのでは無いかと思う今日この頃。