← Paul Graham

Hackers and Painters

黑客和画家
 ·  Paul Graham  ·  原文

May 2003 (This essay is derived from a guest lecture at Harvard, which incorporated an earlier talk at Northeastern.) When I finished grad school in computer science I went to art school to study painting.

2003 年 5 月(这篇文章摘自哈佛大学的一次客座演讲,其中包含了之前在东北大学的一次演讲。)当我完成计算机科学研究生学业后,我去了艺术学校学习绘画。

A lot of people seemed surprised that someone interested in computers would also be interested in painting.

很多人似乎很惊讶对计算机感兴趣的人也会对绘画感兴趣。

They seemed to think that hacking and painting were very different kinds of work-- that

他们似乎认为黑客和绘画是非常不同的工作——

hacking was cold, precise, and methodical, and that painting was the frenzied expression of some primal urge.

黑客攻击是冷酷、精确和有条不紊的,而那幅画是某种原始冲动的疯狂表达。

Both of these images are wrong.

这两个图像都是错误的。

Hacking and painting have a lot in common.

黑客和绘画有很多共同点。

In fact, of all the different types of people I've known, hackers and painters are among the most alike.

事实上,在我认识的所有不同类型的人中,黑客和画家是最相似的。

What hackers and painters have in common is that they're both makers.

黑客和画家的共同点是他们都是创造者。

Along with composers, architects, and writers,

与作曲家、建筑师和作家一起,

what hackers and painters are trying to do is make good things.

黑客和画家正在努力做的是创造美好的事物。

They're not doing research per se, though if in the course of trying to make good things they discover some new technique, so much the better.

他们本身并没有进行研究,但如果在尝试制造好东西的过程中他们发现了一些新技术,那就更好了。

I've never liked the term "computer science." The main reason I don't like it is that there's no such thing.

我从来不喜欢“计算机科学”这个词。我不喜欢它的主要原因是根本不存在这样的东西。

Computer science is a grab bag of tenuously related areas thrown together by an accident of history, like Yugoslavia.

计算机科学是一个由历史偶然事件拼凑在一起的脆弱相关领域的集合体,就像南斯拉夫一样。

At one end you have people who are really mathematicians, but call what they're doing computer science so they can get DARPA grants.

一方面,人们实际上是数学家,但将他们正在做的事情称为计算机科学,这样他们就可以获得 DARPA 的资助。

In the middle you have people working on something like the natural history of computers-- studying the behavior of algorithms for routing data through networks, for example.

在中间,人们致力于计算机自然历史之类的研究,例如研究通过网络路由数据的算法的行为。

And then at the other extreme you have the hackers, who are trying to write interesting software, and for whom computers are just a

然后在另一个极端,你有黑客,他们试图编写有趣的软件,而对他们来说,计算机只是一个工具。

medium of expression, as concrete is for architects or paint for painters.

表达媒介,就像建筑师之于混凝土或画家之于油漆一样。

It's as if mathematicians, physicists, and architects all had to be in the same department.

就好像数学家、物理学家和建筑师都必须在同一个部门。

Sometimes what the hackers do is called "software engineering," but this term is just as misleading.

有时,黑客所做的事情被称为“软件工程”,但这个术语同样具有误导性。

Good software designers are no more engineers than architects are.

优秀的软件设计师与建筑师一样都是工程师。

The border between architecture and engineering is not sharply defined, but it's there.

建筑和工程之间的界限并不明确,但它确实存在。

It falls between what and how: architects decide what to do, and engineers figure out how to do it.

它介于做什么和如何做之间:建筑师决定做什么,工程师弄清楚如何做。

What and how should not be kept too separate.

什么和如何不应该太过分开。

You're asking for trouble if you try to decide what to do without understanding how to do it.

如果你试图在不了解如何做的情况下决定做什么,那么你就是在自找麻烦。

But hacking can certainly be more than just deciding how to implement some spec.

但黑客攻击肯定不仅仅是决定如何实现某些规范。

At its best, it's creating the spec-- though it turns out the best way to do that is to implement it.

最好的情况是,它正在创建规范——尽管事实证明最好的方法就是实现它。

Perhaps one day "computer science" will, like Yugoslavia, get broken up into its component parts.

也许有一天“计算机科学”会像南斯拉夫一样被分解成它的各个组成部分。

That might be a good thing.

这可能是一件好事。

Especially if it meant independence for my native land, hacking.

尤其是如果这意味着我的祖国的独立,黑客。

Bundling all these different types of work together in one department may be convenient administratively, but it's confusing intellectually.

将所有这些不同类型的工作捆绑在一个部门可能在管理上很方便,但在智力上却令人困惑。

That's the other reason I don't like the name "computer science." Arguably the people in the middle are doing

这是我不喜欢“计算机科学”这个名字的另一个原因。可以说中间的人正在做

something like an experimental science.

类似实验科学的东西。

But the people at either end, the hackers and the mathematicians, are not actually doing science.

但两端的人,即黑客和数学家,实际上并没有在从事科学研究。

The mathematicians don't seem bothered by this.

数学家们似乎并不为此烦恼。

They happily set to work proving theorems like the other mathematicians over in the math department, and probably soon stop noticing that the building they work in says ``computer science'' on the outside.

他们很高兴地像数学系的其他数学家一样开始证明定理,并且可能很快就会不再注意到他们工作的大楼外面写着“计算机科学”。

But for the hackers this label is a problem.

但对于黑客来说,这个标签是一个问题。

If what they're doing is called science, it makes them feel they ought to be acting scientific.

如果他们所做的事情被称为科学,那么他们就会觉得自己应该表现得科学。

So instead of doing what they really want to do, which is to design beautiful software, hackers in universities and research labs feel they ought to be writing research papers.

因此,大学和研究实验室的黑客认为他们应该写研究论文,而不是做他们真正想做的事情,即设计漂亮的软件。

In the best case, the papers are just a formality.

在最好的情况下,论文只是一种形式。

Hackers write cool software, and then write a paper about it, and the paper becomes a proxy for the achievement represented by the software.

黑客编写很酷的软件,然后写一篇关于它的论文,这篇论文就成为该软件所代表的成就的代理。

But often this mismatch causes problems.

但这种不匹配常常会导致问题。

It's easy to drift away from building beautiful things toward building ugly things that make more suitable subjects for research papers.

人们很容易从建造漂亮的东西转向建造丑陋的东西,从而成为更适合研究论文的主题。

Unfortunately, beautiful things don't always make the best subjects for papers.

