English Version

设计与研究

2003年1月

(本文源自2002年秋季NEPLS会议的主题演讲。)

访问这个国家的人常常惊讶地发现,美国人喜欢以询问"你是做什么的?“来开始对话。我从来不喜欢这个问题。我很少有一个简洁的答案。但我想我终于解决了这个问题。现在,当有人问我做什么时,我会直视他们的眼睛说"我正在设计一种新的Lisp方言。“我推荐这个答案给任何不喜欢被问及做什么的人。对话会立即转向其他话题。

我不认为自己在研究编程语言。我只是在设计一种,就像有人可能设计一座建筑、一把椅子或一种新字体一样。我不是在试图发现什么新东西。我只是想创造一种编程起来很舒服的语言。在某些方面,这个假设让生活轻松很多。

设计和研究之间的区别似乎是一个新与好的问题。设计不一定要新,但一定要好。研究不一定要好,但一定要新。我认为这两条路在顶端汇合:最好的设计通过使用新思想超越其前人,而最好的研究解决的不仅是新的问题,而且是真正值得解决的问题。所以最终我们的目标是相同的目的地,只是从不同的方向接近。

今天我要谈论的是从背面看你的目标是什么样子的。当你把编程语言视为设计问题而非研究课题时,你会做什么不同的事情?

最大的区别是你更关注用户。设计始于问,这是为谁而做的,他们从中需要什么?例如,一个好的建筑师不是先创建一个设计然后强加给用户,而是通过研究预期用户并找出他们需要什么来开始。

注意我说的是"他们需要的”,而不是"他们想要的”。我并不是说作为一名设计师工作意味着像快餐厨师一样工作,做客户告诉你的任何事情。这在艺术领域的各个领域都有所不同,但我不认为有任何领域是由那些完全按照客户要求做事的人做出最好的作品的。

在衡量好设计的标准是它对用户有多好用这一点上,顾客永远是对的。如果你写了一本让所有人都感到无聊的小说,或者一把坐着极不舒服的椅子,那么你的工作就很糟糕,就是这样。说小说或椅子是根据最先进的理论原理设计的,这并不是辩解。

然而,做出对用户有用的东西并不意味着简单地做用户告诉你做的事情。用户不知道所有的选择是什么,而且常常对他们真正想要的东西感到困惑。

这个悖论的答案,我认为是你必须为用户设计,但必须设计用户需要的东西,而不是仅仅设计他们说他们想要的东西。这很像做医生。你不能仅仅治疗病人的症状。当病人告诉你他们的症状时,你必须找出真正的问题所在,并治疗那个。

这种对用户的关注是一种公理,大多数好的设计实践都可以从中推导出来,大多数设计问题都围绕着它。

如果好的设计必须满足用户的需求,那么用户是谁?当我说设计必须为用户时,我并不是说好的设计旨在某种最低标准。你可以选择任何你想要的用户群体。例如,如果你在设计一个工具,你可以为从初学者到专家的任何人设计,而针对一个群体的好设计对另一个群体可能是坏的设计。关键是,你必须选择某个用户群体。我认为除非参考某个预期用户,否则你甚至无法谈论好或坏的设计。

如果预期用户包括设计师自己,你最有可能获得好的设计。当你为不包括你自己的群体设计东西时,它往往是为那些你认为比你不够复杂的人设计的,而不是更复杂的。

这是一个问题,因为无论多么仁慈,居高临下地看待用户似乎不可避免地会腐蚀设计师。我怀疑美国很少有住房项目是由期望住在那里的建筑师设计的。你可以在编程语言中看到同样的现象。C、Lisp和Smalltalk是为它们自己的设计师使用而创建的。Cobol、Ada和Java是为其他人使用而创建的。

如果你认为你在为白痴设计东西,那么很可能你设计的东西不够好,即使是对白痴来说。即使你为最复杂的用户设计东西,你仍然在为人类设计。在研究方面情况不同。在数学中,你选择抽象不是因为它们容易理解,而是因为它们能让证明更短。我认为这对科学大体上也是如此。科学思想并不是为了符合人体工程学。

