デザインと研究
Original2003年1月
(この記事は、2002 年秋の NEPLS 会議での基調講演から抜粋したものです。)
この国を訪れた人は、アメリカ人が「何をしているのですか?」という質問から会話を始めるのが好きであることにしばしば驚きます。私はこの質問が好きではありませんでした。この質問に対して、きちんとした答えが得られたことはめったにありませんでした。しかし、ついにこの問題を解決したと思います。今では、誰かが私に何をしているのかと尋ねたら、私は相手の目をまっすぐ見て、「 Lisp の新しい方言を設計しています」と言います。何をしているのか尋ねられるのが嫌いな人には、この答えをお勧めします。会話はすぐに他の話題に移ります。
私はプログラミング言語の研究をしているとは思っていません。誰かが建物や椅子、新しい書体をデザインするのと同じように、プログラミング言語をデザインしているだけです。何か新しいものを発見しようとしているわけではありません。プログラミングに適した言語を作りたいだけです。ある意味では、この仮定は人生をずっと楽にします。
デザインと研究の違いは、新しいか良いかという問題であるように思われます。デザインは新しいものである必要はありませんが、良いものでなければなりません。研究は良いものである必要はありませんが、新しいものでなければなりません。この 2 つの道は頂点で合流すると思います。最高のデザインは新しいアイデアを使って前任者を超え、最高の研究は新しいだけでなく実際に解決する価値のある問題を解決します。つまり、私たちは最終的に同じ目的地を目指していますが、異なる方向からアプローチしているだけです。
今日お話しするのは、ターゲットを裏から見たときの様子です。プログラミング言語を研究テーマとしてではなく、設計上の問題として扱う場合、どのような違いがあるのでしょうか。
最大の違いは、ユーザーにより重点を置くことです。デザインは、これは誰のためのもので、ユーザーは何を必要としているかを問うことから始まります。たとえば、優れた建築家は、デザインを作成してユーザーに押し付けるのではなく、対象ユーザーを研究して、彼らが必要とするものを把握することから始めます。
私が「彼らが望むもの」ではなく「彼らが必要とするもの」と言ったことに注目してください。デザイナーとして働くことは、クライアントの指示通りに何でも作る、いわば即席の料理人として働くことを意味するという印象を与えるつもりはありません。これは芸術の分野によって異なりますが、顧客の指示通りに作る人が最高の仕事をする分野はないと思います。
顧客は常に正しい。つまり、良いデザインかどうかは、それがユーザーにとってどれだけうまく機能するかで決まる。誰もが退屈する小説や、座り心地がひどく悪い椅子を作ったら、それは悪い仕事だ。その小説や椅子が最先端の理論的原理に従って設計されていると言っても、言い訳にはならない。
しかし、ユーザーにとって使いやすいものを作るということは、単にユーザーの指示通りに作るということではありません。ユーザーは選択肢がすべてわかっているわけではなく、自分が本当に望んでいるものについて誤解していることがよくあります。
この矛盾に対する答えは、ユーザーのためにデザインしなければならないが、ユーザーが単に欲しいと言うものだけではなく、ユーザーが必要とするものをデザインしなければならないということだと思います。これは医者になるのとよく似ています。患者の症状を治療するだけではだめです。患者が症状を訴えたら、実際に何が問題なのかを突き止め、それを治療しなければなりません。
ユーザーに焦点を当てることは、優れたデザインの実践のほとんどがそこから導き出される一種の公理であり、ほとんどのデザインの問題はこれを中心に展開されます。
良いデザインはユーザーのニーズを満たすものでなければならないとしたら、そのユーザーとは誰でしょうか。デザインはユーザーのためにあるべきだと私が言うとき、良いデザインが何らかの最低共通項を目指すという意味ではありません。好きなユーザー グループを選ぶことができます。たとえば、ツールをデザインする場合、初心者からエキスパートまで誰にでも使えるようにデザインできます。また、あるグループにとって良いデザインが、別のグループにとっては悪いデザインである可能性もあります。重要なのは、何らかのユーザー グループを選ぶ必要があるということです。特定のユーザーを基準にしない限り、良いデザインや悪いデザインについて話すことすらできないと思います。
対象ユーザーにデザイナー自身が含まれている場合、優れたデザインが生まれる可能性が高くなります。自分を含まないグループ向けにデザインする場合、そのデザインは自分よりも洗練されていないと考える人向けであり、より洗練されていると考える人向けではない傾向があります。
これは問題です。なぜなら、どんなに善意からでも、ユーザーを見下すと、必然的に設計者の堕落につながるからです。米国の住宅プロジェクトで、そこに住むことを想定して建築家が設計した例はほとんどないのではないかと思います。プログラミング言語でも同じことが言えます。C、Lisp、Smalltalk は、それぞれの設計者が使用するために作成されました。Cobol、Ada、Java は、他の人が使用するために作成されました。
バカのために何かを設計していると思っているなら、バカ向けであっても良いものを設計していない可能性が高いです。
もっとも高度なユーザー向けに何かを設計しているとしても、それはやはり人間向けの設計です。研究の場合は違います。数学では、人間にとって理解しやすいからという理由で抽象化を選択するのではなく、証明が短くなるものを選択します。これは科学全般に当てはまると思います。科学的なアイデアは人間工学的である必要はありません。
芸術の世界では、事情は大きく異なります。デザインは人間に関するものです。人間の体は奇妙なものですが、椅子をデザインするときは、それがデザインの対象であり、避けることはできません。すべての芸術は、人間の興味と限界に迎合する必要があります。たとえば絵画では、他のすべての条件が同じであれば、人が描かれた絵画は、描かれていない絵画よりも興味深いものになります。ルネッサンス時代の偉大な絵画がすべて人物でいっぱいであるのは、単なる歴史上の偶然ではありません。そうでなかったら、絵画という媒体が今のような名声を得ることはなかったでしょう。
好むと好まざるとにかかわらず、プログラミング言語は人間のためのものであり、人間の脳は人間の体と同じようにゴツゴツしていて特異なのではないかと思います。人間が理解しやすいアイデアもあれば、そうでないアイデアもあります。たとえば、人間は細かい部分を扱う能力が非常に限られているようです。そもそもプログラミング言語が良いアイデアであるのは、この事実のためです。細かい部分を扱えるなら、機械語でプログラムすればいいのです。
また、言語は主に完成したプログラムのための形式ではなく、プログラムを開発するためのものであることも覚えておいてください。芸術に携わる人なら誰でも、2 つの状況では異なる媒体が必要になるかもしれないと言うでしょう。たとえば、大理石は完成したアイデアには適した耐久性のある媒体ですが、新しいアイデアを開発するにはまったく柔軟性がありません。
プログラムは、証明と同様に、過去に誤った分岐が至る所にあった木の枝刈りバージョンです。したがって、言語のテストは、完成したプログラムが言語内でどれだけきれいに見えるかではなく、完成したプログラムへのパスがどれだけきれいだったかです。エレガントな完成したプログラムを提供する設計選択は、エレガントな設計プロセスを提供するとは限りません。たとえば、私はネストされたバッククォートでいっぱいのマクロ定義マクロをいくつか書きましたが、今では小さな宝石のように見えますが、それらを書くのには何時間もの醜い試行錯誤が必要でした。そして率直に言って、私はまだそれらが正しいかどうか完全に確信していません。
私たちはしばしば、言語のテストは、その言語で書かれた完成したプログラムがどれだけ見栄えが良いかであるかのように行動します。同じプログラムを 2 つの言語で書き、片方のバージョンの方がずっと短い場合、それはとても説得力があるように思えます。芸術の方向から問題に取り組む場合、この種のテストに頼ることはあまりありません。大理石のようなプログラミング言語に陥りたくはありません。
たとえば、ソフトウェア開発において、対話型トップレベル (Lisp では read-eval-print ループと呼ばれる) を持つことは大きな利点です。対話型トップレベルがあると、言語の設計に実際に影響を及ぼします。たとえば、変数を使用する前に宣言する必要がある言語では、うまく機能しません。トップレベルに式を入力するときは、x を何らかの値に設定してから x に対して操作を開始できるようにする必要があります。最初に x の型を宣言する必要はありません。どちらの前提にも異議を唱えるかもしれませんが、言語が便利であるためにはトップレベルが必要であり、必須の型宣言がトップレベルと互換性がない場合、型宣言を必須にする言語はプログラミングに便利ではありません。
実際には、良いデザインを得るには、ユーザーに近づき、その距離を保たなければなりません。特に最初のうちは、実際のユーザーに合わせてアイデアを絶えず調整する必要があります。ジェーン・オースティンの小説が優れている理由の 1 つは、彼女が家族に声を出して読んで聞かせたことです。だからこそ、彼女は風景を芸術的に描写したり、気取った哲学に陥ったりすることはありません。(哲学はありますが、ラベルのようにストーリーに貼り付けられるのではなく、ストーリーに織り込まれています。) 平均的な「文学」小説を開いて、それを自分の書いたものとして友人に声を出して読んでいるところを想像すると、そのようなことが読者にとってどれほどの負担になるかを痛感するでしょう。
ソフトウェアの世界では、この考え方は「Worse is Better」として知られています。実際、「Worse is Better」という概念にはいくつかの考え方が混在しており、そのため人々は「worse is Better」が実際に良いのかどうかについていまだに議論を続けています。しかし、その混在する主要な考え方の 1 つは、何か新しいものを作る場合、できるだけ早くプロトタイプをユーザーに公開すべきであるということです。
代替アプローチはヘイルメリー戦略と呼ばれるかもしれません。プロトタイプを素早く公開して徐々に改良するのではなく、1 回の長いタッチダウン パスで完全な完成品を作成しようとします。私の知る限り、これは破滅を招く方法です。インターネット バブルの期間中、数え切れないほどのスタートアップ企業がこの方法で自滅しました。これが成功した例を私は聞いたことがありません。
ソフトウェアの世界以外の人々が気付いていないかもしれないのは、Worse is Better が芸術のあらゆるところに見られるということです。たとえば、描画では、このアイデアはルネッサンス時代に発見されました。今では、ほぼすべての描画教師が、正確な描画を得る正しい方法は、オブジェクトの輪郭に沿ってゆっくりと作業するのではなく、エラーが蓄積され、最後に線が交わらないことに気付くだろうと教えてくれます。代わりに、大体正しい場所に数本の線を素早く描き、この最初のスケッチを徐々に洗練させる必要があります。
ほとんどの分野では、プロトタイプは伝統的にさまざまな材料から作られてきました。金属に切り出す書体は、最初は筆で紙にデザインされました。ブロンズで鋳造する彫像は、ワックスで型取りされました。タペストリーに刺繍する模様は、インクで紙に描かれました。石で建設する建物は、小規模で木材でテストされました。
15 世紀に油絵が初めて普及したとき、油絵がなぜこれほどまでに魅力的だったかというと、原型から実際に完成作品を作ることができたからです。希望すれば下絵を描くことはできましたが、それに縛られることはありませんでした。絵を完成させるときに、細部をすべて考え、大幅な変更を加えることさえできたのです。
ソフトウェアでも同様のことが可能です。プロトタイプは単なるモデルである必要はなく、完成品に仕上げることができます。可能な場合は常にこれを実行すべきだと思います。これにより、途中で得た新しい洞察を活用できます。しかし、おそらくさらに重要なのは、士気を高める効果があることです。
士気はデザインにおいて重要です。人々がそれについてもっと語らないことに驚いています。私の最初の絵の先生の一人がこう言っていました。「何かを描いているときに退屈していたら、絵は退屈なものになる」。たとえば、建物を描かなければならないとして、レンガを一つ一つ別々に描くことにしたとします。そうしたいならそうすることもできますが、途中で退屈してしまい、レンガを一つ一つ観察するのではなく機械的に作り始めると、レンガを単に提案しただけの場合よりも絵が悪くなります。
プロトタイプを徐々に改良しながら何かを作るのは、やる気を維持するのに良いことです。ソフトウェアでは、常に動作するコードを用意しておくのが私のルールです。1 時間でテストできるものを書いている場合は、すぐに報酬が得られる見込みがあり、やる気が出ます。同じことが芸術、特に油絵にも当てはまります。ほとんどの画家はぼんやりとしたスケッチから始めて、徐々に改良していきます。このように作業すれば、原則として、実際には未完成に見えるものを持って一日を終える必要はありません。実際、画家の間では「絵は決して完成しない。ただ、作業をやめるだけだ」という格言さえあります。この考え方は、ソフトウェアに取り組んだことがある人なら誰でもよく知っていることでしょう。
士気は、経験の浅いユーザー向けに何かを設計するのが難しいもう 1 つの理由です。自分自身が気に入らないものに興味を持ち続けるのは難しいことです。何か良いものを作るには、「なんてひどいものだろう。あの愚か者たちはきっと気に入るだろう」ではなく、「わあ、これは本当に素晴らしい」と考えなければなりません。
デザインとは、人間のためにものを作ることです。しかし、人間なのはユーザーだけではありません。デザイナーも人間です。
これまでずっと私が「デザイナー」について話してきたことに注目してください。デザインが優れているためには、通常、1 人の人間が管理する必要があります。しかし、研究プロジェクトでは複数の人が協力することが可能であるように思われます。これは、研究とデザインの最も興味深い違いの 1 つに思えます。
芸術分野ではコラボレーションの有名な例がいくつかあるが、そのほとんどは核融合ではなく分子結合の例であるようだ。オペラでは、1 人が台本を書き、もう 1 人が音楽を書くのが一般的である。また、ルネッサンス時代には、北ヨーロッパの職人がイタリア絵画の背景の風景画を描くためによく雇われた。しかし、これらは真のコラボレーションではない。むしろ、ロバート フロストの「良い柵は良い隣人を作る」の例に近い。優れたデザインの例を一緒にすることはできるが、個々のプロジェクト内では、1 人の人物がコントロールする必要がある。
良いデザインには 1 人の人間がすべてを考える必要があると言っているのではありません。信頼できる判断力を持つ人のアドバイスほど価値のあるものはありません。しかし、話し合いが終わった後、何をすべきかの決定は 1 人の人間に委ねられる必要があります。
なぜ研究は共同作業でできるのに、デザインはできないのでしょうか? これは興味深い質問です。答えはわかりません。おそらく、デザインと研究が収束するのであれば、最高の研究は優れたデザインでもあり、実際は共同作業ではできないのでしょう。最も有名な科学者の多くは、単独で研究していたようです。しかし、ここにパターンがあるかどうかは、私にはわかりません。単に、多くの有名な科学者が、共同作業があまり一般的ではなかった時代に研究していただけなのかもしれません。
科学の世界ではどうであれ、芸術の世界では真のコラボレーションは極めて稀であるように思われます。委員会による設計は悪い設計と同義です。なぜそうなるのでしょうか。この制限を克服する方法はあるのでしょうか。
私は、独裁者は必要ない、と考える傾向にあります。良いデザインには独裁者が必要です。理由の 1 つは、良いデザインは全体として一体でなければならないからです。デザインは人間のためだけではなく、個々の人間のためです。デザインが 1 人の人の頭に収まるアイデアを表しているなら、そのアイデアはユーザーの頭にも収まるはずです。