不幸的是,美丽的事物并不总是成为论文的最佳主题。

Number one, research must be original-- and as anyone who has written a PhD dissertation knows, the way to be sure that you're exploring virgin territory is to stake

第一,研究必须是原创的——任何写过博士论文的人都知道,确保你正在探索处女地的方法是赌注

out a piece of ground that no one wants.

开辟出一块没人想要的土地。

Number two, research must be substantial-- and awkward systems yield meatier papers, because you can write about the obstacles you have to overcome in order to get things done.

第二,研究必须是实质性的——笨拙的系统会产生更丰富的论文,因为你可以写下为了完成任务而必须克服的障碍。

Nothing yields meaty problems like starting with the wrong assumptions.

没有什么比从错误的假设开始更容易产生严重问题的了。

Most of AI is an example of this rule; if you assume that knowledge can be represented as a list of predicate logic expressions whose arguments represent

大多数人工智能都是这个规则的一个例子;如果您假设知识可以表示为谓词逻辑表达式列表,其参数表示

abstract concepts, you'll have a lot of papers to write about how to make this work.

抽象概念,你将有很多论文要写关于如何实现这项工作。

As Ricky Ricardo used to say, "Lucy, you got a lot of explaining to do." The way to create something beautiful is often to make subtle tweaks to something that already exists, or to combine existing ideas in a slightly new way.

正如瑞奇·里卡多(Ricky Ricardo)常说的:“露西,你有很多解释要做。”创造美丽事物的方法通常是对已经存在的事物进行微妙的调整,或者以稍微新的方式结合现有的想法。

This kind of work is hard to convey in a research paper.

这种工作很难在研究论文中表达出来。

So why do universities and research labs continue to judge

那么为什么大学和研究实验室继续评判

hackers by publications?

黑客通过出版物?

For the same reason that "scholastic aptitude" gets measured by simple-minded standardized tests, or the productivity of programmers gets measured in lines of code.

出于同样的原因,“学术能力”是通过简单的标准化测试来衡量的,或者程序员的生产力是通过代码行来衡量的。

These tests are easy to apply, and there is nothing so tempting as an easy test that kind of works.

这些测试很容易应用,而且没有什么比简单有效的测试更有吸引力的了。

Measuring what hackers are actually trying to do, designing beautiful software, would be much more difficult.

衡量黑客实际上想要做什么、设计漂亮的软件将会困难得多。

You need

你需要

a good sense of design to judge good design .

良好的设计意识来判断优秀的设计。

And there is no correlation, except possibly a negative one, between people's ability to recognize good design and their confidence that they can.

人们识别优秀设计的能力和他们对自己能够识别优秀设计的信心之间不存在任何相关性,除了可能存在负相关之外。

The only external test is time.

唯一的外部考验就是时间。

Over time, beautiful things tend to thrive, and ugly things tend to get discarded.

随着时间的推移,美丽的事物往往会蓬勃发展,而丑陋的事物往往会被丢弃。

Unfortunately, the amounts of time involved can be longer than human lifetimes.

不幸的是,所涉及的时间可能比人的寿命还要长。

Samuel Johnson

塞缪尔·约翰逊

said it took a hundred years for a writer's reputation to converge.

据说一个作家的声誉需要一百年才能收敛。

You have to wait for the writer's influential friends to die, and then for all their followers to die.

你必须等待作家有影响力的朋友去世,然后等待他们所有的追随者去世。

I think hackers just have to resign themselves to having a large random component in their reputations.

我认为黑客只能接受他们的声誉中存在很大的随机成分。

In this they are no different from other makers.

在这一点上,他们与其他制造商没有什么不同。

In fact, they're lucky by comparison.

事实上,相比之下,他们还是幸运的。

The influence of fashion is not nearly so great in hacking as it

时尚对黑客的影响远没有它那么大

is in painting.

是在绘画中。

There are worse things than having people misunderstand your work.

有比人们误解你的工作更糟糕的事情。

A worse danger is that you will yourself misunderstand your work.

更严重的危险是你自己会误解你的工作。

Related fields are where you go looking for ideas.

相关领域是您寻找想法的地方。

If you find yourself in the computer science department, there is a natural temptation to believe, for example, that hacking is the applied version of what theoretical computer science is the theory of.

例如,如果您发现自己在计算机科学系,那么您很自然地会相信,黑客攻击是理论计算机科学理论的应用版本。

All

全部

the time I was in graduate school I had an uncomfortable feeling in the back of my mind that I ought to know more theory, and that it was very remiss of me to have forgotten all that stuff within three weeks of the final exam.

当我读研究生的时候,我内心深处有一种不舒服的感觉,我应该了解更多的理论,而我在期末考试后的三周内就忘记了所有这些东西,这真是我的失职。

Now I realize I was mistaken.

现在我意识到我错了。

Hackers need to understand the theory of computation about as much as painters need to understand paint chemistry.

黑客需要了解计算理论,就像画家需要了解油漆化学一样。

You need to know how to calculate time and

你需要知道如何计算时间和

space complexity and about Turing completeness.

空间复杂度和图灵完备性。

You might also want to remember at least the concept of a state machine, in case you have to write a parser or a regular expression library.

您可能还想至少记住状态机的概念,以防您必须编写解析器或正则表达式库。

Painters in fact have to remember a good deal more about paint chemistry than that.

事实上,油漆工必须记住的有关油漆化学的知识远不止这些。

I've found that the best sources of ideas are not the other fields that have the word "computer" in their names, but the other fields inhabited by makers.

我发现最好的创意来源不是其他名称中带有“计算机”一词的领域,而是其他创客占据的领域。

Painting has been a much richer source of ideas than the theory of computation.

绘画是比计算理论更丰富的思想来源。

For example, I was taught in college that one ought to figure out a program completely on paper before even going near a computer.

例如,我在大学时就被教导,在接近计算机之前,应该完全在纸上弄清楚一个程序。

I found that I did not program this way.

我发现我不是这样编程的。

I found that I liked to program sitting in front of a computer, not a piece of paper.

我发现我喜欢坐在电脑前编程,而不是一张纸。

Worse still, instead of patiently writing out a complete program

更糟糕的是,没有耐心写出完整的程序

and assuring myself it was correct, I tended to just spew out code that was hopelessly broken, and gradually beat it into shape.

为了向自己保证这是正确的,我倾向于只是吐出毫无希望地被破坏的代码,然后逐渐将其完善。

