Loading...

设计与研究

Original

2003 年 1 月

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

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

我不认为自己在研究编程语言。我只是在设计一种编程语言,就像有人设计一栋建筑、一把椅子或一种新字体一样。我并不是想发现什么新东西。我只是想开发一种适合编程的语言。从某种程度上来说,这种假设让生活变得轻松多了。

设计与研究之间的区别似乎是新与好的问题。设计不必是新的,但必须是好的。研究不必是好的,但必须是新的。我认为这两条路在顶部汇合:最好的设计通过使用新的想法超越其前辈,而最好的研究解决的问题不仅是新的,而且实际上值得解决。所以最终我们瞄准的是同一个目的地,只是从不同的方向接近它。

我今天要讲的是从背后看你的目标是什么样子的。当你把编程语言看作一个设计问题而不是一个研究课题时,你会做些什么不同的事情?

最大的区别在于你更加关注用户。设计从问自己开始,这是为谁设计的,他们需要什么?例如,一个好的建筑师不会先设计一个设计然后强加给用户,而是先研究目标用户,弄清楚他们需要什么。

请注意我说的是“他们需要什么”,而不是“他们想要什么”。我并不是想给人留下这样的印象:设计师的工作就意味着要像快餐厨师一样,按照客户的要求做任何事。这在艺术领域各不相同,但我认为没有哪个领域最好的作品是由那些完全按照客户要求做的人完成的。

顾客永远对的,因为衡量设计好坏的标准是它是否适合用户。如果你写的小说让每个人都感到无聊,或者你设计的椅子坐起来非常不舒服,那么你就做得很糟糕。说小说或椅子是根据最先进的理论原理设计的,这并不能为你辩解。

然而,为用户提供有用的功能并不意味着只按照用户的要求去做。用户并不知道所有的选择是什么,而且经常搞不清楚他们真正想要什么。

我认为,解决这一悖论的答案是,你必须为用户设计,但你必须设计用户需要的东西,而不是简单地设计他说他想要的东西。这很像当医生。你不能只治疗病人的症状。当病人告诉你他的症状时,你必须弄清楚他到底出了什么问题,然后治疗。

以用户为中心是一种公理,大多数优秀的设计实践都可以从中衍生出来,大多数设计问题也都围绕着它。

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

如果目标用户包括设计师本人,您最有可能获得良好的设计。当您为不包括您的群体设计某样东西时,它往往是为那些您认为不如您精明的人设计的,而不是为那些比您更精明的人设计的。

这是个问题,因为不管多么仁慈,轻视用户似乎都不可避免地会腐蚀设计师。我怀疑,美国很少有住房项目是由以居住为目的的建筑师设计的。在编程语言中,你也能看到同样的情况。C、Lisp 和 Smalltalk 是为自己的设计师创建的。Cobol、Ada 和 Java 是为其他人创建的。

如果你认为你正在为白痴设计某些东西,那么很可能你设计的东西并不好,甚至对白痴来说也不是好东西。

即使你正在为最复杂的用户设计某些东西,你仍然在为人类设计。研究则不同。在数学中,你不会因为人类容易理解而选择抽象;你会选择任何能让证明更简短的东西。我认为这对科学来说通常都是正确的。科学思想并不意味着符合人体工程学。

在艺术方面,情况就大不相同了。设计完全是关于人的。人体是一个奇怪的事物,但当你设计一把椅子时,它就是你为之设计的,这是无法回避的。所有的艺术都必须迎合人类的兴趣和局限性。例如,在绘画中,在其他所有条件相同的情况下,一幅画中有人物的画会比一幅没有人物的画更有趣。文艺复兴时期的伟大画作中全是人物,这不仅仅是历史的偶然。如果没有人物,绘画作为一种媒介就不会有现在的声望。

不管你喜欢与否,编程语言也是为人而设的,我认为人脑和人体一样,都是粗糙而独特的。有些想法很容易让人理解,有些则不然。例如,我们处理细节的能力似乎非常有限。正是这个事实让编程语言成为一个好主意;如果我们能处理细节,我们就可以用机器语言编程。

还要记住,语言主要不是完成程序的形式,而是程序开发必须使用的形式。任何从事艺术的人都会告诉你,这两种情况可能需要不同的媒介。例如,大理石是一种适合完成想法的优质耐用的媒介,但对于开发新想法来说,它却是一种极其不灵活的媒介。

程序就像证明一样,是一棵树的修剪版本,而这棵树过去曾出现过错误的开端,枝叶遍布。因此,对一种语言的测试不仅仅是看完成的程序看起来有多干净,还要看完成程序的路径有多干净。一个能给你优雅的完成程序的设计选择,可能不会给你一个优雅的设计过程。例如,我写过几个宏定义宏,里面充满了嵌套的反引号,现在看起来就像小宝石,但编写它们花了几个小时最丑陋的反复试验,坦率地说,我仍然不完全确定它们是否正确。

我们经常认为,对一门语言的测试就是用它编写的程序看起来有多好。当你看到用两种语言编写的同一个程序,而其中一个版本要短得多时,这似乎很有说服力。当你从艺术的角度来处理这个问题时,你不太可能依赖这种测试。你不会希望最终得到一种像大理石一样的编程语言。