在艺术领域,情况非常不同。设计完全是关于人的。人体是个奇怪的东西,但当你设计一把椅子时,那就是你设计的对象,没有办法回避。所有艺术都必须迎合人类的兴趣和局限性。例如,在绘画中,在其他条件相同的情况下,有人的画比没有人的画更有趣。文艺复兴时期的伟大画作都充满了人,这不仅仅是历史的偶然。如果不是这样,绘画作为媒介就不会拥有它所拥有的声望。

不管喜欢与否,编程语言也是为人类服务的,我怀疑人脑就像人体一样凹凸不平且特异。有些思想人们很容易掌握,有些则不然。例如,我们处理细节的能力似乎非常有限。正是这个事实使得编程语言一开始就是个好主意;如果我们能处理细节,我们可以直接用机器语言编程。

还要记住,语言主要不是完成程序的形式,而是程序必须在其中开发的东西。任何艺术领域的人都会告诉你,你可能需要不同的媒介来处理这两种情况。例如,大理石是完成思想的漂亮、耐用的媒介,但对于开发新思想来说,它却是一种无可救药的僵化媒介。

程序就像证明一样,是一棵树的修剪版本,这棵树过去到处都有错误的分支。所以语言的测试不仅仅是完成的程序在它里面看起来有多干净,而是到达完成程序的路径有多干净。一个能给你优雅完成程序的设计选择可能不会给你一个优雅的设计过程。例如,我写过几个定义宏的宏,充满了嵌套的反引号,现在看起来像小宝石,但写它们花费了数小时最丑陋的试错,而且坦率地说,我仍然不完全确定它们是正确的。

我们常常表现得好像语言的测试是完成的程序在它里面看起来有多好。当你看到同一个程序用两种语言编写,一个版本短得多时,这似乎很有说服力。当你从艺术的角度接近这个问题时,你不太可能依赖这种测试。你不想最终得到一个像大理石一样的编程语言。

例如,在软件开发中拥有一个交互式顶层(在Lisp中称为读取-求值-打印循环)是一个巨大的胜利。当你有一个这样的东西时,它对语言的设计有实际影响。它对于一个必须在使用前声明变量的语言来说效果不佳,例如。当你只是在顶层输入表达式时,你希望能够将x设置为某个值,然后开始对x做事情。你不想必须先声明x的类型。你可以对任何一个前提提出异议,但如果一个语言必须有顶层才能方便,而强制类型声明与顶层不兼容,那么任何强制类型声明的语言都不可能方便编程。

在实践中,要获得好的设计,你必须接近并保持接近你的用户。你必须不断在实际用户上校准你的想法,尤其是在开始时。简·奥斯汀的小说如此之好的原因之一是她把它们大声读给家人听。这就是为什么她从不沉溺于自我放纵的风景描述或矫饰的哲学思考。(哲学在那里,但它被编织进故事中,而不是像标签一样粘贴在上面。)如果你打开一本普通的"文学"小说,想象把它作为你写的东西大声读给朋友听,你会敏锐地感觉到那种东西对读者来说是多么令人难以忍受。

在软件世界,这个想法被称为"较差就是更好"。实际上,“较差就是更好"的概念中混合了几个想法,这就是为什么人们仍在争论较差是否真的更好。但这个混合中的主要思想之一是,如果你在构建新东西,你应该尽快将原型放到用户面前。

另一种方法可能叫做"万福玛丽亚策略”。你不是快速拿出原型并逐步改进它,而是试图在一次长传触地中创建完整、完成的产品。据我所知,这是灾难的根源。无数创业公司在互联网泡沫期间这样自我毁灭。我从未听说过有成功的案例。

软件世界之外的人可能没有意识到的是,“较差就是更好"的思想在整个艺术领域都有体现。例如,在绘画中,这个思想在文艺复兴时期被发现。现在几乎每个绘画老师都会告诉你,获得准确绘画的正确方法不是慢慢地围绕物体的轮廓工作,因为错误会累积,最后你会发现线条不相遇。相反,你应该在大致正确的地方画几条快速的线,然后逐渐完善这个初始草图。

