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