Loading...

黑客与画家

Original

2003 年 5 月

(本文源自哈佛大学的一次客座讲座,其中吸收了早期在东北大学的一次演讲。)

当我完成计算机科学研究生课程后,我进入艺术学校学习绘画。很多人似乎对对计算机感兴趣的人也会对绘画感兴趣感到惊讶。他们似乎认为黑客和绘画是截然不同的工作——黑客是冷静、精确和有条不紊的,而绘画是某种原始冲动的疯狂表达。

这两种形象都是错误的。黑客和绘画有很多共同之处。事实上,在我认识的所有不同类型的人中,黑客和画家是最相似的。

黑客和画家的共同点在于他们都是创造者。与作曲家、建筑师和作家一样,黑客和画家试图做的是创造美好的事物。他们本身并不是在做研究,但如果在尝试创造美好事物的过程中他们发现了一些新技术,那就更好了。

我从来都不喜欢“计算机科学”这个词。我不喜欢它的主要原因是它根本不存在。计算机科学是一堆杂乱无章的领域,它们被历史的偶然事件(如南斯拉夫)拼凑在一起。一端是数学家,但他们却把自己所做的工作称为计算机科学,以便获得 DARPA 的资助。中间是从事计算机自然历史研究的人——例如,研究通过网络路由数据的算法的行为。而另一个极端是黑客,他们试图编写有趣的软件,而计算机对他们来说只是一种表达媒介,就像混凝土之于建筑师或油漆之于画家一样。就好像数学家、物理学家和建筑师都必须属于同一部门。

有时黑客所做的事情被称为“软件工程”,但这个术语同样具有误导性。优秀的软件设计师并不比架构师更像工程师。架构师和工程之间的界限并不明确,但确实存在。它介于做什么和怎么做之间:架构师决定做什么,工程师决定怎么做。

做什么和怎么做不应该分开。如果你试图决定做什么而不理解怎么做,那你就自找麻烦了。但黑客肯定不仅仅是决定如何实现某些规范。最好的情况是创建规范——尽管事实证明最好的方法是实现它。

也许有一天,“计算机科学”会像南斯拉夫一样被拆分成各个组成部分。这可能是件好事。尤其是如果这意味着我的祖国——黑客——的独立。

将所有这些不同类型的工作集中到一个部门可能在管理上很方便,但在思维上却很混乱。这是我不喜欢“计算机科学”这个名字的另一个原因。可以说,中间的人正在做一些类似于实验科学的事情。但两端的人,黑客和数学家,实际上并没有在做科学。

数学家们似乎并不为此烦恼。他们像数学系的其他数学家一样,兴高采烈地开始证明定理,可能很快就会忘记他们工作的大楼外面写着“计算机科学”。但对于黑客来说,这个标签是个问题。如果他们所做的事情被称为科学,这会让他们觉得自己应该表现得科学。因此,大学和研究实验室里的黑客们不去做他们真正想做的事情,也就是设计漂亮的软件,而是觉得他们应该写研究论文。

在最好的情况下,论文只是一种形式。黑客编写了很酷的软件,然后就此撰写了一篇论文,这篇论文成为了软件所代表成就的代表。但这种不匹配往往会引发问题。人们很容易从构建美好的东西转向构建丑陋的东西,而这些东西更适合成为研究论文的主题。

不幸的是,美好的事物并不总是论文的最佳主题。第一,研究必须是原创的——任何写过博士论文的人都知道,确保你正在探索处女地的方法是开辟一块无人问津的土地。第二,研究必须是实质性的——笨拙的系统会产生更有内涵的论文,因为你可以写下为了完成任务必须克服的障碍。没有什么比从错误的假设开始更能产生实质性的问题了。大多数人工智能都是这条规则的例子;如果你假设知识可以表示为谓词逻辑表达式的列表,其参数代表抽象概念,那么你将有很多论文要写关于如何做到这一点。正如瑞奇·里卡多曾经说过的,“露西,你有很多事情要解释。”

创造美好事物的方法通常是对已经存在的事物进行细微调整,或以略有新意的方式结合现有的想法。这种工作很难在研究论文中表达。

那么,为什么大学和研究实验室仍然以出版物来评判黑客呢?原因与“学术能力”通过简单的标准化测试来衡量,或者程序员的生产力通过代码行来衡量一样。这些测试很容易应用,没有什么比简单有效的测试更诱人了。

