原文链接:https://www.paulgraham.com/hp.html

(本文摘自保罗·格雷厄姆在哈佛大学的一次客座讲座,该讲座包含了他早些时候在美国东北大学的演讲。)

当我在计算机科学研究生院毕业后,我去艺术学院学习绘画。很多人似乎对一个对计算机感兴趣的人也对绘画感兴趣感到惊讶。他们似乎认为黑客和画家是两种非常不同的工作类型——认为黑客是冷静、精确和有条理的,而绘画是某种原始冲动的狂热表达。

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

黑客和画家的共同之处在于他们都是创造者。和作曲家、建筑师和作家一样,黑客和画家试图做的是创造出好的东西。他们不是在进行研究本身,尽管如果在尝试创造出好的东西的过程中他们发现了某种新技术,那就更好了。

我一直不喜欢“计算机科学”这个词。我不喜欢它的主要原因是,根本就没有这样的东西。计算机科学是由历史上偶然事件而结合在一起的松散相关领域的大杂烩,就像南斯拉夫一样。在一端,有些人实际上是数学家,但他们把他们正在做的事情称为计算机科学,这样他们就可以获得DARPA的资助。在中间,有些人正在研究类似计算机的自然历史——例如,研究通过网络路由数据的算法的行为。然后在另一个极端,有黑客,他们试图编写有趣的软件,对他们来说,计算机只是一种表达媒介,就像混凝土对建筑师或油漆对画家一样。就好像数学家、物理学家和建筑师都必须在同一个系里一样。

有时黑客所做的事情被称为“软件工程”,但这个术语同样具有误导性。优秀的软件设计师并不比建筑师更像工程师。建筑和工程之间的界限并没有明确定义,但它确实存在。它介于做什么和怎么做之间:建筑师决定做什么,工程师弄清楚如何去做。不应该过于分开什么和怎么做。如果你试图在不理解如何做的情况下决定做什么,你就在自找麻烦。但是黑客当然可以不仅仅是决定如何实现某个规范。在最好的情况下,它是在创建规范——尽管结果表明,做到这一点的最佳方式是去实现它。

也许有一天“计算机科学”会像南斯拉夫一样被拆分成它的组成部分。这可能是件好事。特别是如果它意味着我的故乡,黑客,能够获得独立。

将所有这些不同类型的工作捆绑在一个系里在行政上可能很方便,但在智力上是令人困惑的。这就是我不喜欢“计算机科学”这个名字的另一个原因。可以说,中间的人正在做一些类似实验科学的事情。但是两端的人,黑客和数学家,实际上并没有在做科学。

数学家似乎并不在意这一点。他们愉快地开始证明定理,就像数学系的其他数学家一样,可能很快就不再注意到他们工作的大楼外面写着“计算机科学”。但对黑客来说,这个标签是个问题。如果他们所做的事情被称为科学,那会让他们觉得他们应该表现得像科学家一样。

所以,与其做他们真正想做的事情,即设计漂亮的软件,大学和研究实验室里的黑客觉得他们应该写研究论文。在最好的情况下,论文只是一种形式。黑客编写很酷的软件,然后写一篇关于它的论文,论文成为了软件所代表成就的代理。但通常这种不匹配会引起问题。很容易从构建美好事物转向构建更适合作为研究论文主题的丑陋事物。

不幸的是,美好事物并不总是成为论文的最佳主题。首先,研究必须是原创的——正如任何写过博士论文的人都知道,确保你正在探索处女地的方法是划定一块没有人想要的地方。其次,研究必须是实质性的——尴尬的系统会产生更丰富的论文,因为你可以写关于你为了完成事情而必须克服的障碍。没有什么比从错误的假设开始更能产生棘手的问题了。大部分人工智能都是这个规则的例子;如果你假设知识可以被表示为一个命题逻辑表达式的列表,其中参数代表抽象概念,你就会有很多论文要写关于如何让它奏效。就像里基·里卡多常说的,“露西,你得解释很多。”

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

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

衡量黑客实际试图做的事情,设计漂亮的软件,会更加困难。你需要良好的设计感来判断好的设计。而且,人们能够认识到好的设计的能力与他们自信能够做到这一点的信心之间没有相关性,可能只有一个负面的相关性。

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