例如,在软件开发中,拥有一个交互式顶层是一个巨大的优势,在 Lisp 中被称为读取-求值-打印循环。当你拥有一个这样的顶层时,它会对语言的设计产生真正的影响。例如,对于必须在使用变量之前声明变量的语言来说,它就不太适用。当你只是在顶层中输入表达式时,你希望能够将 x 设置为某个值,然后开始对 x 进行操作。你不想先声明 x 的类型。你可以对任何一个前提提出异议,但如果一种语言必须有一个顶层才能方便,而强制性的类型声明与顶层不兼容,那么任何将类型声明作为强制性的语言都不会方便编程。

实际上,要获得好的设计,你必须贴近你的用户,并且始终贴近他们。你必须不断根据实际用户调整你的想法,尤其是在开始的时候。简·奥斯汀的小说之所以如此优秀,原因之一是她会大声朗读给家人听。这就是为什么她从不沉溺于自我陶醉的艺术性风景描述,或自命不凡的哲学思考。(哲学是存在的,但它被编织在故事中,而不是像标签一样被粘贴在故事上。)如果你打开一本普通的“文学”小说,想象着把它当作自己写的东西大声朗读给你的朋友听,你会非常敏锐地感受到这种事情对读者来说是一种多大的负担。

在软件界,这种理念被称为“更糟即更好”。实际上,“更糟即更好”的概念中混合了多种理念,这就是为什么人们仍在争论“更糟即更好”是否真的更好。但这种混合理念中的一个主要理念是,如果你正在构建新的东西,你应该尽快将原型呈现给用户。

另一种方法可能被称为“万福玛利亚”策略。你不是快速制作原型并逐步完善它,而是试图通过一次长传创造出完整的成品。据我所知,这是灾难的根源。互联网泡沫期间,无数初创公司以这种方式毁掉了自己。我从未听说过有哪个案例是成功的。

软件行业以外的人可能没有意识到,在艺术领域中,Worse is Better 随处可见。例如,在绘画中,这个想法是在文艺复兴时期发现的。现在几乎每个绘画老师都会告诉你,获得准确绘画的正确方法不是慢慢地沿着物体的轮廓画,因为错误会累积,最后你会发现线条不相交。相反,你应该在大致正确的位置快速画几条线,然后逐渐完善这个初始草图。

在大多数领域,原型传统上都是用不同的材料制成的。金属上要刻的字体最初是用画笔在纸上设计的。青铜铸造的雕像是用蜡塑造的。挂毯上要绣的图案是用水墨画在纸上画的。用石头建造的建筑物在较小的规模上用木头进行测试。

油画在 15 世纪初开始流行,它之所以如此令人兴奋,是因为你可以原型开始创作成品。如果你愿意,你可以画一张草图,但你不必局限于此;你可以在完成绘画时设计所有细节,甚至做出重大修改。

你也可以在软件中做到这一点。原型不一定只是一个模型;你可以将其改进为成品。我认为你应该尽可能地做到这一点。它让你能够利用你在过程中获得的新见解。但也许更重要的是,它有利于士气。

士气是设计的关键。我很惊讶人们没有更多地谈论它。我的第一位绘画老师告诉我:如果你在画东西时感到无聊,画出来的画看起来就会很无聊。例如,假设你必须画一栋建筑,你决定单独画出每一块砖。如果你愿意,你可以这样做,但如果你中途感到无聊,开始机械地制作砖块而不是观察每一块砖,画出来的画会比你仅仅建议砖块更糟糕。

通过逐步完善原型来构建某些东西有利于鼓舞士气,因为它能让你保持专注。在软件方面,我的原则是:始终有可用的代码。如果你正在编写可以在一小时内测试的东西,那么你就有可能立即获得奖励来激励你。在艺术方面也是如此,特别是在油画方面。大多数画家都是从模糊的草图开始,然后逐渐完善它。如果你以这种方式工作,那么原则上你永远不会以看起来未完成的东西结束一天的工作。事实上,画家中甚至有这样一句话:“画是永远无法完成的,你只是停止了创作。”任何从事过软件工作的人都会熟悉这个想法。

士气是难以为不熟练的用户设计产品的另一个原因。很难对自己不喜欢的东西保持兴趣。要做出好产品,你必须想,“哇,这真的很棒”,而不是“真是个烂货;那些傻瓜会喜欢的。”

设计意味着为人类创造事物。但不仅仅是用户是人。设计师也是人。

请注意,我一直在谈论“设计师”。设计通常必须由一个人控制才能发挥作用。然而,似乎有几个人可以合作完成一个研究项目。在我看来,这是研究和设计之间最有趣的区别之一。

艺术领域中不乏著名的合作案例,但其中大多数似乎都是分子键合而非核聚变。在歌剧中,一个人写剧本,另一个人写音乐是很常见的。在文艺复兴时期,来自北欧的熟练工人经常被雇用来绘制意大利绘画背景中的风景。但这些都不是真正的合作。它们更像是罗伯特·弗罗斯特的“好篱笆成就好邻居”的例子。你可以把好的设计实例拼凑在一起,但在每个单独的项目中,必须有一个人负责控制。

我并不是说好的设计需要一个人考虑所有事情。没有什么比你信任的人的建议更有价值。但讨论结束后,该做什么的决定必须由一个人来决定。

为什么研究可以由合作者完成,而设计却不能?这是一个有趣的问题。我不知道答案。也许,如果设计和研究融合在一起,最好的研究也是好的设计,事实上不能由合作者完成。许多最著名的科学家似乎都是单独工作的。但我不知道这其中是否存在某种模式。可能只是许多著名的科学家在合作不太常见的时候工作。

无论科学界的情况如何,真正的合作在艺术界似乎极为罕见。委员会设计是糟糕设计的代名词。为什么会这样?有没有什么方法可以突破这一限制?

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