Debugging, I was taught, was a kind of final pass where you caught typos and oversights.

我被教导说,调试是最后一道关卡,你可以在其中发现拼写错误和疏忽。

The way I worked, it seemed like programming consisted of debugging.

从我的工作方式来看,编程似乎就是由调试组成的。

For a long time I felt bad about this, just as I once felt bad that I didn't hold my pencil the way they taught me

很长一段时间我对此感到难过,就像我曾经因为没有按照他们教我的方式握笔而感到难过一样

to in elementary school.

到小学。

If I had only looked over at the other makers, the painters or the architects, I would have realized that there was a name for what I was doing: sketching.

如果我只观察其他制作者、画家或建筑师,我就会意识到我正在做的事情有一个名字:素描。

As far as I can tell, the way they taught me to program in college was all wrong.

据我所知,他们在大学教我编程的方式是完全错误的。

You should figure out programs as you're writing them, just as writers and painters and architects do.

你应该在编写程序时弄清楚它们,就像作家、画家和建筑师一样。

Realizing this has real implications for software design.

认识到这一点对软件设计具有真正的意义。

It means that a programming language should, above all, be malleable.

这意味着编程语言首先应该是可塑的。

A programming language is for thinking of programs, not for expressing programs you've already thought of.

编程语言是用来思考程序的,而不是用来表达你已经想到的程序的。

It should be a pencil, not a pen.

它应该是一支铅笔,而不是一支钢笔。

Static typing would be a fine idea if people actually did write programs the way they taught me to in college.

如果人们真的按照他们在大学教我的方式编写程序,那么静态类型将是一个好主意。

But that's not how any of the hackers I know write programs.

但我认识的黑客都不是这样编写程序的。

We need a language that lets us

我们需要一种语言,让我们

scribble and smudge and smear, not a language where you have to sit with a teacup of types balanced on your knee and make polite conversation with a strict old aunt of a compiler.

潦草、涂抹和涂抹,而不是一种你必须坐在膝盖上、膝盖上放着一个类型的茶杯、与一位严格的编译器老阿姨进行礼貌交谈的语言。

While we're on the subject of static typing, identifying with the makers will save us from another problem that afflicts the sciences: math envy.

当我们讨论静态类型的主题时,认同制造者将使我们摆脱另一个困扰科学的问题:数学嫉妒。

Everyone in the sciences secretly believes that mathematicians are smarter than they are.

科学界的每个人都暗自相信数学家比他们更聪明。

I think mathematicians also believe this.

我想数学家也相信这一点。

At any rate, the result is that scientists tend to make their work look as mathematical as possible.

无论如何,结果是科学家倾向于让他们的工作看起来尽可能数学化。

In a field like physics this probably doesn't do much harm, but the further you get from the natural sciences, the more of a problem it becomes.

在像物理学这样的领域,这可能不会造成太大伤害,但你离自然科学越远,它就越成为一个问题。

A page of formulas just looks so impressive.

一页的公式看起来令人印象深刻。

(Tip: for extra impressiveness, use Greek variables.) And so there is a great temptation to work on problems you

(提示:为了更令人印象深刻,请使用希腊变量。)因此,解决您所遇到的问题存在很大的诱惑。

can treat formally, rather than problems that are, say, important.

可以正式地处理问题,而不是重要的问题。

If hackers identified with other makers, like writers and painters, they wouldn't feel tempted to do this.

如果黑客认同其他创作者,比如作家和画家,他们就不会愿意这样做。

Writers and painters don't suffer from math envy.

作家和画家不会遭受数学嫉妒。

They feel as if they're doing something completely unrelated.

他们感觉好像自己在做一些完全不相关的事情。

So are hackers, I think.

我认为黑客也是如此。

If universities and research labs keep hackers from doing the kind of work they want to do,

如果大学和研究实验室阻止黑客做他们想做的事情,

perhaps the place for them is in companies.

也许他们的位置是在公司。

Unfortunately, most companies won't let hackers do what they want either.

不幸的是,大多数公司也不会让黑客为所欲为。

Universities and research labs force hackers to be scientists, and companies force them to be engineers.

大学和研究实验室迫使黑客成为科学家,公司迫使他们成为工程师。

I only discovered this myself quite recently.

我最近才发现这一点。

When Yahoo bought Viaweb, they asked me what I wanted to do.

当雅虎收购 Viaweb 时,他们问我想做什么。

I had never liked the business side very much, and said that I just wanted to

我一直不太喜欢商业方面,并说我只是想

hack.

黑客。

When I got to Yahoo, I found that what hacking meant to them was implementing software, not designing it.

当我到达雅虎时,我发现黑客对他们来说意味着实现软件,而不是设计它。

Programmers were seen as technicians who translated the visions (if that is the word) of product managers into code.

程序员被视为将产品经理的愿景(如果这是这个词的话)转化为代码的技术人员。

This seems to be the default plan in big companies.

这似乎是大公司的默认计划。

They do it because it decreases the standard deviation of the outcome.

他们这样做是因为它减少了结果的标准偏差。

Only a small percentage of hackers can actually design software,

只有一小部分黑客能够真正设计软件,

and it's hard for the people running a company to pick these out.

对于经营公司的人来说很难挑选出这些。

So instead of entrusting the future of the software to one brilliant hacker, most companies set things up so that it is designed by committee, and the hackers merely implement the design.

因此,大多数公司并没有将软件的未来托付给一位出色的黑客,而是将其设置为由委员会设计,而黑客只是实现设计。

If you want to make money at some point, remember this, because this is one of the reasons startups win.

如果你想在某个时候赚钱,请记住这一点,因为这是初创公司获胜的原因之一。

Big companies want to decrease the standard deviation of design outcomes because they

大公司希望降低设计结果的标准偏差,因为他们

want to avoid disasters.

想要避免灾难。

But when you damp oscillations, you lose the high points as well as the low.

但当你抑制振荡时,你就会失去高点和低点。

This is not a problem for big companies, because they don't win by making great products.

对于大公司来说这不是问题,因为他们并不是通过制造出色的产品来取胜的。

Big companies win by sucking less than other big companies.

大公司通过比其他大公司吸收更少来获胜。

So if you can figure out a way to get in a design war with a company big enough that its software is designed by product managers, they'll never be able to keep up

因此,如果你能找到一种方法与一家足够大的公司进行设计战,其软件是由产品经理设计的,他们将永远无法跟上

with you.

和你在一起。

These opportunities are not easy to find, though.

