【設計】魚図
── アメリカ人はなぜ優れたソフトウェアを開発できるのか?
先の話でトップダウン設計法の重要性について触れたが、最近はやりのオブジェクト指向プログラミングではむしろボトムアップ的なアプローチが重視されている。ボトムアップな設計では、具体的な処理手順のレベルで、分かるところから細分化を行っていく方法をとる。そして相互の関連性を考慮した上で分類・統合を行うことによって適度な大きさのモジュールを設定し、モジュール間の階層化を実現する。つまりトップダウン設計もボトムアップ設計も、最終的な目的はともに階層構造を作り上げることなのである。上(トップ)または下(ボトム)のいずれの側から出発しても、最終的に階層構造ができればよい訳である。しかし問題は、汎用性のある優れた階層が速やかにできるかどうかである。ソフトウェア技術者は、やはり両方から攻めていける能力を身に付けるべきであろう。私は、トップダウンの設計能力がなければボトムアップの設計もできないのではないかと思う。
話は跳ぶが、私の従兄弟の一人に画家がいる。抽象画とか色々なものを描いているらしいが、生物学者と協力してペンで魚の絵を描く仕事もしている。主に学術図書に載せる絵であり、その方面では第一人者であるらしい。本人に言わせると、年寄りが先に逝ってしまったので自然にそうなったのだとか。以前、その描き方について教えてもらったことがある。一般に絵を描く際は(これは誰でも知っていることだが)最初に直線や円だけを用いて概略の構図を描くことから始める。つまりトップダウンなアプローチが取られるのが普通である。しかしこの魚の絵を描く場合は、いきなり頭の部分から詳細に描き始め、逐次尾の方向へと描き進んで行く方法を取るのだそうである。これはまさにボトムアップのアプローチである。下絵などは一切描いたりしない。これはプロだから下絵を描く必要がないのではなく、そうしなければならない必然性があるらしい。つまり鱗の一枚一枚まで(位置も数も)本物そっくりに描くためには左から右へと(ここでは頭が左である)ボトムアップに詳細化していく必要があるのだそうである。画用紙の中央にペンで精細に描かれたできあがりは実に見事なものである。
我々素人が真似をしてこのボトムアップの方法で描いたとすると、おそらく鰯を描いたつもりが秋刀魚のような長さになり、秋刀魚を描いたつもりが鰻のような長さになってしまうに違いない。いや、画用紙の中央に描くどころか、紙の中に納まりきらないかもしれない。やはりプロはトップダウンに全体をとらえる能力があるからこそ、この方法で描けるのであろう。
ソフトウエアの設計でも同様であり、トップダウンに全体をとらえる能力があって初めてボトムアップなアプローチでも良い階層構造が作れるのではないだろうか。先の話「食事マナー」を読んだ先輩S氏から「それでは何故“ばっかり食べ”(ボトムアップ)を基本とするアメリカ人が、優れたソフトウェアを開発できるのか?」という質問を頂いた。これは難しい問題である。おそらくそのアメリカ人はあらかじめ教育を受けていてトップダウンの設計能力を兼ね備えていたのであろう。そうでないとすれば、きっと彼は日本食が好きな技術者だったに違いない。
魚を描く場合は鮮度が失われない内に一気に描き上げなければならない。ゆっくり休んでいたりすると近所の猫に大事な魚を盗まれることもあるそうである。ソフトウェア作りの場合はどうであろうか。のんびり開発をしていたらリリース時期を失したとか、隣の競争会社に先を越されお客を奪われてしまったということにもなりかねない。開発工程を守り、タイムリーなリリースができるよう心して努力すべきであろう。アイディアも腐ることがあるのだから。
ところで、このようにして描いた後の魚はどうするのか画家に尋ねたところ、食べられる魚でも焼いて食べることはないそうである。画家にとっては魚を焼いたときに出る油煙が一番困るものらしい。白い画用紙の上に落ちると絵が台無しになるからである。決して家では焼き魚は作らないのだそうである。では煮魚にするのかどうか、そこのところは聞き漏らしたが、このようにして鱗一枚まで描きつくされた魚など、煮ても焼いてもうまくはなかろう。■