我认为黑客只能接受他们的声誉中有很大一部分是随机的。在这方面,他们与其他创造者没有什么不同。事实上,相比之下,他们是幸运的。时尚的影响在黑客领域不像在绘画中那么大。

比让人们误解你的作品更糟糕的事情是你自己误解了自己的作品。相关领域是你寻找灵感的地方。如果你发现自己身处计算机科学系,很自然地就会倾向于相信,比如,黑客是理论计算机科学理论的应用版本。在我整个研究生学习期间,我心中一直有一种不舒服的感觉,那就是我应该了解更多的理论,我在期末考试后三周内忘记了所有那些知识是非常疏忽的。

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

我发现,最好的想法来源不是其他有“计算机”这个词的领域,而是其他创造者所在的领域。绘画比计算理论提供了更丰富的思想来源。

例如,我在大学被教导,在甚至靠近计算机之前,应该在纸上完全弄清楚一个程序。我发现我不是这样编程的。我发现我喜欢坐在计算机前编程,而不是一张纸前。更糟糕的是,我没有耐心地写出一个完整的程序并确信它是正确的,而是倾向于只是吐出代码,这些代码是无可救药地破损的,并逐渐将其塑造成形。调试,我被教导,是一种最后的通过,你在那里捕捉到打字错误和疏忽。按照我工作的方式,似乎编程由调试组成。

很长一段时间,我为此感到难过,就像我曾经因为没有按照他们在小学教我的方式握铅笔而感到难过一样。如果我看看其他创造者,画家或建筑师,我会意识到有名字来形容我正在做的事情:素描。据我所知,他们在大学教我编程的方式都是错误的。你应该在编写程序时弄清楚程序,就像作家、画家和建筑师一样。

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

当我们谈论静态类型时,与创造者认同将使我们免受另一个困扰科学的问题:数学羡慕。每个在科学领域的人都秘密地认为数学家比他们更聪明。我认为数学家也相信这一点。总之,结果是科学家倾向于使他们的工作尽可能看起来像数学。在像物理这样的领域,这可能没有太大的伤害,但你越远离自然科学,问题就越大。

一页公式看起来就是令人印象深刻。(提示:为了额外的印象深刻,请使用希腊变量。)所以有一种很大的诱惑去研究你可以正式处理的问题,而不是比如说重要的问题。

如果黑客与其他创造者,如作家和画家认同,他们就不会感到诱惑去这样做。作家和画家不会遭受数学羡慕。他们感觉他们正在做一些完全无关的事情。所以,我认为黑客也是。

如果大学和研究实验室阻止黑客做他们想做的工作,也许他们的归属是在公司。不幸的是,大多数公司也不会让黑客做他们想做的。大学和研究实验室迫使黑客成为科学家,公司迫使他们成为工程师。

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

这似乎是大公司的默认计划。他们这样做是因为它降低了结果的标准差。只有一小部分黑客能够真正设计软件,对于经营公司的人来说,很难挑选出这些人。所以与其将软件的未来托付给一个杰出的黑客,大多数公司将事情设置为由委员会设计,黑客只是实现设计。

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

所以如果你能找到一种方法,与一个足够大的公司进行设计战争,它的软件是由产品经理设计的,他们永远无法跟上你。这些机会不容易找到。很难让大公司参与设计战争,就像很难让城堡内的对手进行肉搏战一样。例如,写一个比微软Word更好的文字处理器可能很容易,但是微软,在他们的操作系统垄断堡垒内,可能甚至不会注意到你做了。

设计战争的战场应该在新市场,那里还没有人设防。在这些地方,你可以通过大胆的设计方法,让同一批人既设计又实现产品,从而获得巨大的胜利。微软自己在开始时就是这样做的。苹果和惠普也是如此。我怀疑几乎每个成功的初创公司都是如此。

所以,构建伟大软件的一种方式是创办自己的初创公司。然而,这有两个问题。一是在初创公司中,除了编写软件之外,你还需要做很多事情。在Viaweb,如果我觉得我有四分之一的时间在黑客,我就觉得自己很幸运。我必须做的其他事情从乏味到可怕都有。我有一个基准,因为我曾不得不离开董事会会议去填补一些蛀牙。我记得坐在牙医的椅子上,等待钻头,感觉像是在度假。

