パターン重要。

この文章は本当に重要。
私はいままでパターンと言われていたものについて、
ものすごく誤解していたということを、ようやく理解した。

まず、パターンの源流はどこにあるのかという点。
私はいままで、GoF (Gang of Four)が源流なのだと思っていた。
全然違うんだね。
この文章が源流なのだとすれば、それは、

  • Apple Computer の Kent Beck氏と、
  • Tektronix の Ward Cunningham氏の二人が、

現在パターンと呼ばれている概念の原型を作り上げたのだということ。

この二人が源流なのであれば、現在XPと呼ばれている概念が
パターンと直結していることも理解できるし、またもう一つ、
WikiWikiWebと呼ばれているシステムもまた、
パターンと直結していることが理解できる。

この文章は、1987年のOOPSLAで発表されている。
そのことを考えてみれば、第一回のWikiSymがOOPSLAの中で
開催されることになったのも、何の不思議でもない。

ある概念を考え出した源流そのものよりも、
それを発展させた人の方が有名になることはよくあることだけど、
その意味ではパターンはかわいそうな誤解を受けているということになる。

いままでパターンという言葉をGoF経由でしか理解してこなかったから、
このパターンという言葉がクリストファー・アレグザンダーの
パターン言語から来ているという説明を聞いてもピンとこなかった。
「それってパターンちゃうやん…」みたいな。
アレグザンダーの言うところのパターン言語とは全然違うんですわ。

あの「パターン」を引いているからには何かあるんだろうなとは思っていたが、
もしかしたら単なる言葉のダシに使われてるだけなのかもしれないなとも
思っていた。全然違ったんだね。思ったよりもずっと、
ちゃんとパターン言語している。すごい。面白い。

パターンとは何かということを説明する際に、このような説明がされることがよくある。

「プログラムを書いていると、繰り返しでてくる同じような表現に
出会うことがよくあります。そのような繰り返しよく出てくる表現を
カタログとしてまとめ、それぞれに名前をつけたものがパターンです。」

しかし、この説明は間違っている。
よく言って、かなり誤解を与える表現である。

件の文章を読んでみればわかるが、本質はそこではない。

「ある特定の問題に対処する方法を考える際、
その問題が持つ背景を一番よく理解しているのは、
実際にその問題にむかっている人であると考えられる。
そうなのであれば、そのシステムは、
その問題にむかっている人こそが設計するべきである。」

と、こういうことである。
つまり、「ユーザがシステムを設計するべきだ」と。
このような発想が、元々の源流にあるわけだ。

そのための手法として、パターン言語という概念を使った。
つまり、アレグザンダーが「建築はその建築を使う人こそが
設計すべきである」と考え、そのためにパターン言語という手法を
考え出した。それと同じように、ソフトウェア構築においても
ソフトウェアにおける様々な「パターン」を言語としてまとめ、
それによってユーザによるシステムの設計を可能としよう、
そのような趣旨であった。

つまり、いまでいうXPの考え方の方に、ずっと近い。
「ユーザが設計すべきである」という考え方は、
XPの概念の中核であるといってよく、その意味で、
パターンからXPへの流ればまさしく直結している。

また同様に、WikiWikiWebの概念にも非常に近い。
WikiSymにおけるWardの言葉で非常に印象的だったのは、

そのページを「編集すること」ができないのであれば、
「本当の意味で読む」ことはできない。

という言葉である。
(正確には「匿名で編集すること」を強調していたわけだが、
そこには違いがあるはずなので、議論の流れからは分離しておく。)

この、編集すること(書き込むこと)が出来なければ、
読むことはできないという言葉は、かなり奇妙に聞こえる。

これはつまり、こういうことだ。
ある文章を「本当の意味で読む」ことができるのは、
その文章を「本当の意味で使う人」、その文章に基いて行為を行う人だけなのである。
そして、「システムはユーザが設計するべき」であるのと同様に、
「ある文章はその文章を読む人が設計する(編集する=書き込む)べき」なのである。
このような事を言っているわけだ。

ここまで見てくれば、WikiWikiWebが何を狙ったシステムなのかが見えてくる。
パターンの源流における考え方と、WikiWikiWebは、まさしく直結しているのだ。

また、もう一つ。そもそも最初は、ユーザインタフェースの
設計の問題を扱うものだったのだということ。
一番最初にパターンを取り出す対象として選ばれたのが、
ウィンドウシステムの設計の問題である。
ユーザから見える部分をわかりやすくするために、
どのような枠組で考えれば、使いやすくなるのかを
5パターン考えて、それをまとめてみたということ。
これは今の言葉で言えば、まさしく
「ユーザインタフェース・パターン」だ。

こう考えてみれば、一番最初の概念としては、
プログラミングとは関係がなく、
ユーザとコンピュータの接点における問題をあつかったものだったのだ
ということを容易に理解できる。

また、パターンが必要とされた背景には、
「オブジェクト指向プログラミング」が背景にある。
このオブジェクト指向によるプログラミングをするには、
当然のことながらその背景として、
オブジェクト指向によって問題を分析し、
オブジェクト指向によって設計する必要がある。
しかし、そのための方法論はまだできていない。
そのため、パターンを考えだしたと。
また、パターンには優先順位がある。数字がついて、
並べられることが重要。その数字の順番に優先度を定める必要がある。

ということで、これまでの流れをまとめてみよう。

  • 元々パターンの概念を考え出したのは、GoFではなく、Kent BeckとWard Cunninghamの二人だった。
  • 「ユーザがシステムを設計すべきである」という発想が元にあり、それを可能にする手段として「パターン言語」を考えだした。
  • XPやWikiWikiWebは、その意味で概念(思想)として直結している。
  • 一番最に抽出したパターンは、プログラミングにおけるパターンではなく、ユーザから見たパターン、つまりいまで言う「ユーザインタフェース・パターン」だった。

ということになる。

もういっちょ、一言でまとめてみよう。

  • パターンは本当に重要。

てことで。

Last modified: 2006-09-05