衡量黑客们真正想做的事情,即设计出漂亮的软件,会困难得多。你需要有良好的设计感才能判断好的设计。而且,人们识别好设计的能力和他们对自己能做到的信心之间没有相关性,除非可能存在负相关性。

唯一的外部考验是时间。随着时间的推移,美好的事物往往会蓬勃发展,而丑陋的事物往往会被丢弃。不幸的是,所涉及的时间可能比人的一生还要长。塞缪尔·约翰逊说,一位作家的声誉需要一百年才能凝聚起来。你必须等待这位作家有影响力的朋友去世,然后等待他们所有的追随者都去世。

我认为黑客们必须接受自己的名声中有很大一部分是随机因素。在这一点上他们与其他制造者没什么不同。事实上,相比之下他们很幸运。时尚对黑客的影响远不如对绘画的影响大。

还有比别人误解你的工作更糟糕的事情。更危险的是你自己会误解你的工作。相关领域是你寻找灵感的地方。如果你发现自己在计算机科学系,你很自然地会相信,例如,黑客是理论计算机科学理论的应用版本。我在研究生院的时候,心里一直有一种不舒服的感觉,我应该了解更多的理论,而期末考试后三周就把所有这些东西都忘了,这真是太疏忽了。

现在我意识到我错了。黑客需要了解计算理论,就像画家需要了解油漆化学一样。你需要知道如何计算时间和空间复杂度以及图灵完备性。你可能还需要记住至少状态机的概念,以防你必须编写解析器或正则表达式库。事实上,画家必须记住的油漆化学知识远不止这些。

我发现最好的创意来源不是名称中带有“计算机”一词的其他领域,而是制造者所在的其他领域。绘画是比计算理论更丰富的创意来源。

例如,我在大学时被教导,在接触计算机之前,应该先在纸上完全弄清楚程序。但我发现自己并不是这样编程的。我发现自己喜欢坐在计算机前编程,而不是坐在纸上。更糟糕的是,我没有耐心地写出完整的程序并确保它是正确的,而是倾向于直接写出完全错误的代码,然后逐渐将其打磨成形。我被教导,调试是一种最后的检查,可以发现拼写错误和疏忽。在我的工作方式中,编程似乎就是调试。

很长一段时间我都为此感到难过,就像我曾经为自己没有像小学时他们教我的那样握笔而感到难过一样。如果我当时看看其他的工匠、画家或建筑师,我就会意识到我所做的事情有一个名字:素描。据我所知,他们在大学里教我编程的方式完全是错误的。你应该在编写程序时弄清楚程序,就像作家、画家和建筑师那样。

认识到这一点对软件设计有着真正的意义。这意味着编程语言首先应该是可塑的。编程语言是用来思考程序的,而不是用来表达你已经想到的程序的。它应该是一支铅笔,而不是一支钢笔。如果人们真的按照他们在大学里教我的方式编写程序,静态类型将是一个好主意。但我认识的任何黑客都不是这样编写程序的。我们需要一种让我们随意涂鸦和涂抹的语言,而不是一种让你不得不坐在那里,把一杯茶杯放在膝盖上,和一个严厉的老阿姨编译器进行礼貌交谈的语言。

在我们讨论静态类型的话题时,认同制造者将使我们免于另一个困扰科学的问题:数学嫉妒。科学界的每个人都暗自认为数学家比他们聪明。我认为数学家也相信这一点。无论如何,结果是科学家倾向于使他们的工作看起来尽可能数学化。在物理学这样的领域,这可能不会造成太大的伤害,但你离自然科学越远,它就越成问题。

一页公式看起来太令人印象深刻了。(提示:为了更加令人印象深刻,可以使用希腊变量。)因此,人们很容易倾向于解决可以正式处理的问题,而不是解决那些重要的问题。

如果黑客认同其他创造者,比如作家和画家,他们就不会有这种冲动。作家和画家不会嫉妒数学。他们觉得自己在做一些完全不相关的事情。我想黑客也是如此。

如果大学和研究实验室不让黑客做他们想做的工作,那么他们也许应该去公司。不幸的是,大多数公司也不会让黑客做他们想做的事。大学和研究实验室强迫黑客成为科学家,而公司强迫他们成为工程师。

