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