然而,这些机会并不容易找到。

It's hard to engage a big company in a design war, just as it's hard to engage an opponent inside a castle in hand to hand combat.

在设计战中与一家大公司交战是很困难的,就像在城堡里与对手进行肉搏战一样。

It would be pretty easy to write a better word processor than Microsoft Word, for example, but Microsoft, within the castle of their operating system monopoly, probably wouldn't even notice if you did.

例如,编写比 Microsoft Word 更好的文字处理程序是相当容易的,但微软在其操作系统垄断的城堡内,甚至可能不会注意到您是否这样做。

The place to fight design wars is in new markets, where no one

打设计战的地方是新市场,那里没有人

has yet managed to establish any fortifications.

尚未设法建立任何防御工事。

That's where you can win big by taking the bold approach to design, and having the same people both design and implement the product.

这就是您可以通过采取大胆的设计方法并让同一个人设计和实施产品来赢得巨大胜利的地方。

Microsoft themselves did this at the start.

微软自己一开始就是这么做的。

So did Apple.

苹果也是如此。

And Hewlett-Packard.

还有惠普。

I suspect almost every successful startup has.

我怀疑几乎每一个成功的初创公司都有这样的经历。

So one way to build great software is to start your own startup.

因此,构建优秀软件的一种方法就是自己创业。

There are two problems with this, though.

不过,这有两个问题。

One is

一是

that in a startup you have to do so much besides write software.

在初创公司中,除了编写软件之外,你还必须做很多事情。

At Viaweb I considered myself lucky if I got to hack a quarter of the time.

在 Viaweb,如果我有四分之一的时间能够进行黑客攻击,我就觉得自己很幸运。

And the things I had to do the other three quarters of the time ranged from tedious to terrifying.

剩下四分之三的时间我必须做的事情从乏味到可怕。

I have a benchmark for this, because I once had to leave a board meeting to have some cavities filled.

我对此有一个基准,因为我曾经不得不离开董事会会议来填补一些空缺。

I remember sitting back in the dentist's chair, waiting for the drill, and feeling like

我记得坐在牙医的椅子上,等待钻头,感觉就像

I was on vacation.

我当时正在度假。

The other problem with startups is that there is not much overlap between the kind of software that makes money and the kind that's interesting to write.

初创公司的另一个问题是,赚钱的软件和编写有趣的软件之间没有太多重叠。

Programming languages are interesting to write, and Microsoft's first product was one, in fact, but no one will pay for programming languages now.

编写编程语言很有趣,事实上,微软的第一个产品就是这样,但现在没有人会为编程语言付费。

If you want to make money, you tend to be forced to work on problems that are too nasty for anyone to solve for free.

如果你想赚钱,你往往会被迫解决那些对于任何人来说都无法免费解决的问题。

All makers face this problem.

所有创客都会面临这个问题。

Prices are determined by supply and demand, and there is just not as much demand for things that are fun to work on as there is for things that solve the mundane problems of individual customers.

价格是由供需决定的,对那些有趣的工作的需求不如对解决个人客户日常问题的东西的需求那么多。

Acting in off-Broadway plays just doesn't pay as well as wearing a gorilla suit in someone's booth at a trade show.

在非百老汇戏剧中表演的报酬还不如在贸易展上穿着大猩猩服在某人的展位上表演。

Writing novels doesn't pay as well as writing ad copy for garbage disposals.

写小说的收入不如写垃圾处理器的广告文案。

And hacking programming languages doesn't pay as well as figuring out how to connect some company's legacy database to their Web server.

黑客编程语言的回报还不如弄清楚如何将某些公司的遗留数据库连接到他们的 Web 服务器来得好。

I think the answer to this problem, in the case of software, is a concept known to nearly all makers: the day job.

我认为,就软件而言,这个问题的答案是几乎所有创客都知道的概念:日常工作。

This phrase began with musicians, who perform at night.

这句话始于晚上表演的音乐家。

More generally, it means that you have one kind of work you do for money, and another for love.

更一般地说,这意味着你从事一种工作是为了金钱,另一种工作是为了爱情。

Nearly all makers have day jobs early in their careers.

几乎所有创客在职业生涯早期都会从事日常工作。

Painters and writers notoriously do.

众所周知,画家和作家都这样做。

If you're lucky you can get a day job that's closely related to your real work.

如果幸运的话,您可以找到一份与您的实际工作密切相关的日常工作。

Musicians often seem to work in record stores.

音乐家似乎经常在唱片店工作。

A hacker working on some programming language or operating system might likewise be able to get a day job using it.

研究某种编程语言或操作系统的黑客同样可以使用它找到一份日常工作。

[1] When I say that the answer is for hackers to have day jobs, and work on beautiful software on the side, I'm not proposing

[1] 当我说答案是让黑客从事日常工作,同时开发漂亮的软件时,我并不是建议

this as a new idea.

这是一个新想法。

This is what open-source hacking is all about.

这就是开源黑客攻击的全部内容。

What I'm saying is that open-source is probably the right model, because it has been independently confirmed by all the other makers.

我想说的是,开源可能是正确的模式,因为它已经得到了所有其他制造商的独立确认。

It seems surprising to me that any employer would be reluctant to let hackers work on open-source projects.

让我感到惊讶的是,任何雇主都不愿意让黑客参与开源项目。

At Viaweb, we would have been reluctant to hire anyone who didn't.

在 Viaweb,我们不愿意雇用任何不这样做的人。

When we interviewed programmers, the main

我们面试程序员的时候,主要

thing we cared about was what kind of software they wrote in their spare time.

我们关心的是他们在业余时间写了什么样的软件。

You can't do anything really well unless you love it, and if you love to hack you'll inevitably be working on projects of your own.

除非你喜欢,否则你不可能把任何事情做得很好,如果你喜欢黑客,你将不可避免地从事自己的项目。

[2] Because hackers are makers rather than scientists, the right place to look for metaphors is not in the sciences, but among other kinds of makers.

[2] 因为黑客是创客而不是科学家,所以寻找隐喻的正确位置不是在科学中,而是在其他类型的创客中。

What else can painting teach us about hacking?

关于黑客行为,绘画还能教会我们什么?

One thing we can learn, or at least confirm, from the example of painting is how to learn to hack.

我们可以从绘画的例子中学到或至少确认的一件事是如何学习黑客。

You learn to paint mostly by doing it.

你主要是通过实践来学习绘画。

Ditto for hacking.

黑客攻击也是如此。