我自己也是最近才发现这一点的。雅虎收购 Viaweb 时,他们问我想做什么。我一直不太喜欢商业方面,并说我只想做黑客。当我来到雅虎时,我发现黑客对他们来说意味着实现软件,而不是设计软件。程序员被视为将产品经理的愿景(如果可以这么说的话)转化为代码的技术人员。

这似乎是大公司的默认计划。他们这样做是因为它降低了结果的标准偏差。只有一小部分黑客可以真正设计软件,而经营公司的人很难挑选出这些人。因此,大多数公司不会将软件的未来委托给一位才华横溢的黑客,而是将其设置为由委员会设计,而黑客只需实施设计即可。

如果你想在某个时候赚钱,请记住这一点,因为这是初创公司获胜的原因之一。大公司希望降低设计结果的标准偏差,因为他们想避免灾难。但是当你抑制振荡时,你会失去高点和低点。这对大公司来说不是问题,因为他们不是靠制造出优秀的产品来取胜的。大公司通过比其他大公司更少的投入来取胜。

因此,如果你能想办法与一家规模足够大、软件由产品经理设计的公司展开设计战,他们就永远无法跟上你的步伐。不过,这样的机会并不容易找到。与一家大公司展开设计战很难,就像在城堡里与对手进行肉搏战一样困难。例如,编写一个比 Microsoft Word 更好的文字处理器相当容易,但微软在其操作系统垄断的城堡里,即使你注意到了,可能也不会注意到。

设计之战的战场是在新市场,那里还没有人设法建立任何防御工事。在那里,你可以采取大胆的设计方法,让同一批人负责设计和实施产品,从而赢得大胜。微软自己在开始时就是这么做的。苹果也是。还有惠普。我想几乎每一家成功的初创公司都是这么做的。

因此,开发出色软件的一种方法是创办自己的初创公司。但是,这样做有两个问题。其一,在初创公司,除了编写软件,你还有很多事情要做。在 Viaweb,如果我有四分之一的时间可以做黑客工作,我就认为自己很幸运了。而其余四分之三的时间里,我必须做的事情从乏味到可怕。我对此有一个基准,因为有一次我不得不离开董事会去填补一些蛀牙。我记得坐在牙医的椅子上,等待钻头,感觉就像在度假一样。

创业公司的另一个问题是,赚钱的软件和有趣的软件之间没有太多重叠。编程语言很有趣,事实上,微软的第一个产品就是其中之一,但现在没有人会为编程语言付费。如果你想赚钱,你往往会被迫解决那些太棘手的问题,没有人会免费解决。

所有制造商都面临这个问题。价格由供求关系决定,而人们对那些有趣的东西的需求远不如那些能解决个人客户日常问题的东西。在百老汇外演出的报酬不如在贸易展上穿着大猩猩服装站在某人的摊位上。写小说的报酬不如为垃圾处理机写广告文案。而破解编程语言的报酬也不如弄清楚如何将某家公司的遗留数据库连接到他们的 Web 服务器。

我认为,对于软件行业来说,这个问题的答案是几乎所有制造商都知道的一个概念:白天的工作。这个短语起源于晚上表演的音乐家。更广泛地说,这意味着你从事一种工作是为了赚钱,而从事另一种工作是为了热爱。

几乎所有的创造者在职业生涯早期都有一份日常工作。众所周知,画家和作家都是这样的。如果你够幸运的话,你可以找到一份与你的实际工作密切相关的日常工作。音乐家似乎经常在唱片店工作。开发某种编程语言或操作系统的黑客也可能能够找到一份使用它的日常工作。[1]

当我说答案是让黑客拥有日常工作,并在业余时间开发出色的软件时,我并不是在提出这个新想法。这就是开源黑客的真正意义所在。我想说的是,开源可能是正确的模式,因为它已经得到了所有其他制造商的独立证实。

我觉得很奇怪,竟然有雇主不愿意让黑客参与开源项目。在 Viaweb,我们不愿意雇佣那些不愿意的人。当我们面试程序员时,我们最关心的是他们在业余时间写了什么样的软件。除非你热爱某件事,否则你不可能真正做好它,如果你热爱黑客,你必然会参与自己的项目。[2]

因为黑客是创造者而非科学家,所以寻找隐喻的正确地方不是科学,而是其他类型的创造者。绘画还能教给我们什么有关黑客的知识?

