2009年10月22日木曜日

無名の質

About Face 3 の読書ノートのつづきで、次はデザインパターンのところを書こうかな、と思ったんですが、この部分、結構あっさりしてまして。

デザインパターンといえば、GoFのやつが有名だけど、インタラクションデザイン方面では「デザイニング・インターフェース」なんてのがあるよ。そもそもデザインパターンって発想はアレグザンダーの建築論からはじまるわけだけど、インタラクションデザインの場合は、うまく作るため、というより、みんなに喜ばれるものを作るためにパターンを活用しようという点で、GoFのやつ(ソフトウェア工学)よりアレグザンダーのもの(建築学)により近いよね。とかなんとか。

どうもここは、なるほど、としか言えそうもないのでしれっとスルーの方向で、ということにしたんですけど、ただ、そういえば、アレグザンダーのデザインパターンって実際どんなものなのか、急に気になってきたんですね。なんとなく話には聞いているけど、実はちゃんと見たことがなかったんです。

それなら、素直にアレグザンダー本を読めばいいんですが、ちょっとお高いので、まずは入門編をってことで「パターン、Wiki、Xp」を手にとってみました。

この本、デザインパターン、Wiki、エクストリームプログラミングのそれぞれの発展史なんですけど、アレグザンダーの思想がそれらに与えた影響を丹念に追っていくといった趣向で書かれているですね。だから、アレグザンダー入門としても読める。

読んでみると、アレグザンダーのことだけじゃなく、デザインパターン、Wiki、エクストリームプログラミングについても、知らないことばっかり書いてあって、結構、びびりました。

それぞれいっとき夢中になったものばかりなんですが、実際上の功利ばかり追いかけて、それらがよって立つ由来や思想的な背景に思いを馳せるなんてことはまったくなかったもので。それにしても、デザインパターンだけじゃなく、エクストリームプログラミングやWikiも、アレグザンダーの影響下にあったとは。隣の席の北橋くんから聞いた話だったら、うそつけ、このやろうの一言で片付けてしまいそうです。

この本によれば、デザインパターンやアジャイルな開発手法にも影響を与えたアレグザンダーの思想のキーワードは、「無名の質(QWAN, Quality Without A Name)」ってやつなんですね。

入門書を読みたての生半可をはじめにお断りして言いますが、アレグザンダーが「無名の質」と呼ぶのは、要するに、古い街並みにみられるような、おそらく時間をかけて自然に出来上がったと思われる、なんとも言えない具合のよさ、みたいなことです。

それは、うまく定義することができないし、はっきり名指すこともできない。しかし、その場に居合わせれば、たしかに感じ取ることができるので、あるある話としては、ずらっと具体例を並べ立てることができる。でも、それ全部ひっくるめて何て言うの?とあらためて問われると、やっぱりうまく言い当てることができない。年甲斐もなくはしゃぎながら「イーンダヨ、イーンダヨ、ナンダカワカンナイケド、スッゴクイーンダヨ!」と言って回るしかない。

でも、結局、デザインとして一番いいのは、そういうものなんじゃないかと。

そこで、アレグザンダーは、そういう「無名の質」を、なんとか人工的な建築物にも持ち込むことができないかと考えるんですよね。

自然の成り行きにまかせて「無名の質」が出来上がるのをただ待つのではなく、どうにかして人為的に生産してしまおうというわけですよ。じつに大それてますね。しかし、そうして、ソフトウェアのデザインパターンやアジャイル開発プロセスにもつながるような、さまざまな原則や実践方法を編み出していったんですね。

だけど、「無名の質」って、やっぱりちょっと釈然としませんよね。

どうしても名付けられない何かなんていっちゃって、それって、「考えるな、感じよ。」式の神秘主義か、見えない何かに賭けるロマン主義かなんかじゃないの。真理や奥義のチラ見せで弟子を引っ張っていこうなんて古い手だなあ!とか言いたくなる向きも、実際少なくなかったようです。

この本もだいぶそこのところにひっかかっていて、最後、あとがきのところでは、「無名の質」はやっぱり難解すぎるとしながら、

「アレグザンダーはおそらく「読者に自分で考えてほしい」と思っていたのではないでしょうか」

なんて小学校の道徳のようなことをいってます。

まあでも、よし、それじゃあってことで、ぼくも自分で考えてみましたよ。

以下、アレグザンダーの著作に直接当たることもなしにこんなことを言う資格がないことは百も承知で言いますが、Quality Without A Nameを、「名付けられない質」じゃなくて、「名前を持たない質」と考えてみたらどうなんでしょうね。

もっとベタに言うと、「名前がないという属性を持つ何かについての質」。

名前っていうのは、コンテクストに依存しないで、つねに同じ対象を指示できるものだとしますよね。(哲学に可能世界と固有名の議論がありますね。)

すると、コンテクストに依存することによってしか存在することができない存在があるとしたら、それは名前を持たない、持つことができないといえるでしょう。

で、コンテクストに依存することによってしか存在することができない存在って、またややこしい、何だよそれ?ってことになりますけど、それは、もうコンテクストそのものですよね。

そう考えると、無名の質って、簡単に言えば、コンテクストそのものとしか言いようのないものの質ってことじゃないでしょうか。

それのいいやつを、アレグザンダーは自分たちの力で意志的に作りたいって言ってるんでしょう。

しかし、コンテクストってのはやっかいですよ。

それは関係性の無際限な広がりのことだし、いろんな観点から観察できるけど、ある一点からの観察では全体を把握することができないような全体性のことだし、さらに、つねに一回こっきりのものだし。

これは再現や再生産の対象には到底なりえませんよね。