Most hackers don't learn to hack by taking college courses in programming.

大多数黑客并不是通过参加大学编程课程来学习黑客技术的。

They learn to hack by writing programs of their own at age thirteen.

他们在十三岁时通过编写自己的程序来学习黑客技术。

Even in college classes, you learn to hack mostly by hacking.

即使在大学课堂上,你也主要通过黑客行为来学习黑客行为。

[3] Because painters leave a trail of work behind them, you

[3] 因为画家在他们身后留下了作品的痕迹,你

can watch them learn by doing.

可以看着他们边做边学。

If you look at the work of a painter in chronological order, you'll find that each painting builds on things that have been learned in previous ones.

如果你按照时间顺序看一位画家的作品,你会发现每幅画都建立在之前画作的基础上。

When there's something in a painting that works very well, you can usually find version 1 of it in a smaller form in some earlier painting.

当一幅画中有一些效果非常好的东西时,你通常可以在一些早期的画作中找到它的较小形式的版本 1。

I think most makers work this way.

我想大多数创客都是这样工作的。

Writers and architects seem to as well.

作家和建筑师似乎也是如此。

Maybe it would be good for hackers

也许这对黑客来说是件好事

to act more like painters, and regularly start over from scratch, instead of continuing to work for years on one project, and trying to incorporate all their later ideas as revisions.

表现得更像画家,并定期从头开始,而不是在一个项目上持续工作多年,并尝试将所有后来的想法纳入修订。

The fact that hackers learn to hack by doing it is another sign of how different hacking is from the sciences.

黑客通过实践来学习黑客行为,这一事实是黑客行为与科学有多么不同的另一个标志。

Scientists don't learn science by doing it, but by doing labs and problem sets.

科学家不是通过实践来学习科学,而是通过做实验和解决问题来学习科学。

Scientists start out doing work that's perfect, in the sense

从某种意义上说,科学家们开始做的工作是完美的

that they're just trying to reproduce work someone else has already done for them.

他们只是想复制别人已经为他们完成的工作。

Eventually, they get to the point where they can do original work.

最终,他们达到了可以做原创作品的地步。

Whereas hackers, from the start, are doing original work; it's just very bad.

而黑客从一开始就在做原创工作;这非常糟糕。

So hackers start original, and get good, and scientists start good, and get original.

所以黑客从原创开始,然后变得优秀,而科学家从优秀开始,然后变得原创。

The other way makers learn is from examples.

创客学习的另一种方式是从例子中学习。

For a painter, a museum is a reference library of techniques.

对于画家来说,博物馆就是技法的参考图书馆。

For hundreds of years it has been part of the traditional education of painters to copy the works of the great masters, because copying forces you to look closely at the way a painting is made.

数百年来,临摹大师的作品一直是画家传统教育的一部分,因为临摹迫使你仔细观察绘画的制作方式。

Writers do this too.

作家们也这样做。

Benjamin Franklin learned to write by summarizing the points in the essays of Addison and Steele and then trying to reproduce them.

本杰明·富兰克林通过总结艾迪生和斯蒂尔文章中的要点,然后尝试复制它们来学习写作。

Raymond Chandler did the same thing with detective stories.

雷蒙德·钱德勒在侦探小说中也做了同样的事情。

Hackers, likewise, can learn to program by looking at good programs-- not just at what they do, but the source code too.

同样,黑客可以通过查看优秀的程序来学习编程——不仅查看它们所做的事情,还查看源代码。

One of the less publicized benefits of the open-source movement is that it has made it easier to learn to program.

开源运动鲜为人知的好处之一是它使学习编程变得更加容易。

When I learned to program, we had to rely mostly on examples in books.

当我学习编程时,我们不得不主要依赖书本上的例子。

The one big chunk of code available then was Unix, but even this was not open source.

当时可用的一大块代码是 Unix,但即使如此也不是开源的。

Most of the people who read the source

大多数人读过源码

read it in illicit photocopies of John Lions' book, which though written in 1977 was not allowed to be published until 1996.

在约翰·莱恩斯 (John Lions) 的书的非法影印本中阅读该书,该书虽然写于 1977 年,但直到 1996 年才被允许出版。

Another example we can take from painting is the way that paintings are created by gradual refinement.

绘画的另一个例子是绘画的创作方式是渐进式的。

Paintings usually begin with a sketch.

绘画通常从草图开始。

Gradually the details get filled in.

渐渐地,细节被填满。

But it is not merely a process of filling in.

但这不仅仅是一个填写的过程。

Sometimes the original plans turn out to be mistaken.

有时最初的计划会被证明是错误的。

Countless paintings, when you look at them in xrays, turn out to have limbs that have been moved or facial features that have been readjusted.

当你在X光下观察无数的画作时,你会发现它们的四肢被移动了,或者面部特征被重新调整了。

Here's a case where we can learn from painting.

这是一个我们可以从绘画中学习的案例。

I think hacking should work this way too.

我认为黑客也应该以这种方式进行。

It's unrealistic to expect that the specifications for a program will be perfect.

期望程序的规范是完美的是不现实的。

You're better off if you admit this up front, and write programs in a way that allows specifications to change on the fly.

如果您事先承认这一点,并以允许动态更改规格的方式编写程序,那么您的情况会更好。

(The structure of large companies makes this hard for them to do, so here is another place where startups have an advantage.) Everyone by now presumably knows about the danger of premature optimization.

(大公司的结构使他们很难做到这一点,因此这是初创公司具有优势的另一个地方。)现在每个人想必都知道过早优化的危险。

I think we should be just as worried about premature design-- deciding too early what a program should do.

我认为我们应该同样担心过早的设计——过早地决定程序应该做什么。

The right tools can help us avoid this danger.

正确的工具可以帮助我们避免这种危险。

A good programming language should, like oil paint, make it

好的编程语言应该像油画一样

easy to change your mind.

很容易改变主意。

Dynamic typing is a win here because you don't have to commit to specific data representations up front.

动态类型在这里是一个胜利,因为您不必预先承诺特定的数据表示形式。

But the key to flexibility, I think, is to make the language very abstract .

但我认为灵活性的关键是让语言变得非常抽象。

The easiest program to change is one that's very short.

最容易改变的程序是非常短的程序。

This sounds like a paradox, but a great painting has to be better than it has to be.

这听起来像是一个悖论,但一幅伟大的画作必须比它必须的更好。

For example, when Leonardo painted the portrait of Ginevra de Benci