我们可以学习,或者至少可以确认,从绘画的例子可以看出,如何学习黑客技术。绘画主要是通过实践来学习的。黑客技术也是如此。大多数黑客不是通过上大学的编程课程来学习黑客技术的。他们在 13 岁时就通过编写自己的程序来学习黑客技术。即使在大学课堂上,你学习黑客技术也主要是通过黑客技术。[3]

因为画家留下了一系列作品,所以你可以看着他们边做边学。如果你按时间顺序看画家的作品,你会发现每幅画都是建立在之前作品中所学到的东西之上的。当一幅画中有一些东西效果很好时,你通常可以在一些早期的画作中找到它的较小版本的版本。

我认为大多数创造者都是这样工作的。作家和建筑师似乎也是如此。也许黑客应该更像画家,经常从头开始,而不是在一个项目上连续工作数年,并试图将他们后来的所有想法作为修订版纳入其中。

黑客通过实践学习黑客技术,这一事实再次表明黑客技术与科学技术截然不同。科学家不是通过实践学习科学技术,而是通过做实验和做习题集。科学家一开始所做的工作是完美的,他们只是试图复制别人已经为他们做过的工作。最终,他们能够完成原创工作。而黑客从一开始就在做原创工作;只是做得很糟糕。所以黑客一开始是原创的,后来做得很好,科学家一开始是优秀的,后来做得很好。

创作者学习的另一种方式是从实例中学习。对于画家来说,博物馆就是技法的参考图书馆。几百年来,临摹大师的作品一直是画家传统教育的一部分,因为临摹迫使你仔细观察绘画的创作方式。

作家也是这样做的。本杰明·富兰克林通过总结艾迪生和斯蒂尔文章中的观点,然后尝试重现它们,从而学会了写作。雷蒙德·钱德勒在侦探小说中也做了同样的事情。

同样,黑客可以通过查看好的程序来学习编程——不仅要查看程序所做的事情,还要查看源代码。开源运动的一个不太为人所知的好处是,它使学习编程变得更容易。当我学习编程时,我们不得不主要依靠书中的示例。当时可用的一大块代码是 Unix,但即使它也不是开源的。大多数阅读源代码的人都是通过约翰·莱昂斯 (John Lions) 的书的非法影印本阅读的,尽管这本书写于 1977 年,但直到 1996 年才获准出版。

另一个绘画的例子是,绘画是通过逐步完善而创作的。绘画通常从草图开始。逐渐填充细节。但这不仅仅是一个填充的过程。有时最初的计划会被证明是错误的。无数的画作,当你在 X 光片上看时,会发现肢体被移动了,面部特征被重新调整了。

这是一个我们可以从绘画中学习的例子。我认为黑客也应该这样做。期望程序的规范完美无缺是不现实的。如果你事先承认这一点,并以允许规范随时更改的方式编写程序,那你就会更好。

(大公司的结构使得他们很难做到这一点,所以这是初创公司具有优势的另一个地方。)

现在每个人都应该知道过早优化的危险。我认为我们应该同样担心过早设计——过早决定程序应该做什么。

正确的工具可以帮助我们避免这种危险。好的编程语言应该像油画一样,让你很容易改变主意。动态类型在这里是一个胜利,因为你不必预先承诺特定的数据表示。但我认为灵活性的关键是让语言非常抽象。最容易改变的程序是非常短的程序。

这听起来像是一个悖论,但一幅伟大的画作必须比它必须的更好。例如,当列奥纳多在国家美术馆画吉内夫拉·德·本西的肖像时,他在她的头后面放了一丛杜松树。他在树上仔细地画了每一片叶子。许多画家可能会认为,这只是放在背景中勾勒出她的头部轮廓的东西。没有人会那么仔细地看它。

但达芬奇不是这样。他在一幅画作上付出的努力完全不取决于他希望别人看得有多仔细。他就像迈克尔·乔丹。永不放弃。

坚持不懈之所以能取得胜利,是因为从总体上看,看不见的细节变得可见。当人们走过吉内夫拉·德·本西的肖像时,他们的注意力往往立即被它吸引,甚至在他们看标签并注意到上面写着列奥纳多·达·芬奇之前。所有这些看不见的细节结合在一起,产生了令人惊叹的东西,就像一千个几乎听不见的声音都在齐声歌唱。