初创公司的另一个问题是,赚钱的软件和有趣的软件类型之间没有太多重叠。编程语言编写起来很有趣,微软的第一个产品实际上是一个,但现在没有人会为编程语言付费。如果你想赚钱,你往往会被迫去解决那些没有人愿意免费解决的棘手问题。

所有创造者都面临这个问题。价格由供求关系决定,对于有趣工作的需求并不像解决个别客户的平凡问题那样大。在百老汇外的剧目中演出并不像在某个贸易展览会的摊位上穿猩猩服那样赚钱。写小说并不像为垃圾处理机写广告文案那样赚钱。同样,黑客编程语言并不像找出如何将某家公司的遗留数据库连接到他们的Web服务器那样赚钱。

我认为,对于软件来说,解决这个问题的答案是一个对几乎所有创造者都已知的概念:日常工作。这个词最初来自音乐家,他们在晚上演出。更普遍地,这意味着你有一种工作是为了赚钱,另一种工作是为了爱好。

几乎所有创造者在他们职业生涯的早期都有日常工作。画家和作家出了名地有。如果你幸运的话,你可以找到一份与你真正工作密切相关的日常工作。音乐家经常在唱片店工作。一个在某些编程语言或操作系统上工作的黑客也许也能在日常工作中使用它。1

当我说答案就是让黑客有日常工作,并在业余时间开发漂亮的软件时,我不是在提出一个新想法。这就是开源黑客工作的全部。我要说的是,开源可能是正确的模式,因为它已经得到了所有其他创造者的独立确认。

对我来说,似乎任何雇主都会不愿意让黑客参与开源项目,这令人惊讶。在Viaweb,我们不愿意雇佣那些不参与的人。当我们面试程序员时,我们最关心的是他们在业余时间写了什么软件。你不能真正做好任何事情,除非你爱它,如果你喜欢黑客,你将不可避免地在业余时间工作在自己的项目上。2

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

我们可以从绘画的例子中学习或至少确认的一件事是如何学习黑客。你主要是通过实践来学习绘画。对于黑客也是如此。大多数黑客不是通过大学编程课程来学习黑客的。他们在十三岁时通过编写自己的程序来学习黑客。即使在大学课程中,你主要是通过黑客来学习黑客。3

因为画家留下了工作的痕迹,你可以通过实践来观察他们的学习过程。如果你按时间顺序看一个画家的作品,你会发现每幅画都建立在以前学到的东西上。当一幅画中有什么东西运作得非常好时,你通常可以在早期的画作中找到它的1.0版本,以较小的形式出现。

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

黑客通过实践学习黑客的事实是黑客与科学不同的又一迹象。科学家不是通过实践来学习科学,而是通过做实验室和问题集。科学家从一开始就做完美的工作,从某种意义上说,他们只是试图复制别人已经为他们完成的工作。最终,他们达到了可以做原创工作的地步。而黑客,从一开始就在做原创工作;只是非常糟糕。所以黑客从原创开始,变得优秀,科学家从优秀开始,变得原创。

另一种创造者学习的方式是通过例子。对于画家来说,博物馆是技术的参考书库。几百年来,模仿伟大大师的作品一直是画家传统教育的一部分,因为模仿迫使你仔细观察画作的制作方式。

作家也这样做。本杰明·富兰克林通过总结艾迪生和斯蒂尔的散文要点,然后尝试复制它们来学习写作。雷蒙德·钱德勒也用侦探故事做了同样的事情。

同样,黑客也可以通过查看好的程序来学习编程——不仅仅是它们做什么,还有源代码。开源运动不太宣传的好处之一是它使学习编程变得更容易。当我学习编程时,我们主要依赖书籍中的例子。当时唯一大量可用的代码是Unix,但即使这个也不是开源的。大多数人阅读的源代码是约翰·莱昂斯的书的非法影印本,尽管它是在1977年写的,直到1996年才被允许出版。

我们可以从绘画中得到的另一个例子是画作是如何通过逐步改进而创造出来的。画作通常以素描开始。细节逐渐填充进去。但这不仅仅是填充的过程。有时,最初的计划结果是错误的。无数的画作,当你在X光下看它们时,会发现肢体被移动或面部特征被重新调整。

这里有一个我们可以从绘画中学到的地方。我认为黑客也应该这样工作。不切实际的是期望程序的规范会是完美的。你最好提前承认这一点,并编写程序,允许规范在过程中改变。