設計図や雛形をもとにして計画的に作れるようなものではない。設計図や雛形をもとにコンテクストそのものを人為的に作ろうなんていったら、それは神をも恐れぬ悪魔の仕業ですよ。

当然、アレグザンダーは悪魔ではないので、直接「無名の質」を作ったりはしないわけです。

ただ、現に「無名の質」を作り出している自然生成のプロセスをよく観察して、シミュレートしてみたらどうかと。長い時間をかけて積み重なったたくさんの偶然の結果としてある自然生成を、リーズナブルにシミュレートする方法を考えてみようと。

アレグザンダーがデザイナーとして直接手を下したのは、そこのところですよね。シミュレートをうまくやるために必要な道具と作業のデザイン。それができたら、自分でも自然生成のシミュレーション環境に飛び込むだけ。

* * *

って、どうです。これで丸くおさまっているかんじじゃないですか。

でも、いろいろググってみたかんじでは、これは確実に「無名の質」の誤読なんですけどね。

5 件のコメント:

uenomanabu さんのコメント...

無名の質が指すところの解釈については、僕も全く同じようなところです。というかそれを分かりやすく分析してもらってありがたい感じです。

パターンランゲージ作成の目的は無名の質を人為的に作り出すことだとすれば、OOD や UI のパターンは実は目的を履き違えていると言ってもいいと思います。

その証拠に、アレグザンダーのパターンでは本来の合目的性とは関係のない現象を捉えたものが多いです。例えば柱は人が寄りかかれるようになってた方がいいとか、エントランスの階段は人が座ってたむろできるようになってた方がいいとか。

だから個人的には、XP とか Wiki とか GoF がアレグザンダーの影響を受けたというのはちょっと言いすぎで、単に先人の知恵をカタログ化することの有用性に着目しているだけなように思っています。

takahashihideki さんのコメント...

ああ! おお、なるほど!

> 本来の合目的性とは関係のない現象

ばっかりでもないんだろうけど、そういうのがやけに多いというところが、無名の質の一番の「らしさ」かも知れませんね。

Webデザインまわりでも、実はそういうのがありそうですね。なんかないかな? すぐに出てきませんが。

> XP とか Wiki とか GoF がアレグザンダーの影響を受けたというのはちょっと言いすぎ

やっぱり三題噺としての結構を追いすぎちゃってるんですかね。

XPは、でも、なるべく計画しすぎないように注意しつつ、利用者の気づきや気まぐれに積極的に付き合いながら、それこそ「自動車式」で設計していこう、という点において、多少なりとも無名の質を呼び込む方向に開けているような気はします。

ただ、ペアプログラミングしてて、柱クラスに、寄りかかる()メソッド実装しようとしているの見たら、おい、ちょっと待てって咎めちゃうかもしれないですね。

uenomanabu さんのコメント...

なるほど、考えると深いですね。

ソフトウェアでは、あるクラスを定義する上では外部からどのようなメッセージがくるかを想定しそれに対する応答をあらかじめ仕込んでおかないといけないですからね。ポリモーフィズムができているからといって、想定されていないメッセージには応答できません。

一方現実世界では、本来の目的にかかわらず、そのものの物理的な特性は自然界スーパークラスの全メソッドを継承していて、設計者の意図を超えて勝手に動いてますから、例外的なメッセージに対してもクラッシュせずに何らかの予測可能な応答を返します。それは予測可能だけれど、エントロピーの増大によって徐々に変化もします。

ということは、寄りかかる() メソッドを作ることは意味がなくて、むしろ電車性が増すだけ。

自然界を模すならば、スーパークラスに対してサブクラスが機能を追加するというプラスの指向ではなく、スーパークラスの複雑さをサブクラスが制御していくというマイナスの指向が必要なのかもしれません。そこで制御もれしたところに、無名の質が生まれると。

takahashihideki さんのコメント...

>スーパークラスに対してサブクラスが機能を追加するというプラスの指向ではなく、スーパークラスの複雑さをサブクラスが制御していくというマイナスの指向

>制御もれしたところに、無名の質が生まれる

すごいこと言いますねー。おもしろい。

そういえば、ソフトウェアのプログラミング技法のレイヤーでは、ドキュメントの揃え方とかコメントの入れ方、インデントやスペースの使い方みたいなコーディングスタイルのところに、まず、無名の質がありそうですよね。

オライリーの「Perlベストプラクティス」 http://www.oreilly.co.jp/books/4873113008/ みたいな。

名人が書いた、まるで古い街並みのようなコードとか。

あと、コンセプトやインタフェースのレイヤーでなら、本来の意図からそれていく高エントロピー性が宿るようなところがありそうな ... 。

誰かそれをカタログにしてくれないかな。

というか、そんなこといってないで、まず、アレグのパタンランゲージを読め、ですね。読んでみます。

uenomanabu さんのコメント...

確かによくできたアプリケーションというのは、ちょっとおかしな使い方をしてもそれなりに予想どおりの振る舞いをしてくれることがありますね。要件としてコンテクストを沢山想定して作られているというよりも、各オブジェクトの働きが十分にシンプルだから処理の不整合が起き得ないという感じで。

そういう、シンプルなオブジェクト同士が分子としてゆるくつながりあって、全体としてみると何か秩序が見えてくるようなものがいいですね。でもそれには優れたスーパークラスが必要ですね。何が起きても破綻しないような。もしくは、メモリーとかのリソースが把握できないぐらいふんだんにあって、メモリーリークみたいな世界の破綻要因がいっぱい存在していてもとりあえず全体的にはぜんぜん平気みたいな。

まあ変な例え話はキリがないので、このへんにしときます。