同样,优秀的软件也需要对美的狂热追求。如果你仔细观察优秀的软件,你会发现那些不应该被人看到的部分也很美。我并不是说我写的软件很棒,但我知道,如果我以同样的方式对待日常生活,我在写代码时的行为方式会让我有资格获得处方药。看到缩进很差或使用丑陋变量名的代码会让我发疯。

如果黑客只是将规范转化为代码的执行者,那么他只需从一端到另一端进行操作,就像挖沟一样。但如果黑客是创造者,我们就必须考虑灵感。

黑客工作就像绘画一样,有周期性。有时你会对某个新项目感到兴奋,并愿意每天花 16 个小时来做这件事。其他时候,你似乎对什么都提不起兴趣。

要想做好工作,你必须考虑到这些周期,因为它们会受到你对它们的反应的影响。当你在山上驾驶手动挡汽车时,有时你必须松开离合器以避免熄火。松开离合器同样可以防止雄心壮志停滞不前。无论是在绘画还是在黑客攻击中,有些任务是雄心勃勃的,有些任务则是令人欣慰的例行公事。把一些简单的任务留到你本来会停滞不前的时刻去做是个好主意。

在黑客攻击中,这实际上意味着保存错误。我喜欢调试:这是黑客攻击与人们想象的一样简单的时候。你有一个完全受限的问题,你所要做的就是解决它。你的程序应该做 x。相反,它做了 y。哪里出了问题?你知道你最终会赢。这就像粉刷墙壁一样轻松。

绘画的例子不仅能教会我们如何管理自己的工作,还能教会我们如何合作。过去的许多伟大艺术都是多人之手的作品,尽管博物馆里墙上可能只有一个名字。列奥纳多是韦罗基奥工作室的学徒,他在《基督受洗》中画了一位天使。这种事情是常态,而不是例外。米开朗基罗被认为特别敬业,因为他坚持亲自绘制西斯廷教堂天花板上的所有人物。

据我所知,当画家们一起创作一幅画时,他们从不画同一个部分。大师画主要人物,助手画其他人物和背景是很常见的。但你从不会看到一个人在另一个人的作品上作画。

我认为这也是软件协作的正确模式。不要把它推得太远。当一段代码被三四个不同的人破解,而其中没有一个人真正拥有它时,它最终会像一个公共休息室一样。它会给人一种荒凉和被遗弃的感觉,并积累大量垃圾。我认为,正确的协作方式是将项目划分为明确定义的模块,每个模块都有明确的所有者,并且它们之间的接口经过精心设计,如果可能的话,像编程语言一样清晰。

就像绘画一样,大多数软件都是为人类观众设计的。因此,黑客和画家一样,必须有同理心才能做出真正伟大的作品。你必须能够从用户的角度看待事物。

当我还是个孩子时,我总是被告知要从别人的角度看问题。这在实践中总是意味着做别人想做的事,而不是做自己想做的事。这当然让同理心名声扫地,我决心不去培养它。

天哪,我错了。事实证明,从别人的角度看问题实际上是成功的秘诀。这并不一定意味着要自我牺牲。远非如此。了解别人如何看待事物并不意味着你会为他的利益行事;在某些情况下——例如在战争中——你想做的恰恰相反。[4]

大多数创作者都是为人类观众创作的。要吸引观众,你必须了解他们的需求。例如,几乎所有最伟大的画作都是以人为主题的,因为人是人们感兴趣的。

同理心可能是优秀黑客和伟大黑客之间最重要的区别。有些黑客非常聪明,但说到同理心,他们几乎是唯我论者。这样的人很难设计出优秀的软件[5],因为他们无法从用户的角度看待问题。

判断一个人的同理心有多强的一个方法是观察他们如何向没有技术背景的人解释技术问题。我们可能都知道有些人虽然很聪明,但在这方面却很差劲。如果有人在晚宴上问他们什么是编程语言,他们会说“哦,高级语言是编译器用来生成目标代码的输入。”高级语言?编译器?目标代码?不知道编程语言是什么的人显然也不知道这些东西是什么。

软件必须完成的部分工作就是自我解释。因此,要编写出好的软件,你必须明白用户理解的程度有多低。他们会毫无准备地使用软件,软件最好按照他们的猜测运行,因为他们不会阅读手册。在这方面,我见过的最好的系统是 1985 年推出的 Macintosh。它做到了软件几乎从未做到的事情:它就是能运行。[6]

源代码也应该自我解释。如果我能让人们记住一句关于编程的名言,那一定是*《计算机程序的结构和解释》开头的那句话。*