例如,当列奥纳多(Leonardo)画吉内芙拉·德·本奇(Ginevra de Benci)的肖像时

in the National Gallery, he put a juniper bush behind her head.

在国家美术馆,他在她的头后面放了一棵杜松树。

In it he carefully painted each individual leaf.

他仔细地画了每一片叶子。

Many painters might have thought, this is just something to put in the background to frame her head.

很多画家可能会想,这只是放在背景中框住她头部的东西而已。

No one will look that closely at it.

没有人会那么仔细地观察它。

Not Leonardo.

不是莱昂纳多。

How hard he worked on part of a painting didn't depend at all on how closely he expected anyone to look at it.

他对一幅画的某个部分的努力程度根本不取决于他希望人们能多仔细地观察它。

He was like Michael Jordan.

他就像迈克尔·乔丹。

Relentless.

狠。

Relentlessness wins because, in the aggregate, unseen details become visible.

坚持不懈才能获胜,因为总的来说,看不见的细节变得可见。

When people walk by the portrait of Ginevra de Benci, their attention is often immediately arrested by it, even before they look at the label and notice that it says Leonardo da Vinci.

当人们走过吉内芙拉·德·本奇的肖像时,他们的注意力往往会立即被它吸引,甚至在他们看标签并注意到上面写着列奥纳多·达·芬奇之前。

All those unseen details combine to produce something that's just stunning, like a thousand barely audible voices all singing in tune.

所有这些看不见的细节结合在一起,产生了令人惊叹的东西,就像一千个几乎听不见的声音齐声歌唱。

Great software, likewise, requires a fanatical devotion to

同样,伟大的软件需要狂热的投入

beauty.

美丽。

If you look inside good software, you find that parts no one is ever supposed to see are beautiful too.

如果你仔细观察优秀的软件,你会发现那些不应该被人看到的部分也很漂亮。

I'm not claiming I write great software, but I know that when it comes to code I behave in a way that would make me eligible for prescription drugs if I approached everyday life the same way.

我并不是说我编写了出色的软件,但我知道,当涉及到代码时,如果我以同样的方式对待日常生活,我的行为方式将使我有资格获得处方药。

It drives me crazy to see code that's badly indented, or that uses ugly variable names.

看到严重缩进的代码或使用难看的变量名的代码会让我发疯。

If a hacker were a mere implementor, turning a spec into code, then

如果黑客只是一个实现者,将规范转化为代码,那么

he could just work his way through it from one end to the other like someone digging a ditch.

他可以像挖沟一样从一端走到另一端。

But if the hacker is a creator, we have to take inspiration into account.

但如果黑客是创造者,我们就必须考虑灵感。

In hacking, like painting, work comes in cycles.

在黑客工作中,就像绘画一样,工作是循环的。

Sometimes you get excited about some new project and you want to work sixteen hours a day on it.

有时你会对某个新项目感到兴奋,并且想每天工作十六个小时。

Other times nothing seems interesting.

其他时候似乎没什么有趣的。

To do good work you have to take these cycles into

为了做好工作,你必须将这些周期纳入其中

account, because they're affected by how you react to them.

帐户,因为它们会受到您对它们的反应的影响。

When you're driving a car with a manual transmission on a hill, you have to back off the clutch sometimes to avoid stalling.

当您在山上驾驶手动变速箱的汽车时,有时必须松开离合器以避免熄火。

Backing off can likewise prevent ambition from stalling.

退缩同样可以防止雄心壮志停滞不前。

In both painting and hacking there are some tasks that are terrifyingly ambitious, and others that are comfortingly routine.

在绘画和黑客中,有些任务是非常雄心勃勃的,而另一些则是令人欣慰的例行公事。

It's a good idea to save some easy

保存一些简单的东西是个好主意

tasks for moments when you would otherwise stall.

在你本来会停滞不前的时刻完成任务。

In hacking, this can literally mean saving up bugs.

在黑客攻击中,这实际上意味着保存错误。

I like debugging: it's the one time that hacking is as straightforward as people think it is.

我喜欢调试:这是第一次黑客攻击像人们想象的那样简单。

You have a totally constrained problem, and all you have to do is solve it.

你有一个完全受限的问题,你所要做的就是解决它。

Your program is supposed to do x.

你的程序应该做x。

Instead it does y.

相反,它确实是 y。

Where does it go wrong?

哪里出了问题?

You know you're going to win in the end.

你知道你最终会赢。

It's as relaxing as painting a wall.

就像粉刷墙壁一样轻松。

The example of painting can teach us not only how to manage our own work, but how to work together.

绘画的例子不仅可以教会我们如何管理自己的工作,还可以教会我们如何一起工作。

A lot of the great art of the past is the work of multiple hands, though there may only be one name on the wall next to it in the museum.

过去的许多伟大艺术都是多人之手的作品,尽管博物馆旁边的墙上可能只有一个名字。

Leonardo was an apprentice in the workshop of Verrocchio and painted one of the angels in his Baptism of Christ .

列奥纳多是韦罗基奥工作室的学徒,在他的《基督的洗礼》中画了一位天使。

This sort of thing was the rule, not the exception.

这种事情是规则,而不是例外。

Michelangelo was considered especially dedicated for insisting on painting all the figures on the ceiling of the Sistine Chapel himself.

米开朗基罗被认为特别致力于坚持亲自绘制西斯廷教堂天花板上的所有人物。

As far as I know, when painters worked together on a painting, they never worked on the same parts.

据我所知,当画家一起创作一幅画时,他们从来不会画相同的部分。

It was common for the master to paint the principal figures and for assistants to paint the others and the background.

通常是由大师画主要人物,由助手画其他人物和背景。

But you never had one guy painting over the work of another.

但你从来没有让一个人在另一个人的作品上作画。

I think this is the right model for collaboration in software too.

我认为这也是软件协作的正确模式。

Don't push it too far.

不要把它推得太远。

When a piece of code is being hacked by three or four different people, no one of whom really owns it, it will end up being like a common-room.

当一段代码被三四个不同的人黑客攻击时,其中没有人真正拥有它,它最终会像一个公共休息室一样。

It will tend to feel bleak and abandoned, and accumulate cruft.

它往往会让人感到凄凉和被遗弃,并积累残渣。

The right way to collaborate, I think, is to divide projects into sharply defined modules, each with a definite owner, and with interfaces

我认为正确的协作方式是将项目划分为明确定义的模块,每个模块都有明确的所有者和接口

between them that are as carefully designed and, if possible, as articulated as programming languages.

