欧米人はモデルを作り、日本人はものを作る

アジャイル開発はウォーターフォール開発へのアンチテーゼとして語られることが多い。これはつまり、欧米人の「モデルから作る」方法に対するアンチテーゼなのではないか。欧米人から欧米人に向けた「モデルから作るな、ものから作れ」というメッセージなのではないか。一方、日本人はものから作る文化であってモデルを作る文化が薄い。その日本人に対してアジャイルは有効なメッセージになっているのだろうか。


・・・のっけから飛ばしてしまった。これじゃ訳が分からんね。説明します。
とある研究者のお話を聞く機会があった。「欧米人はモデルを作り、日本人はものを作る」というのはその講演のタイトル。研究者の視点から見た、欧米人と日本人のものづくりに対する文化の違いについての講演であり、大変興味深く聞くことが出来た。

ちょっと色んな人に聞いてみたいのですが。「科学」と「技術」「ものづくり」の間にどのくらいのギャップを感じていますか?

その方の感覚では、欧米人は「技術」あるいは「ものづくり」を科学の延長線上に捉えている。欧米人にとっては科学と技術は連続しているのだ。これに対して、日本人は「科学」と「ものづくり」は違うもの、不連続なもの捉えている人が多い。

なぜそう感じたのか。

欧米人の学会発表を聞いていると、抽象的な計算モデルを一生懸命研究している人が多いそうだ。計算モデルというのは、例えばものが破壊に至る応力の条件とか。(学生のときに幾つか習ったけど、忘れたなぁ。モールの応力円とか、ミーゼスの降伏条件とか、なんとか。)そういう研究をしている人にとっては、その計算モデルが目的であって、「それがものづくりにどう役に立つのか」はあまり考えていないように見えてしまうらしい。でもその姿勢が、欧米では自然に受け入れられている。

対して日本人は、応用指向、現物指向が強いらしい。抽象的な計算モデルの研究発表をすると「それってなんの役に立つの」とすぐに聞かれるそうだ。また、「実験をしろ、手を動かせ、机の上では研究は出来ない」ととにかく実験を重視する人が多く、逆に机上で計算モデルを組み立てる研究はリスペクトされにくいようだ。

さもありなん、と思う。そして、その日本人の特性は製造業においては非常にうまく作用したのかもしれない。「計算モデルなんてなくても、結果的にモノが出来ればそれで良し」という気質、「役に立つならなんでも利用しよう」「机上で悩む暇があったら手を動かそう」という気質が、ものづくりを成功に導いたのだ。特に、自動車のような擦り合わせ型(インテグラル型)のものづくりにおいて大成功を収めたのだ。


しかし、ソフトウェア業界はどうか。僕には、ソフトウェアにおいては日本人の気質は必ずしも成功していないように見える。むしろ、欧米人の「モデルを作る」気質が成功しているように見える。


ウォーターフォール開発という手法は、「モデルを作る」欧米人気質から生まれた。まず要求を分析し、仕様を検討し、じっくりと設計する。つまり、そのシステムに最も適した「モデル」を先に組み立てる。そのモデルを元に実際のソフト作り、ものづくりを始める。そういう手法だ。

そのウォーターフォール開発の綻びに欧米人自身が気づいた。欧米人というのは問題を前にすると殆ど本能的に、対象を要素還元し、抽象化し、モデルを構築しようとしてしまう。しかし、そのやり方ではうまく行かない場合があるのだ。むしろ、とりあえず手を動かして作ってしまい、そこからリファクタリングによってモデルを抽出していく手順の方がうまく行く場合があるのだ。そういう欧米人気質へのアンチテーゼとして、アジャイル開発が生まれたのだ。

一方、日本人はどうか。そもそも日本人は、きちんとウォーターフォール開発をしていたのか。きちんと先にモデルを作ろうとしていたのか。否、設計無しでいきなり着手してデスマっていたんじゃないのか。事前の設計無しで関係者間の「擦り合わせ」で開発していたんじゃないのか。


アジャイル開発のメッセージというのは、日本人にとっては実に耳に心地よい。現場主義、現物主義が体に染み付いている日本人にとって、アジャイルのメッセージは自分を肯定された気持ちになる。トヨタ生産方式がソフトウェア開発にも応用されて、それが欧米人の間でも評価されているということが、日本人にとって嬉しくないはずがない。

しかし、僕はこう危惧している。アジャイル開発の発するメッセージというは、「モデルを作る」という発想が自然に身についている欧米人にとってこそ意味のあるアンチテーゼなのではないか。「モノを作る」ところから始めがちな日本人にとっては、むしろ「きちんとモデルを作りなさい」というメッセージの方が有効なアンチテーゼとして機能するのではないか。


誤解して欲しくないけど、僕はアジャイル開発の考え方は好きだ。それから、アジャイル開発にだって設計は重要だし、テストもリファクタリングも考慮しないでいきなりコードを打つことがアジャイルだなんて思っていない。まっとうなプログラマなら誰だって、美しく再利用性の高い設計(アーキテクチャ)の重要性は十分理解しているはずだ。ソフト開発における「モデルを作る」ことの重要性は体で理解しているのだ。そういう方なら、アジャイル開発のメッセージを正しく咀嚼できるだろう。
でも、例えばある年齢以上の、もう開発現場を離れた経営者層の方に対して、トヨタ生産方式を引き合いに出してアジャイル開発を説明するというのは、なかなか危険なことなんじゃないかと思う。「ああ、なるほどね。それはウチが今までやってきた方法だよ。」なんて言われるのが一番怖い。