程序应该是为了人们阅读而编写的,而仅仅偶然地供机器执行。

你不仅需要同情你的用户,还需要同情你的读者。这符合你的利益,因为你也会是他们中的一员。许多黑客编写了一个程序,但六个月后再回头看时,却发现他根本不知道它是如何工作的。我知道有几个人在这样的经历之后发誓不再使用 Perl。[7]

缺乏同理心与智力有关,甚至在某些地方还流行同理心。但我认为两者之间没有任何关联。你无需学习同理心就能在数学和自然科学方面取得好成绩,而这些领域的人往往很聪明,因此这两种品质就联系在一起了。但也有很多愚蠢的人缺乏同理心。只要听听那些打电话来询问脱口秀节目的人就知道了。他们问的问题总是拐弯抹角,主持人经常不得不为他们重新措辞。

那么,如果黑客的工作方式与绘画和写作一样,那它真的很酷吗?毕竟,生命只有一次。你不妨将生命用在一件伟大的事情上。

不幸的是,这个问题很难回答。声望总是有很大的时滞。就像来自遥远恒星的光。绘画之所以现在享有声望,是因为五百年前人们的伟大作品。当时,没有人认为这些画作像我们今天这样重要。乌尔比诺公爵费德里科·达·蒙特费尔特罗有一天会以皮耶罗·德拉·弗朗西斯卡中那个鼻子怪异的人而闻名,这在当时的人们看来很奇怪。

因此,虽然我承认黑客现在看起来并不像绘画那么酷,但我们应该记住,绘画本身在其辉煌时期并不像现在那么酷。

我们可以肯定地说,这是黑客的辉煌岁月。在大多数领域,伟大的工作都是在早期完成的。1430 年至 1500 年之间的绘画至今无人能及。莎士比亚的出现正值专业剧院诞生之时,

并将这种媒介推向了极致,以至于此后的每一位剧作家都不得不生活在他的阴影之下。阿尔布雷希特·杜勒对雕刻也做了同样的事情,简·奥斯汀对小说也做了同样的事情。

我们一次又一次地看到同样的模式。一种新媒介出现,人们对此非常兴奋,以至于他们在最初几代中探索了它的大部分可能性。黑客似乎现在正处于这个阶段。

在达芬奇的时代,绘画并不像他的作品那样酷。黑客行为到底有多酷,取决于我们能用这种新媒介做什么。

笔记

[1] 摄影对绘画最大的伤害或许是它毁掉了最好的日常工作。历史上大多数伟大的画家都是靠画肖像来养活自己的。

[2] 我听说微软不鼓励员工为开源项目做贡献,即使是在业余时间。但是现在很多最好的黑客都在为开源项目工作,所以这项政策的主要影响可能是确保他们无法聘请任何一流的程序员。

[3] 你在大学里学到的关于编程的知识很像你在书籍、衣服或约会方面学到的知识:你在高中时有哪些糟糕的品味。

[4] 以下是应用同理心的一个例子。在 Viaweb,如果我们无法在两个选项之间做出选择,我们会问,我们的竞争对手最讨厌什么?有一次,竞争对手在他们的软件中添加了一个基本上没用的功能,但由于这是他们拥有而我们没有的少数功能之一,他们就大肆宣传。我们本可以试着解释说这个功能没用,但我们认为,如果我们自己实现这个功能,我们的竞争对手会更恼火,所以那天下午我们拼凑了自己的版本。

[5] 除了文本编辑器和编译器。黑客不需要同理心来设计这些,因为他们自己就是普通用户。

[6] 嗯,差不多。内存有点超出了可用容量,导致磁盘交换非常不方便,不过这个问题可以在几个月内通过购买额外的磁盘驱动器来解决。

[7] 让程序易读的方法是不要在程序中塞满注释。我更进一步引用 Abelson 和 Sussman 的话。编程语言应该被设计用来表达算法,而不是偶然地告诉计算机如何执行算法。好的编程语言应该比英语更善于解释软件。只有当需要提醒读者注意某些临时问题时才需要注释,就像在道路上,只有在出现意外急转弯的部分才会有箭头一样。

感谢Trevor Blackwell、Robert Morris、Dan Giffin 和 Lisa Randall 阅读本文草稿,感谢 Henry Leitner 和 Larry Finkelstein 邀请我发言。