它们之间的关系就像编程语言一样经过精心设计,并且如果可能的话,也尽可能清晰地表达出来。

Like painting, most software is intended for a human audience.

就像绘画一样,大多数软件都是面向人类受众的。

And so hackers, like painters, must have empathy to do really great work.

因此,黑客就像画家一样,必须具有同理心才能做出真正伟大的工作。

You have to be able to see things from the user's point of view.

您必须能够从用户的角度看待事物。

When I was a kid I was always being told to look at things from someone else's point of view.

当我还是个孩子的时候,我总是被告知要从别人的角度看问题。

What this always meant in

这总是意味着什么

practice was to do what someone else wanted, instead of what I wanted.

修行就是做别人想做的事,而不是做我想做的事。

This of course gave empathy a bad name, and I made a point of not cultivating it.

这当然给同理心带来了坏名声,我特意不去培养它。

Boy, was I wrong.

男孩,我错了吗?

It turns out that looking at things from other people's point of view is practically the secret of success.

事实证明,从别人的角度看问题实际上是成功的秘诀。

It doesn't necessarily mean being self-sacrificing.

这并不一定意味着自我牺牲。

Far from it.

远非如此。

Understanding how someone else sees things doesn't imply that you'll act in his interest; in some

理解别人如何看待事物并不意味着你会按照他的利益行事;在一些

situations-- in war, for example-- you want to do exactly the opposite.

在某些情况下——例如在战争中——你想做的恰恰相反。

[4] Most makers make things for a human audience.

[4] 大多数制作者都是为人类观众制作东西。

And to engage an audience you have to understand what they need.

为了吸引观众,你必须了解他们的需求。

Nearly all the greatest paintings are paintings of people, for example, because people are what people are interested in.

例如,几乎所有最伟大的画作都是人的画,因为人是人们感兴趣的东西。

Empathy is probably the single most important difference between a good hacker and a great one.

同理心可能是优秀黑客和伟大黑客之间最重要的区别。

Some hackers

一些黑客

are quite smart, but when it comes to empathy are practically solipsists.

他们相当聪明,但当涉及到同理心时,他们实际上是唯我论者。

It's hard for such people to design great software [5], because they can't see things from the user's point of view.

这些人很难设计出出色的软件[5],因为他们无法从用户的角度看待事物。

One way to tell how good people are at empathy is to watch them explain a technical question to someone without a technical background.

判断人们的同理心程度的一种方法是观察他们向没有技术背景的人解释技术问题。

We probably all know people who, though otherwise smart, are just comically bad at this.

我们可能都认识一些人,尽管他们在其他方面很聪明,但在这方面却表现得很糟糕。

If someone asks them at

如果有人问他们

a dinner party what a programming language is, they'll say something like ``Oh, a high-level language is what the compiler uses as input to generate object code.'' High-level language?

晚宴上什么是编程语言,他们会说“哦,高级语言是编译器用作生成目标代码的输入。”高级语言?

Compiler?

编译器?

Object code?

物件代码?

Someone who doesn't know what a programming language is obviously doesn't know what these things are, either.

不知道什么是编程语言的人显然也不知道这些东西是什么。

Part of what software has to do is explain itself.

软件必须做的一部分就是解释自己。

So to write good software you have to understand how little users

因此,要编写好的软件,您必须了解用户有多么少

understand.

明白。

They're going to walk up to the software with no preparation, and it had better do what they guess it will, because they're not going to read the manual.

他们将在没有任何准备的情况下使用软件,并且软件最好按照他们的猜测去做,因为他们不会阅读手册。

The best system I've ever seen in this respect was the original Macintosh, in 1985.

在这方面我见过的最好的系统是 1985 年的第一代 Macintosh。

It did what software almost never does: it just worked.

它做了软件几乎从未做过的事情:它只是工作。

[6] Source code, too, should explain itself.

[6] 源代码也应该能够自我解释。

If I could get people to remember just one quote about programming, it would be the

如果我能让人们记住一句关于编程的名言,那就是

one at the beginning of Structure and Interpretation of Computer Programs.

计算机程序的结构和解释的开头部分。

Programs should be written for people to read, and only incidentally for machines to execute.

程序应该编写供人们阅读,并且只是顺便供机器执行。

You need to have empathy not just for your users, but for your readers.

您不仅需要对用户有同理心,还需要对读者有同理心。

It's in your interest, because you'll be one of them.

这符合您的利益,因为您将成为他们中的一员。

Many a hacker has written a program only to find on returning to it six months later that he has no idea how it works.

许多黑客编写了一个程序,但六个月后返回时却发现他不知道它是如何工作的。

I know several people who've sworn off Perl after

我知道有几个人在之后就放弃了 Perl

such experiences.

这样的经历。

[7] Lack of empathy is associated with intelligence, to the point that there is even something of a fashion for it in some places.

[7] 缺乏同理心与智力有关,甚至在某些地方还流行这种现象。

But I don't think there's any correlation.

但我不认为有任何相关性。

You can do well in math and the natural sciences without having to learn empathy, and people in these fields tend to be smart, so the two qualities have come to be associated.

你可以在数学和自然科学方面取得好成绩,而无需学习同理心,而这些领域的人往往很聪明,因此这两种品质已经联系在一起。

But there are plenty of dumb people who are bad at

但也有很多蠢人不擅长

empathy too.

也有同理心。

Just listen to the people who call in with questions on talk shows.

只要听听那些在脱口秀节目中打电话提出问题的人就可以了。

They ask whatever it is they're asking in such a roundabout way that the hosts often have to rephrase the question for them.

他们以一种迂回的方式问任何问题,以至于主持人经常不得不为他们重新表述问题。

So, if hacking works like painting and writing, is it as cool?

那么,如果黑客行为就像绘画和写作一样酷吗?

After all, you only get one life.

毕竟,你只有一次生命。

You might as well spend it working on something great.

你不妨把它花在一些伟大的事情上。

Unfortunately, the question is hard to answer.

不幸的是,这个问题很难回答。

There is always

总有

a big time lag in prestige.

声望上有很大的时间滞后。

It's like light from a distant star.

就像来自遥远星星的光。

Painting has prestige now because of great work people did five hundred years ago.

由于五百年前人们所做的伟大工作,绘画现在享有盛誉。

At the time, no one thought these paintings were as important as we do today.

当时,没有人认为这些画像我们今天一样重要。