(大公司的组织结构使得它们很难做到这一点,所以这里又是初创公司的优势之一。)

现在,我想大家都应该对过早优化的危险有所了解。我认为我们应该同样担心过早的设计——过早决定程序应该做什么。

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

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

但列奥纳多不是这样。他在画作的一部分工作的努力程度根本不取决于他预期别人会多仔细地看它。他就像迈克尔·乔丹。无情的。

无情会赢,因为总的来说,看不见的细节会变得可见。当人们走过吉内薇拉·德·本奇的肖像时,他们的注意力通常立即被它吸引,甚至在他们看到标签并注意到它说列奥纳多·达·芬奇之前。所有这些看不见的细节结合起来产生了一些令人惊叹的东西,就像一千个几乎听不见的声音都在调上唱歌。

同样,伟大的软件需要对美有狂热的奉献。如果你深入好的软件,你会发现没有人应该看到的部分也是美丽的。我不是说我自己写伟大的软件,但我知道,当涉及到代码时,如果我以同样的方式对待日常生活,我的行为方式将使我有资格获得处方药。看到缩进严重或使用丑陋的变量名称的代码让我发疯。

如果黑客只是一个实现者,将规范转化为代码,那么他可以像挖沟一样从头到尾工作。但如果黑客是创造者,我们就必须考虑到灵感。

在黑客工作中,像绘画一样,工作是周期性的。有时你对某个新项目感到兴奋,你想一天工作十六个小时。其他时候,似乎没有什么有趣的。

想做好的工作,你必须考虑这些周期,因为它们受到你对它们的反应的影响。当你在山上驾驶一辆手动档汽车时,有时你必须稍微放松离合器以避免熄火。同样地,放松可以防止雄心壮志熄火。在绘画和黑客工作中,有一些任务是非常有雄心的,而另一些则是令人放心的日常事务。保存一些简单任务是一个好主意,以防你否则会熄火。

在黑客工作中,这可以字面意思是保存错误。我喜欢调试:这是黑客工作唯一一次像人们认为的那样直接。你有一个完全受限的问题,你所要做的就是解决它。你的程序应该做x。但它做了y。它在哪里出错了?你知道你最终会赢。这就像粉刷墙壁一样放松。

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

据我所知,当画家在一幅画上合作时,他们从不在同一个地方工作。通常让大师画主要人物,助手画其他人物和背景。但你从来没有一个人在另一个人的工作上画画。

我认为这是软件合作的正确模型。不要推得太远。当一段代码被三四个不同的人编写,没有人真正拥有它,它最终会像一个公共休息室。它往往会感觉凄凉和被遗弃,并积累杂物。我认为正确的合作方式是将项目划分为明确定义的模块,每个模块都有明确的所有者,并且它们之间的接口被设计得非常仔细,如果可能的话,像编程语言一样明确。

像绘画一样,大多数软件旨在面向人类观众。因此,黑客像画家一样,必须具有同情心才能做出真正伟大的工作。你必须能够从用户的角度来看问题。

当我还是个孩子的时候,我总是被告知要从别人的角度来看问题。在实践中,这通常意味着做别人想要的,而不是我想要的。这当然给同理心带来了不好的名声,我特意不去培养它。

我错了。事实证明,从别人的角度来看问题是成功的秘密。这并不一定意味着要自我牺牲。远非如此。理解别人如何看待事情并不意味着你会为了他的利益而行动;在某些情况下——比如在战争中——你可能想做完全相反的事情。4

大多数创造者为人类观众创造东西。为了吸引观众,你必须明白他们需要什么。几乎所有最伟大的画作都是人物画,因为人们对人物感兴趣。

同情心可能是一个好的黑客和一个伟大的黑客之间最重要的区别。一些黑客非常聪明,但在同理心方面实际上是唯我论者。对于这样的人很难设计出伟大的软件5,因为他们不能从用户的角度来看问题。

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

软件的部分工作是自我解释。所以要编写好的软件,你必须理解用户了解得有多有限。他们会毫无准备地走到软件面前,它最好做他们猜测的事情,因为他们不会去读手册。我见过的最好的系统在这方面是1985年的原始Macintosh。它做到了软件几乎从不做的事情:它只是工作。6

源代码也应该自我解释。如果我能让人们对编程记住一句引用,那就是**《计算机程序的结构与解释》**开头的那一句。

