働くということは唯意志するということではない、物を作ることである。我々が物を作る。物は我々によって作られたものでありながら、我々から独立したものであり逆に我々を作る。しかのみならず、我々の作為そのものが物の世界から起る。西田幾多郎『絶対矛盾的自己同一』
デザインの獲得
イギリスの有名な童話に「3びきのくま」というのがある。ゴルディロックスという女の子が森で一軒の家を見つける。中に入ると誰もいないが、テーブルに3つのスープがある。1つめは熱すぎ、2つめは冷たすぎ、3つめがちょうどよかったので、それを飲んでしまう。同じように椅子やベッドも3つずつあり、そのうちの1つがちょうどよい。最後にクマの家族が帰ってきて、驚いた女の子は慌てて逃げ帰る。
この話が元になって、物事が多すぎず少なすぎずちょうどよい具合である範囲のことを、ゴルディロックスゾーン※1という。
宇宙はその一般的な傾向として、エントロピーの法則に従い、秩序から無秩序へ、構造から無構造に向かう。熱湯の入ったコップに氷を入れれば、やがて氷は溶けて全体が均一のぬるま湯になる。コップにぬるま湯を入れておいても、自然に熱湯と氷に分離するということはない。これは自明のことに思われるが、しかし、我々の身の回りを見渡せば、逆のことが起こっているのに気づく。無秩序であったところに秩序がもたらされ、無構造であったものが構造を持つようになる。その最たるものが我々自身の存在だ。混沌としていた宇宙に星が生まれ、生物が誕生し、人は文化を持ち、こうして様々な構造物を創造しつづけている。
エントロピーの法則に反するようなこういった現象は、デビッド・クリスチャンによれば、ゴルディロックス条件が満たされる時に起こるのだという。
例えば地球に生物が現れたのは、恒星から近すぎず遠すぎず適度な量のエネルギーがあったこと、適度に多様な化学元素と化学反応があったこと、適度な水があったこと、そういったゴルディロックス条件が満たされたからなのである。このように、環境的な変数がある閾値を超えることで、世界には段階的に秩序がもたらされ、構造化されていく。やがて人は言語という道具を使って試行錯誤の熱効率を飛躍的に高めることに成功し、自らの手で意図的に秩序を作り出す行為、すなわちデザインを獲得したのである。
ソフトウェアデザイン
デザインには様々な分野があって、古くから衣食住に関するあらゆるものが創意工夫されてきた。特に建築や都市といった複合的な構造体は、権力者にとって常に大きなデザイン課題として関心の的になってきただろう。
一方、ソフトウェアデザインというのは近年現れた新しいデザイン分野である。
コンピュータの性質を端的に言えば、0と1という論理値で情報を流通させることだ。これは世の中の混沌を代理するにはいささか乱暴なアイデアだったが、技術の進歩が我々の限られた認知能力に対して十分なイリュージョンを与えることができるということは、実生活の中ですでに証明されてしまった。
コンピュータにプログラミングされた論理の産物が、物理空間に根ざした我々の社会を動かしはじめた。そこにソフトウェアデザインという分野が成立したのである。
0と1で世界を代理するというアイデアは、かつての自然言語の獲得に匹敵するインパクトを持っているように思う。情報環境でも生じた、この「閾値超え」によって、我々は更に自由にエントロピーを減少させることができるようになる。
パラダイムシフト
ソフトウェアデザインに秩序をもたらす初期の試みは、高級プログラミング言語とコマンドラインインターフェースだった。これは英語という自然言語をベースにした表現を入出力に用いるというもので、つまりコンピュータを「計算者」として擬人化するのに際して、我々が最も親しんでいる記号を流用したのである。
自然言語は十分な複雑性をもっていたので多様な論理の展開を表すのに十分だったが、自然言語というものが基本的に持っている通時性に縛られていたために、同期的で断続的な対話しかできなかった。例えば、複数のパラメーターが同時に変化していく様子をゲシュタルト的に示すには次元が不足していた。
我々は自然言語を用いて通時的にコミュニケーションをとるが、我々が言葉を覚える前から住んでいるのは共時的な空間なのだ。我々は決して小説のようには世界を認知していない。意識は線形に進むのではなく、絵画のように全体的に一度に存在している。
そこで、ソフトウェアに共時性をもたらすために起きたパラダイムシフトが、オブジェクト指向プログラミングとGUI(グラフィカルユーザーインターフェース)の登場だった。
人と道具
Smalltalkのオブジェクト指向性は非常に示唆的であった。オブジェクト指向とは、オブジェクト自身が自分が何をできるのか知っているという意味である。抽象的なシンボルの場では、それは、最初にオブジェクト名を記述(するかあるいは持ってきたり)してそしてそれに何をするかを指示するメッセージを付ける。具体的なユーザーインターフェースの場では、それは最初にオブジェクトを選択することを意味している。それから何がしたいのかをメニューによって提示する。どちらの場合でも、オブジェクトが先であり、やりたいことがその次となっている。これは具体的なものと抽象的なものとを高い次元で統合している。アラン・ケイ「ユーザーインターフェース 個人的見解」
オブジェクト指向のコンセプトでは、観念的な仕事空間の中にまずいくつかの物を作る。物たちにはあらかじめそれぞれの役割に応じた性質が静的に与えられている。その物たちにメッセージという刺激を与えると、物たちはそれぞれに反応する。その反応を利用して仕事をするというものだ。
これは例えば、石を削ってその鋭利を利用して材料を切るとか、火をおこしてその熱を利用し材料を焼くといった行為と似ている。そのための入出力としては、身体動作と視覚言語を用いることが適している。
椅子やハンマーといったプリミティブな道具ではそのもの全体が利用者との接点になるが、構造が複雑になり内部の機構と外装が分離して、操作部が独立して設計されるようになると、そこにユーザーインターフェースという概念が出現する。抽象物を成分とするソフトウェアにおいては、その働きと我々のファジーな認知を仲介するものとして、ユーザーインターフェースの役割が特に重要になる。
コンピュータを使えば人の五感に向けたフィードバックを動的に作り出すことができるので、ユーザーインターフェースの独立性は一層増す。道具の内部機構に対してユーザーインターフェースが独立するということは、意味空間を自由に作れるということである。
道具を作るということは、単に今やっていることを省力化することではないだろう。利用者にとっての世界の捉え方やコミュニケーションの意味を変えるということだ。その意味でユーザー要求の特定はデザインのゴールではなく、きっかけにすぎない。
人と道具は影響し合い、互いの要求を進化させてきた。優れたデザインは、ユーザー自身の価値観や行動を変え、要求を次のステージに導く。例えば自転車に乗れば人は歩くよりも楽に遠くへ行くことができるが、それは単に量的な変化ではない。自分とそれを取り巻く世界との関係について、新しい視点を与えてくれる。車輪やチェーンといったテクノロジーが実現する量的な変化は、自転車という全体的な構造によって我々に質的な変化をもたらす。デザインによってゴルディロックス条件が満たされ、エントロピーが減少する瞬間である。
ソフトウェアデザインが持つポテンシャルは、低レベルのインターフェースから高レベルのインタフェースまでを、物理的な制約をほとんど受けずに、次々と新しく発明できるところにある。しかしその無制約が、ソフトウェアデザインを難しくもしている。
オブジェクト指向によってソフトウェアが世界を代理できることは分かったが、新しい世界をゼロから創造するためにはモデルとなる手がかりが必要だ。そこで採用されたのが、デスクトップメタファである。デスクトップという箱庭に意味空間のスコープを限定することで、GUIはエントロピーの増大を食い止めることに成功した。そしてその世界における活動原則として「Object → Command」のシンタックスが定められたのである。
GUIをGUIたらしめているのは、グラフィックで情報を表現することよりも、むしろこの操作のシンタックスにある。まず対象物を選択し、次に命令を選択する。対象物を選択するには、先にそれらが選択肢としてユーザーに提示されていなければならない。また対象物は自身の状態を常に目に見えるようにしておくことが理想なので、結果的に、自律的に振る舞うオブジェクトはイコン※2としてスクリーンの空間に配置されることになる。我々は視覚的な記号を扱うのに長けているので、GUIの箱庭性は心地よさや楽しさを生み出す。
こうしてデスクトップメタファとその応用は、GUIの基本様式となった。しかし箱庭の問題は、その表現力がスクリーンの物理的な大きさに比例してしまうところにある。
デバイスが多様化して小さなスクリーンが増えると、狭い空間で我々は身動きがとれなくなってしまう。情報量は増える一方であるのに、一度に表示できる記号の量を減らさなければならないとなると、記号が表す意味をハイコンテクストにしていくしかない。スマートフォンにおける幾何学的なフラットデザインや、スマートウォッチにおけるパズル的なマイクロアニメーションは、GUIのハイコンテクスト化を意味している。
いずれにしても、ソフトウェアデザインが抽象的なビットと具象的な現実世界を橋渡しするためには、いくつかのゴルディロックス条件を満たさなければならない。私はソフトウェアにおけるゴルディロックス条件として、大きく次の3つがあると考えている。
条件1:イリュージョンを与えるのに十分なプロセッサスピードと記憶容量
コンピュータの意義は、そのスピードと容量によって、イリュージョンを作り出すところにある。
例えば「1+1」といった計算について、人間が0.1秒で答を出し、コンピュータが0.0001秒で答を出したとしても、我々の認知の限界を考えれば、実質的にそれほどの違いはない。しかしこのような計算を1000回行った場合、人間では100秒かかるところをコンピュータが0.1秒で答を出すのだとすれば、そこには質的な違いがある。つまりAという仕事とBという仕事の間に1000倍の処理量の違いがあったとしても、それが0.1秒ほどで済んでしまうのなら、我々にはほとんど同じように見える。
このことは、ソフトウェアのユーザーインターフェースが持つ圧倒的な自由度につながっている。新しい世界観を構築する上で、計算処理の量にかかわらず、ユーザーにとってその世界がどうあるべきかという視点のみから構造を決められるということだ。例えばPhotoshopで線を描く時、鉛筆ツールを使うのとブラシツールを使うのとではおそらく1000倍ぐらい計算量に違いがある。しかしそれらをツールパレット上で並列に扱うことで、ユーザーはデジタルフォトを自由にレタッチできるというイリュージョンを見ることになる。
記憶容量についても同様だろう。例えばインターネットにつながっているサーバーは有限個だろうが、その数が十分に大きいため、実質的に情報は無限にあるように思われる。個人が持つ記憶媒体についてもやがて容量が増加すれば、一生のうちに知覚するあらゆる情報をデータ化して蓄積しても余るようになる。それらを再生共有できるようになれば、我々がこれまで抱いてきた自己意識や歴史観には質的な変化がもたらされるはずだ。
条件2:学習が容易な入出力のイディオム
ソフトウェアのユーザーインターフェースは、全体がイディオムで構成されている。画面という概念、対話型の操作、ボタンのように見える矩形など、すべては慣用的に解釈されるイディオムである。
記号がハイコンテクスト化するということは、表現がイディオマティック(慣用的)になるということだが、慣用表現を用いるためにはまず、それを構成する要素の本来の意味が周知になっていなければならない。
例えば、デスクトップGUIの基本的な操作イディオムは、画面上に見えているオブジェクトをクリックして選択することだった。これはマウスの物理的なボタンを指で押すという身体動作によって行う。つまり関心の対象物に対して指で圧力をかけてみるという、我々の生活上の基本的な対話姿勢をベースにしている。その他にも、ものを掴んで移動するという動作によってオブジェクトのドラッグ&ドロップを行うなど、手を使った物への働きかけとそれに対する視覚的なフィードバックによって、インタラクションが成立するようになっている。
昨今のマルチタッチスクリーンでは、スクリーン上で指をスワイプさせることによりビューを遷移したりスクロールさせたりする操作イディオムがあるが、これらは、GUIの箱庭において、スクリーンに入りきらない情報の表示面はそれをずらすことで閲覧領域を移動できるというメンタルモデルを、ユーザーがすでに持っていることで自然に学習できる。
このようにデジタルネイティブなイディオムが発展すると、ソフトウェアの表現力は高まっていく。逆に言えば、ユーザーインターフェースのイディオムを検討せずに機能要件を定義するのはナンセンスである。人はユーザーインターフェースを通じてシステムの意味空間を把握するのだから、学習可能なイディオムとして構成できないのなら、どんなアイデアも道具としての意味を成さない。意味のある道具を作りたければ、むしろイディオムに合うように要件の方を変更する必要がある。
条件3:それらを扱うのに適したプログラミングモデル
GUIの共時的な空間世界を組み上げるために、オブジェクト指向プログラミングが生まれた。オブジェクト指向のプログラミングモデルにおいて、それぞれのオブジェクトは自律的な存在だが、それらにイベントループというテンションがかかることで、協調して動くようになる。
オブジェクト同士の関係は、石造りのアーチ橋に似ている。この橋の構造は、輪石と呼ばれる扇型の石をアーチ状に積み上げて作られる。両端から順に重ねていき、それらが出会う頂上のひとつを最後にはめ込むと、橋自体の重さと荷重による圧縮応力で支柱がなくても立っていられるようになる。
もし石造りのアーチ橋を無重力空間に持っていけば、バラバラになってしまうだろう。地上では重力がそれを防ぎ、エントロピーの増大を抑制しているのだ。
ソフトウェアにおいても、オブジェクト同士の協調を純粋にして、プログラムの耐久性を高めようとするほど、各オブジェクトの形態は一定のパターンを持つようになる。またそれらを設計する時には、役割を分担する一連のオブジェクトが同時に存在していて、同時にテンションがかかっている状況を前提にしなければならない。
GUIの共時性はイベント駆動であることによって実現される。スクリーン上の要素はそれぞれが独立してユーザーからの操作を待っているが、これは裏でイベントループが回っていて処理のきっかけを見張っているのである。イベントループはGUIの世界で常に作用している重力のようなものだ。
一連のオブジェクトがひとたびイベントループの循環に入ると、あとは自分たちで勝手に結合してメッセージを送り合い、協調して動く。プログラムの品質としてオブジェクトは互いに疎結合であるべきだが、それがソフトウェアデザインとしてユーザーの中に意味空間を形成する時、イリュージョンは一気に生まれるのである。まるで最後の要石をはめ込む瞬間のように。
新しいプログラミングモデルは繰り返し試されているであろうが、単に量的な課題を解決するためであればパラダイムシフトは起きない。GUI がもっとハイコンテクストになり、これまでになかったイリュージョンとイディオムが模索されることで、質的な変化をもたらす新しいプログラミングモデルが生まれるだろう。
これから
ソフトウェアデザインという分野は、世間でまだそれほど特別なものと思われていないだろうが、これはデザインの中でも特に高次なものと位置づけることができるだろう。ハードウェアのデザインにおいては、それを構成する要素の物理的な性質によってアイデアが保持されるのであって、例えば耐久性や操作性といった品質は、人の身体も含めて、物理的制約の上で担保される。しかしソフトウェアのデザインにおいては、すべてが論理的な制約の上で構築されている。エントロピーの増大を食い止め、そこに秩序をもたらす力は、我々の観念のみである。
確かにソフトウェアの有用性を評価する上で人の認知特性を無視することはできないが、我々の観念は、運動能力などとくらべて遥かに容易に新しいモデルへ移行できる。ソフトウェアによって将来、この物理世界とは全く違う価値観からの精神活動が営まれるであろうことは想像に難くない。それはおそらく我々の生活に、ある名状し難い、質的な変化をもたらすはずだ。ワイルドは「自然は芸術を模倣する」と言ったが、やがておとずれる時代では、「精神はソフトウェアを模倣する」のである。