Cotton Bolls: 種の設計
« 引越し | トップページ | ストーリーポイント »
2004.03.21
種の設計
ソフトウェア開発について考えるとき,僕が一番好きなのは次の言葉だ.
If you want to design a new flower, you will design the seed and let it grow.
この言葉は,パターンで有名なChristopher Alexanderの著書「時を越えた建築の道」の翻訳本にある「訳者あとがき」に登場する.訳者である平田翰那(かんな)氏がバークレー校での学業を終えるときにAlexanderから送られた言葉だそうだ.
「時を越えた建築の道」を買った当時,ソフトウェア界隈でパターンはほとんど知られていなかった.GoFもなかった頃だ.僕がパターンを知ったのは,DDJJのKent Beckによる記事だったと思う.実は,その記事を読んでもパターンが何かよくわからなかったのだが,ソフトウェア設計に役立つと聞き,「パタン・ランゲージ」「時を越えた建築の道」「形の合成についてのノート」などAlexanderの一連の書籍を買ってしまった.「時を越えた建築の道」は建築や都市設計のコーナーにあるのだが,手に取ったとき,隣にいた人から「本当に買うんですか?」と驚いたように聞かれたのが印象に残っている.建築の世界でもパターンに興味を持つ人は珍しかったらしい.
これらの本を読み,Alexanderは建築家というより思想家で.スケールの大きいことを考えるなあと感動したのを覚えている.でも,これがどうしてソフトウェアに役立つのかわからなかった.わかったのは数年後にGoF本を手に取ったときだ.そのときはパターンをソフトウェアに応用するとこんな風になるのか,という印象だった.でもこの本は単なるパターンカタログで,Alexanderの本来の思想からはちょっと外れている.今Alexanderの考えに一番近いのは,きっとXPなんだろう.
少し脱線したが,最初のAlexanderの言葉に戻ろう.この言葉が好きなのは,これが一番理想的なソフトウェアの開発プロセスだと思うからだ.
ソフトウェアを開発するとき,まず種の設計から始める.ここでいう種とは,そのソフトウェアのToy Modelというべきものだ.ミニチュアのおもちゃのようなクラスと考えてもらえばいい.この段階では,画面UIやデータベースは一切関係ない.あくまでテストメソッド内で簡単にシュミレーションでき,ソフトウェアの要件を満たすよういろいろ遊べるクラスなわけだ.
そういう種ができれば,今度はそれを育てていく.培養していくのはテストコードで,育てるのは少しずつの機能追加とリファクタリングだ.ここで肝心なのは,育てるときにコードをよく観察するということだ.「不吉な匂い」を感じたら,すぐ原因を突き止めて病気にならないようにしなければならない.また,いきなり目的の機能を入れようとしてもいけない.無理に入れようとしても,そこまで育っていなければいびつな設計になってしまう.あくまでコードを誘導して目的のところまで育てていくことが必要だ.
こうして出来上がったプログラムは,設計も実装もすばらしくいいものになる.最初からこのパターンを使おうとか,クラス図で詳細をつめてからコードを書こうとか,最初からそういうことを決めてしまうといびつで汚いコードになってしまう.そこには「育てる」という過程がないからだ(注:この「種を設計し,育てる」というプロセスは,あくまでストーリー単位のものと考えてほしい.ソフトウェア全体の種を設計し,一度にみんな育てる,ということではない).
この仕事をしていると,よく画面べったりの汚いコードに出くわすことがある.そのコードの開発者は納期に追われていたか,新しい技術の習得に精一杯で種について考えることがなかったのだろう.どうもこの抽象化を忘れたまま開発している人が多いように思う.種の設計には,画面やDB,新しい技術をいったん捨てさるという抽象化の能力が必要だ(16パズルの抽象化が参考になると思う).でも,自分ができる範囲で行うだけでもいいと思うのだ.
僕自身も最近新しい技術や言語の習得に時間をとられ,こういった基本がおろそかになりつつある.そういうとき,改めてこのAlexanderの言葉を思い返す必要があると思うのだ.
05:45 PM | 固定リンク
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/332532
この記事へのトラックバック一覧です: 種の設計:
»
「育て [ほげ日記から]
「育てる」というのは、興味深い表現ですね。対象とするソフトウェア(あるいはプロジェクト)の進行/発展を、
将来にわたって予測した通りに完全に制御することが出... 続きを読む
受信: April 3, 2004 09:21 AM
コメント
「育てる」というのは、興味深い表現ですね。
対象とするソフトウェア(あるいはプロジェクト)の進行/発展を、
将来にわたって予測した通りに完全に制御することが出来ず、
それが故に愛着を感じるような印象を受けました。
ところで、Kent Beckの記事というのは、以下の翻訳ということで
しょうか?読んでみたくなりました。。。
http://www.webreview.com/articles/1994/9402/
投稿者: washizaki (April 3, 2004 09:20 AM)
うっかりして、トラックバックとコメントの両方を入れてしまいました。。。
投稿者: washizaki (April 3, 2004 09:27 AM)