It would have seemed very odd to people at the time that Federico da Montefeltro, the Duke of Urbino, would one day be known mostly as the guy with the strange nose in a painting

对于当时的人们来说,乌尔比诺公爵费德里科·达·蒙特费尔特罗有一天会被大多数人称为画中那个长着奇怪鼻子的人,这似乎很奇怪

by Piero della Francesca.

作者:皮耶罗·德拉·弗朗西斯卡。

So while I admit that hacking doesn't seem as cool as painting now, we should remember that painting itself didn't seem as cool in its glory days as it does now.

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

What we can say with some confidence is that these are the glory days of hacking.

我们可以有信心地说,现在是黑客的辉煌时代。

In most fields the great work is done early on.

在大多数领域,伟大的工作都是很早就完成的。

The paintings made between 1430 and 1500 are still unsurpassed.

1430 年至 1500 年间创作的画作至今仍是无与伦比的。

Shakespeare appeared just as professional theater was being born,

莎士比亚的出现恰逢专业戏剧的诞生,

<!-- plays were emerging from crude farces put on in the courtyards of coaching inns, --> and pushed the medium so far that every playwright since has had to live in his shadow.

<!-- 戏剧是从客栈院子里上演的粗俗闹剧中出现的,--> 并将这种媒介推向了如此远的高度,以至于此后的每一位剧作家都不得不生活在他的阴影下。

Albrecht Durer did the same thing with engraving, and Jane Austen with the novel.

阿尔布雷希特·杜勒(Albrecht Durer)在版画方面做了同样的事情,简·奥斯汀(Jane Austen)在小说方面也做了同样的事情。

Over and over we see the same pattern.

我们一遍又一遍地看到相同的模式。

A new medium appears, and people are so excited about it that they explore most of its possibilities in the first couple generations.

一种新的媒介出现了,人们对此非常兴奋,以至于在最初的几代人中他们探索了它的大部分可能性。

Hacking seems

黑客似乎

to be in this phase now.

现在正处于这个阶段。

Painting was not, in Leonardo's time, as cool as his work helped make it.

在列奥纳多的时代,绘画并不像他的作品那样酷。

How cool hacking turns out to be will depend on what we can do with this new medium.

黑客攻击到底有多酷将取决于我们能用这种新媒介做什么。

<!--In some ways, the time lag of coolness is an advantage.

<!--从某些方面来说,冷静的时滞是一种优势。

When you meet someone now who is writing a compiler or hacking a Unix kernel, at least you know they're not just doing it to pick up chicks.--> Notes [1] The greatest damage that photography has done

当你现在遇到正在编写编译器或破解 Unix 内核的人时,至少你知道他们这样做不仅仅是为了泡妞。--> 注释 [1] 摄影造成的最大损害

to painting may be the fact that it killed the best day job.

事实上,绘画可能扼杀了最好的日常工作。

Most of the great painters in history supported themselves by painting portraits.

历史上伟大的画家大多靠画肖像维持生计。

<!-- Until about 1870, there was always a cadre of painters trained in the most difficult task in art, painting the human face from life.

<!-- 直到 1870 年左右,总有一批画家接受过艺术中最艰巨的任务的训练,即描绘生活中的人脸。

--> [2] I've been told that Microsoft discourages employees from contributing to open-source projects, even in their spare time.

--> [2] 我听说微软不鼓励员工为开源项目做出贡献,即使是在业余时间。

But so many of the best hackers work on open-source projects now that the main effect of this policy may be to ensure that they won't be able to hire any first-rate programmers.

但现在有这么多最优秀的黑客在开源项目上工作,这项政策的主要作用可能是确保他们无法雇用任何一流的程序员。

[3] What you learn about programming in college is much like what you learn about books or clothes or dating: what bad taste you had in high school.

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

[4] Here's an example of applied empathy.

[4] 这是一个应用同理心的例子。

At Viaweb, if we couldn't decide between two alternatives, we'd

在 Viaweb,如果我们无法在两种选择之间做出决定,我们会

ask, what would our competitors hate most?

问一下,我们的竞争对手最讨厌什么?

At one point a competitor added a feature to their software that was basically useless, but since it was one of few they had that we didn't, they made much of it in the trade press.

有一次,竞争对手在他们的软件中添加了一项基本无用的功能,但由于这是他们拥有而我们没有的少数功能之一,因此他们在商业媒体上大肆宣传。

We could have tried to explain that the feature was useless, but we decided it would annoy our competitor more if we just implemented it ourselves, so we hacked together our own

我们本可以尝试解释该功能没有用,但我们认为如果我们自己实现它会更惹恼我们的竞争对手,因此我们将自己的功能组合在一起

version that afternoon.

那天下午的版本。

[5] Except text editors and compilers.

[5] 文本编辑器和编译器除外。

Hackers don't need empathy to design these, because they are themselves typical users.

黑客不需要同理心来设计这些,因为他们本身就是典型的用户。

[6] Well, almost.

[6] 嗯,差不多了。

They overshot the available RAM somewhat, causing much inconvenient disk swapping, but this could be fixed within a few months by buying an additional disk drive.

它们在一定程度上超出了可用 RAM,导致磁盘交换非常不方便,但这可以通过购买额外的磁盘驱动器在几个月内解决。

[7] The way to make programs easy to read is not to stuff them with comments.

[7] 让程序易于阅读的方法不是在程序中塞满注释。

I would take Abelson and Sussman's

我会选择阿贝尔森和萨斯曼的

quote a step further.

进一步引用。

Programming languages should be designed to express algorithms, and only incidentally to tell computers how to execute them.

编程语言应该被设计来表达算法,并且只是顺便告诉计算机如何执行它们。

A good programming language ought to be better for explaining software than English.

好的编程语言应该比英语更能解释软件。

You should only need comments when there is some kind of kludge you need to warn readers about, just as on a road there are only arrows on parts with unexpectedly sharp curves.

只有当存在某种需要警告读者的错误时,才需要注释,就像在道路上只有带有意想不到的急转弯的部分上的箭头一样。

<!-- [8] Leonardo was paid the same amount for painting the Virgin of the Rocks as the workshop that made the frame for it.

<!-- [8] 列奥纳多绘制《岩间圣母》时获得的报酬与为其制作框架的工作室所获得的报酬相同。

--> Thanks to Trevor Blackwell, Robert Morris, Dan Giffin, and Lisa Randall for reading drafts of this, and to Henry Leitner and Larry Finkelstein for inviting me to speak.

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

中文为机器翻译,仅供参考。