程序应该为人们编写,只是顺便让机器执行。

你需要对你的用户和你的读者都有同理心。这符合你的利益,因为你将是他们中的一员。许多黑客编写了一个程序,结果在六个月后回来时,他们不知道它是如何工作的。我知道几个人在经历了这样的经历后发誓不再使用Perl。7

缺乏同理心与智力有关,以至于在某些地方甚至有这样一种时尚。但我不认为这两者之间有任何相关性。你可以在数学和自然科学上做得很好,而不必学习同理心,而这些领域的人们往往很聪明,所以这两种品质已经联系在一起。但也有很多愚蠢的人不擅长同理心。只要听听那些在脱口秀上打电话提问的人。他们以如此绕弯子的方式提问,以至于主持人经常不得不为他们重述问题。

所以,如果黑客工作像绘画和写作一样工作,它是否也一样酷?毕竟,你只有一次生命。你最好把它花在做一些伟大的事情上。

不幸的是,这个问题很难回答。声望总是有很大的时间滞后。这就像来自遥远星星的光。绘画现在有声望,因为人们在五百年前做的伟大的工作。当时,没有人认为这些画作像我们今天认为的那样重要。当时人们会认为费德里科·达·蒙特费尔特罗,乌尔比诺公爵,将来主要因为他在皮耶罗·德拉·弗朗切斯卡的一幅画中奇怪的鼻子而被人们记住,这似乎非常奇怪。

所以虽然我承认黑客工作现在似乎不像绘画那么酷,但我们应该记住,绘画本身在它的辉煌时期并不像现在看起来那么酷。

我们可以相当肯定地说,这些是黑客工作的辉煌日子。在大多数领域,伟大的工作都是在早期完成的。1430年到1500年间创作的画作至今仍未被超越。莎士比亚出现在职业剧院刚刚诞生的时候,他把媒介推向了如此之远,以至于此后的每个剧作家都不得不生活在他的阴影下。阿尔布雷希特·丢勒用版画做了同样的事情,简·奥斯汀用小说也做了同样的事情。

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

绘画在列奥纳多的时代并不像他的工作使它变得那样酷。黑客工作最终变得多么酷将取决于我们能用这个新媒介做什么。

感谢:

特雷弗·布莱克威尔、罗伯特·莫里斯、丹·吉芬和丽莎·兰德尔阅读了这篇文章的草稿,感谢亨利·莱特纳和拉里·芬克尔斯坦邀请我演讲。


  1. 摄影对绘画造成的最大损害可能是它杀死了最好的日常工作。历史上大多数伟大的画家都是通过画肖像来养活自己的。 ↩︎

  2. 有人告诉我微软不鼓励员工在业余时间参与开源项目。但现在这么多最好的黑客都在开源项目上工作,这项政策的主要效果可能是确保他们无法雇佣任何一流的程序员。 ↩︎

  3. 你在大学中学到的关于编程的知识就像你学到的关于书籍、衣服或约会的知识一样:你在高中时的糟糕品味。 ↩︎

  4. 这里是一个应用同理的例子。在Viaweb,如果我们不能在两个选择之间做出决定,我们会问,我们的竞争者最恨什么?有一次,一个竞争者在他们的软件中增加了一个基本上无用的功能,但因为这是他们拥有的少数我们没有的功能之一,他们在贸易媒体中大肆宣传。我们本可以尝试解释这个功能是无用的,但我们决定如果我们自己实现它会更让我们的竞争者烦恼,所以我们那天下午就匆忙制作了我们自己的版本。 ↩︎

  5. 除了文本编辑器和编译器。黑客不需要同理来设计这些,因为他们自己是典型用户。 ↩︎

  6. 嗯,几乎。他们稍微超出了可用的RAM,导致很多不便的磁盘交换,但这可以通过在几个月内购买额外的磁盘驱动器来解决。 ↩︎

  7. 使程序易于阅读的方法不是用注释填充它们。我会更进一步引用阿贝尔森和萨斯曼的话。编程语言应该被设计来表达算法,只是顺便告诉计算机如何执行它们。一个好的编程语言应该比英语更适合解释软件。你只在需要警告读者一些需要临时解决方案的地方时才需要注释,就像在路上只有意外急转弯的地方才有箭头一样。 ↩︎