在大多数领域,传统上原型是用不同材料制作的。要切割成金属的字体最初是用刷子在纸上设计的。要铸成青铜的雕像是用蜡建模的。要在挂毯上刺绣的图案是用墨水在纸上绘制的。要用石头建造的建筑是在较小规模的木材上测试的。

当油画在十五世纪首次流行时令人兴奋的原因是,你实际上可以从原型制作完成的作品。如果你愿意,可以做一个初步的绘图,但你不必受它约束;你可以在完成绘画时解决所有细节,甚至做重大改变。

在软件中你也可以这样做。原型不一定只是一个模型;你可以将其精制成成品。我认为你应该在可能的时候总是这样做。它能让你利用一路上获得的新见解。但也许更重要的是,它对士气有好处。

士气在设计中至关重要。我很惊讶人们不多谈论它。我的第一个绘画老师告诉我:当你画某样东西感到无聊时,画出来的东西看起来会很无聊。例如,假设你必须画一栋建筑,你决定单独画每一块砖。如果你愿意,你可以这样做,但如果你中途感到无聊并开始机械地画砖而不是观察每一块,那么画出来的效果会比仅仅暗示砖块要差。

通过逐步完善原型来建造东西对士气有好处,因为它能让你保持投入。在软件中,我的规则是:始终有可工作的代码。如果你正在写一小时内可以测试的东西,那么你有立即获得奖励的前景来激励你。在艺术领域也是如此,特别是在油画中。大多数画家从模糊的草图开始,然后逐步完善。如果你这样工作,那么原则上你永远不必在一天结束时留下看起来确实未完成的东西。确实,画家之间甚至有句谚语:“一幅画永远不会完成,你只是停止在上面工作。“这个想法对任何做过软件的人来说都很熟悉。

士气是难以设计给不够复杂用户的另一个原因。很难对自己不喜欢的东西保持兴趣。要做出好东西,你必须想"哇,这真的很棒”,而不是"这是什么垃圾;那些傻瓜会喜欢它”。

设计意味着为人类制造东西。但不仅仅是用户是人。设计师也是人。

注意这段时间我一直在谈论"设计师”。设计通常必须由单个人控制才能做好。然而,似乎几个人可以合作进行一个研究项目。这在我看来是研究和设计之间最有趣的区别之一。

艺术领域有著名合作的例子,但它们大多数似乎是分子结合而不是核融合的情况。在歌剧中,通常由一个人写剧本,另一个人写音乐。在文艺复兴时期,来自北欧的工匠经常被雇佣来做意大利绘画背景中的风景。但这些不是真正的合作。它们更像是罗伯特·弗罗斯特"好篱笆造就好邻居"的例子。你可以把好的设计实例粘在一起,但在每个单独的项目中,一个人必须处于控制地位。

我不是说好的设计要求一个人思考所有事情。没有什么比一个你信任其判断的人的建议更有价值了。但谈话结束后,关于做什么的决定必须由一个人来做。

为什么研究可以由合作者完成而设计不能?这是一个有趣的问题。我不知道答案。也许,如果设计和研究汇合,最好的研究也是好的设计,而且实际上不能由合作者完成。许多最著名的科学家似乎都是独自工作的。但我了解得不够多,无法说这里是否有模式。这可能仅仅是因为许多著名科学家工作时合作不那么普遍。

无论科学领域的情况如何,真正的合作在艺术领域似乎极为罕见。委员会设计是坏设计的同义词。为什么会这样?有什么方法可以克服这个限制吗?

我倾向于认为没有——好的设计需要一个独裁者。一个原因是好的设计必须是一体的。设计不仅是为人类,而是为单个的人。如果一个设计代表的思想适合一个人的头脑,那么这个思想也会适合用户的头脑。

相关链接: