(本文改编自作者在 OSCON 2004 大会上的演讲。)
(This essay is derived from a talk at Oscon 2004.)
几个月前,我刚写完一本新书。在书评里,我不断看到“煽动性”和“充满争议”这样的字眼。更不用说还有人骂它“愚蠢至极”了。
A few months ago I finished a new book, and in reviews I keep noticing words like "provocative'' and "controversial.'' To say nothing of "idiotic.''
我本意并不想写一本充满争议的书,而是想写一本高效的书。我不想浪费大家的时间去重复那些人尽皆知的常识。最有效率的做法是直接把“增量差异”(diffs)呈现出来。但我猜,这样写出来的书注定会让人大吃一惊。
I didn't mean to make the book controversial. I was trying to make it efficient. I didn't want to waste people's time telling them things they already knew. It's more efficient just to give them the diffs. But I suppose that's bound to yield an alarming book.
爱迪生们
Edisons
在所有观点中,最具争议的毫无疑问是这一个:贫富差距或许并不像我们想象的那么糟糕。
There's no controversy about which idea is most controversial: the suggestion that variation in wealth might not be as big a problem as we think.
我并没有在书里说贫富差距本身是一件好事。我是说,在某些情况下,它可能是好事情的征兆。剧烈的头痛当然不是好事,但它可能是好兆头——比如,这意味着你被砸晕后正在恢复意识。
I didn't say in the book that variation in wealth was in itself a good thing. I said in some situations it might be a sign of good things. A throbbing headache is not a good thing, but it can be a sign of a good thing-- for example, that you're recovering consciousness after being hit on the head.
财富的差距可能源于生产力的差距。(在只有你一个人的社会里,这两者完全等同。)而生产力的差异几乎绝对是一件好事:如果你的社会里没有任何生产力差异,那大概率不是因为人人都是托马斯·爱迪生,而是因为你们那里一个爱迪生都没有。
Variation in wealth can be a sign of variation in productivity. (In a society of one, they're identical.) And that is almost certainly a good thing: if your society has no variation in productivity, it's probably not because everyone is Thomas Edison. It's probably because you have no Thomas Edisons.
在低技术社会中,你很难看到生产力有多大差距。如果是一个收集柴火的游牧部落,最厉害的捡柴手能比最差的高出多少?两倍?然而,当你给人们一件像计算机这样复杂的工具时,他们能用它创造出的价值差距是极其惊人的。
In a low-tech society you don't see much variation in productivity. If you have a tribe of nomads collecting sticks for a fire, how much more productive is the best stick gatherer going to be than the worst? A factor of two? Whereas when you hand people a complex tool like a computer, the variation in what they can do with it is enormous.
这并不是什么新观点。弗雷德·布鲁克斯(Fred Brooks)在 1974 年就写过,他引用的研究更是发表于 1968 年。但我认为他低估了程序员之间的差距。他当时衡量的是写代码行数的生产力:最顶尖的程序员可以用十分之一的时间解决同一个问题。但如果问题本身并没有给定呢?在编程领域,就像在许多其他领域一样,最难的部分不是解决问题,而是决定去解决什么问题。想象力很难量化,但在实际工作中,它对生产力的决定性作用远超用代码行数衡量的那部分。
That's not a new idea. Fred Brooks wrote about it in 1974, and the study he quoted was published in 1968. But I think he underestimated the variation between programmers. He wrote about productivity in lines of code: the best programmers can solve a given problem in a tenth the time. But what if the problem isn't given? In programming, as in many fields, the hard part isn't solving problems, but deciding what problems to solve. Imagination is hard to measure, but in practice it dominates the kind of productivity that's measured in lines of code.
任何领域的生产力都有差距,但极少有领域像编程这样差距悬殊。程序员之间的差距之大,已经变成了质的差别。不过,我不认为这是编程本身固有的特性。在每个领域,技术都会放大生产力的差距。编程界之所以如此,只是因为我们拥有巨大的技术杠杆。但随着时间的推移,每个领域的杠杆都在变长,因此我们今天在编程中看到的这种差距,未来会蔓延到越来越多的行业。而企业乃至国家的成功,将越来越取决于它们如何应对这种变化。
Productivity varies in any field, but there are few in which it varies so much. The variation between programmers is so great that it becomes a difference in kind. I don't think this is something intrinsic to programming, though. In every field, technology magnifies differences in productivity. I think what's happening in programming is just that we have a lot of technological leverage. But in every field the lever is getting longer, so the variation we see is something that more and more fields will see as time goes on. And the success of companies, and countries, will depend increasingly on how they deal with it.
如果生产力的差距随着技术发展而拉大,那么最顶尖人才的贡献不仅会大得不成比例,而且还会随着时间推移继续增长。当一个团队 90% 的产出是由 1% 的成员创造时,一旦有任何因素(无论是维京人洗劫还是计划经济)把他们的生产力拉低到平均水平,你就会蒙受巨大的损失。
If variation in productivity increases with technology, then the contribution of the most productive individuals will not only be disproportionately large, but will actually grow with time. When you reach the point where 90% of a group's output is created by 1% of its members, you lose big if something (whether Viking raids, or central planning) drags their productivity down to the average.
如果我们想最大程度地发挥他们的作用,就必须了解这些极具生产力的人。是什么在激励他们?他们工作需要什么?你如何识别他们?你如何吸引他们来为你工作?当然还有一个问题:你如何成为他们中的一员?
If we want to get the most out of them, we need to understand these especially productive people. What motivates them? What do they need to do their jobs? How do you recognize them? How do you get them to come and work for you? And then of course there's the question, how do you become one?
金钱之外
More than Money
我认识少数几位超级黑客,所以我坐下来思考了一下他们的共同点。他们最核心的特质,大概是他们真的热爱编程。普通程序员写代码是为了糊口,而伟大的黑客则把编程当成好玩的事,并且很惊喜地发现居然有人愿意为此付钱。
I know a handful of super-hackers, so I sat down and thought about what they have in common. Their defining quality is probably that they really love to program. Ordinary programmers write code to pay the bills. Great hackers think of it as something they do for fun, and which they're delighted to find people will pay them for.
人们有时会说优秀的程序员对金钱无感。这不完全对。确实,他们唯一真正关心的是做有趣的工作。但如果你赚了足够多的钱,你就可以随心所欲地做任何你想做的事。正因如此,黑客确实会被赚大钱的想法所吸引。但只要他们每天还要打卡上班,他们就更关心自己上班在做什么,而不是拿了多少薪水。
Great programmers are sometimes said to be indifferent to money. This isn't quite true. It is true that all they really care about is doing interesting work. But if you make enough money, you get to work on whatever you want, and for that reason hackers are attracted by the idea of making really large amounts of money. But as long as they still have to show up for work every day, they care more about what they do there than how much they get paid for it.
在经济学上,这是一个极其重要的事实。因为这意味着你根本不需要支付符合伟大黑客身价的薪水。一个伟大程序员的生产力可能是普通程序员的十倍甚至百倍,但他只要能拿到三倍的薪水,就会觉得自己很走运了。正如我后面会解释的,这部分是因为伟大的黑客并不知道自己有多优秀,但也是因为金钱并不是他们最想要的东西。
Economically, this is a fact of the greatest importance, because it means you don't have to pay great hackers anything like what they're worth. A great programmer might be ten or a hundred times as productive as an ordinary one, but he'll consider himself lucky to get paid three times as much. As I'll explain later, this is partly because great hackers don't know how good they are. But it's also because money is not the main thing they want.
那么黑客想要什么?像所有的手艺人一样,黑客喜欢好工具。事实上,这么说还太保守了。优秀的黑客无法忍受糟糕的工具。如果项目的底层基础设施不对,他们会直接拒绝参与。
What do hackers want? Like all craftsmen, hackers like good tools. In fact, that's an understatement. Good hackers find it unbearable to use bad tools. They'll simply refuse to work on projects with the wrong infrastructure.
在我曾经工作过的一家创业公司里,公告栏上贴着一张 IBM 的广告。那是一张 AS400 的照片,标题大概是:“黑客鄙视它。” [1]
At a startup I once worked for, one of the things pinned up on our bulletin board was an ad from IBM. It was a picture of an AS400, and the headline read, I think, "hackers despise it.'' [1]
当你决定一个项目使用什么基础设施时,你不仅是在做技术决定,也是在做社交决定,而后者可能更为重要。例如,如果你的公司想写个软件,选择 Java 似乎是一个稳妥的选择。但当你选择一门语言时,你也在选择一个社群。你招聘来做 Java 项目的程序员,绝对没有那些愿意做 Python 项目的程序员聪明。而黑客的素质可能比你选择什么语言更重要。不过说实话,优秀的黑客更喜欢 Python 而不是 Java,这本身就很能说明这两门语言的优劣了。
When you decide what infrastructure to use for a project, you're not just making a technical decision. You're also making a social decision, and this may be the more important of the two. For example, if your company wants to write some software, it might seem a prudent choice to write it in Java. But when you choose a language, you're also choosing a community. The programmers you'll be able to hire to work on a Java project won't be as smart as the ones you could get to work on a project written in Python. And the quality of your hackers probably matters more than the language you choose. Though, frankly, the fact that good hackers prefer Python to Java should tell you something about the relative merits of those languages.
商业人士偏爱最流行的语言,因为他们把语言视为标准。他们不想把公司的前途押在 Betamax 格式上。然而,语言的独特之处在于,它们不仅仅是标准。如果你要在网络上传输数据,务必使用 TCP/IP。但编程语言不仅仅是一种格式,它是一种表达介质。
Business types prefer the most popular languages because they view languages as standards. They don't want to bet the company on Betamax. The thing about languages, though, is that they're not just standards. If you have to move bits over a network, by all means use TCP/IP. But a programming language isn't just a format. A programming language is a medium of expression.
我读到过一则消息,说 Java 刚刚超越 Cobol 成为最流行的语言。作为标准,这无可挑剔。但作为表达介质,你完全可以找到更好的。在我能想到的所有伟大程序员中,我只知道一个会自愿用 Java 编程。而在所有不为 Sun 公司工作、不用 Java 开发的伟大程序员中,我知道的人数是零。
I've read that Java has just overtaken Cobol as the most popular language. As a standard, you couldn't wish for more. But as a medium of expression, you could do a lot better. Of all the great programmers I can think of, I know of only one who would voluntarily program in Java. And of all the great programmers I can think of who don't work for Sun, on Java, I know of zero.
伟大的黑客通常也坚持使用开源软件。这不仅是因为开源软件更好,还因为开源软件能给他们带来更多的控制权。优秀的黑客坚持掌控一切。这也是让他们成为优秀黑客的原因:当东西坏了,他们必须去修复它。你希望他们对自己为你写的软件抱有这种态度,那么当他们对操作系统也抱有同样态度时,你就不应该感到奇怪。
Great hackers also generally insist on using open source software. Not just because it's better, but because it gives them more control. Good hackers insist on control. This is part of what makes them good hackers: when something's broken, they need to fix it. You want them to feel this way about the software they're writing for you. You shouldn't be surprised when they feel the same way about the operating system.
几年前,一位做风险投资的朋友跟我聊起他参与的一家新创业公司。听起来很有前景。但下次我再和他聊起时,他说他们决定把软件构建在 Windows NT 上,并且刚刚聘请了一位资深的 NT 开发者担任首席技术官。听到这里,我心想,这帮人完蛋了。第一,这位 CTO 不可能是第一流的黑客,因为要成为一个声名显赫的 NT 开发者,他必须多次自愿使用 NT,我无法想象一个伟大的黑客会这么做;第二,即使他很优秀,如果项目必须建在 NT 上,他也很难招到任何优秀的人来为他工作。 [2]
A couple years ago a venture capitalist friend told me about a new startup he was involved with. It sounded promising. But the next time I talked to him, he said they'd decided to build their software on Windows NT, and had just hired a very experienced NT developer to be their chief technical officer. When I heard this, I thought, these guys are doomed. One, the CTO couldn't be a first rate hacker, because to become an eminent NT developer he would have had to use NT voluntarily, multiple times, and I couldn't imagine a great hacker doing that; and two, even if he was good, he'd have a hard time hiring anyone good to work for him if the project had to be built on NT. [2]
最后的疆域
The Final Frontier
除了软件,对黑客来说最重要的工具大概就是他的办公室了。大公司认为办公室的作用是彰显等级,但黑客使用办公室有更多的用途:他们把办公室当作思考的场所。如果你是一家技术公司,他们的思考就是你的产品。因此,让黑客在嘈杂、令人分心的环境中工作,就像开一家空气中充满煤烟的油漆厂一样。
After software, the most important tool to a hacker is probably his office. Big companies think the function of office space is to express rank. But hackers use their offices for more than that: they use their office as a place to think in. And if you're a technology company, their thoughts are your product. So making hackers work in a noisy, distracting environment is like having a paint factory where the air is full of soot.
漫画《呆伯特》(Dilbert)对格子间有很多吐槽,这不无道理。我认识的所有黑客都鄙视格子间。哪怕只是预料到会被打断,都足以阻止黑客去钻研难题。如果你想在格子间办公室里把工作做好,你只有两个选择:要么在家工作,要么等大家都走了,在清晨、深夜或周末加班。难道公司没有意识到这是系统出问题的征兆吗?办公环境本应该帮助你工作,而不是让你克服重重阻碍去工作。
The cartoon strip Dilbert has a lot to say about cubicles, and with good reason. All the hackers I know despise them. The mere prospect of being interrupted is enough to prevent hackers from working on hard problems. If you want to get real work done in an office with cubicles, you have two options: work at home, or come in early or late or on a weekend, when no one else is there. Don't companies realize this is a sign that something is broken? An office environment is supposed to be something that helps you work, not something you work despite.
像思科(Cisco)这样的公司很自豪每个人都坐格子间,甚至连 CEO 也不例外。但他们并没有自己想象的那么先进,显然他们仍然把办公空间视为级别的象征。另外需要注意的是,思科以极少在内部进行产品开发而闻名。他们获取新技术的方式是收购创造这些技术的创业公司——而在那些创业公司里,黑客们大概都有个安静的工作环境。
Companies like Cisco are proud that everyone there has a cubicle, even the CEO. But they're not so advanced as they think; obviously they still view office space as a badge of rank. Note too that Cisco is famous for doing very little product development in house. They get new technology by buying the startups that created it-- where presumably the hackers did have somewhere quiet to work.
微软是深谙黑客需求的大公司之一。我曾见过微软的一则招聘广告,上面画着一扇巨大的门。大意是:来我们这里工作吧,我们会给你一个能真正把工作做好的地方。而且你知道,微软在大公司中确实很特别,因为他们能够在内部开发软件。也许开发得不够好,但足够用了。
One big company that understands what hackers need is Microsoft. I once saw a recruiting ad for Microsoft with a big picture of a door. Work for us, the premise was, and we'll give you a place to work where you can actually get work done. And you know, Microsoft is remarkable among big companies in that they are able to develop software in house. Not well, perhaps, but well enough.
如果公司想让黑客提高效率,应该看看他们在家是怎么做的。在家时,黑客可以自己布置一切,以便把事情做到最好。当黑客在家工作时,他们不会在嘈杂、开放的空间里干活,而是在有门的房间里。他们工作的地方温馨、有人情味,周围有人,需要思考问题时有地方可以散步,而不是待在四周全是巨大停车场的玻璃盒子里。累了他们有沙发可以打个盹,而不是像个植物人一样瘫坐在办公桌前假装工作。没有清洁工会在傍晚——也就是黑客工作的黄金时间——推着轰鸣的吸尘器穿梭而过。没有开不完的会,更没有老天保佑千万别有的公司静修会或团队建设活动。当你看看他们在电脑上做什么时,你会发现这印证了我之前关于工具的观点。他们在公司可能不得不使用 Java 和 Windows,但在可以自由选择的家里,你更有可能发现他们在使用 Perl 和 Linux。
If companies want hackers to be productive, they should look at what they do at home. At home, hackers can arrange things themselves so they can get the most done. And when they work at home, hackers don't work in noisy, open spaces; they work in rooms with doors. They work in cosy, neighborhoody places with people around and somewhere to walk when they need to mull something over, instead of in glass boxes set in acres of parking lots. They have a sofa they can take a nap on when they feel tired, instead of sitting in a coma at their desk, pretending to work. There's no crew of people with vacuum cleaners that roars through every evening during the prime hacking hours. There are no meetings or, God forbid, corporate retreats or team-building exercises. And when you look at what they're doing on that computer, you'll find it reinforces what I said earlier about tools. They may have to use Java and Windows at work, but at home, where they can choose for themselves, you're more likely to find them using Perl and Linux.
事实上,关于 Cobol 或 Java 是最流行语言的统计数据可能会误导人。如果我们想知道什么工具最好,应该去看黑客在可以自由选择时会选什么——也就是在他们自己的项目里。当你提出这个问题时,你会发现开源操作系统已经占据了绝对的主导地位,而排名第一的语言很可能是 Perl。
Indeed, these statistics about Cobol or Java being the most popular language can be misleading. What we ought to look at, if we want to know what tools are best, is what hackers choose when they can choose freely-- that is, in projects of their own. When you ask that question, you find that open source operating systems already have a dominant market share, and the number one language is probably Perl.
有趣
Interesting
除了好工具,黑客还想要有趣的项目。什么能让一个项目变得有趣?显然,像隐形飞机或特效软件这样光鲜炫酷的应用会很有意思。但任何应用只要能提出新颖的技术挑战,都可以变得有趣。因此,很难预测黑客会喜欢哪些问题,因为有些问题只有在开发者发现了一种全新的解决方案时,才会变得有趣。在 ITA(开发 Orbitz 核心软件的公司)出现之前,开发机票搜索的人大概觉得这是世界上最无聊的应用。但 ITA 通过用一种更有野心的方式重新定义了这个问题,使它变得有趣了。
Along with good tools, hackers want interesting projects. What makes a project interesting? Well, obviously overtly sexy applications like stealth planes or special effects software would be interesting to work on. But any application can be interesting if it poses novel technical challenges. So it's hard to predict which problems hackers will like, because some become interesting only when the people working on them discover a new kind of solution. Before ITA (who wrote the software inside Orbitz), the people working on airline fare searches probably thought it was one of the most boring applications imaginable. But ITA made it interesting by redefining the problem in a more ambitious way.
我认为同样的事情也发生在谷歌。谷歌成立时,各大门户网站的共识是搜索无聊且不重要。但谷歌的人不觉得搜索无聊,这就是为什么他们能把搜索做得这么好。
I think the same thing happened at Google. When Google was founded, the conventional wisdom among the so-called portals was that search was boring and unimportant. But the guys at Google didn't think search was boring, and that's why they do it so well.
这是管理者可以大显身手的地方。就像父母对孩子说“我打赌你不能在十分钟内把房间收拾干净”一样,一个好的管理者有时可以将一个问题重新定义为一个更有趣的问题。史蒂夫·乔布斯似乎特别擅长这一点,部分原因在于他极高的标准。在 Mac 之前,市面上有很多小巧、便宜的电脑。他将问题重新定义为:做一个美丽的电脑。这可能比任何胡萝卜加大棒都更能激发开发者的斗志。
This is an area where managers can make a difference. Like a parent saying to a child, I bet you can't clean up your whole room in ten minutes, a good manager can sometimes redefine a problem as a more interesting one. Steve Jobs seems to be particularly good at this, in part simply by having high standards. There were a lot of small, inexpensive computers before the Mac. He redefined the problem as: make one that's beautiful. And that probably drove the developers harder than any carrot or stick could.
他们确实做到了。当 Mac 第一次面世时,你甚至不需要开机就知道它很棒,从外壳就能看出来。几个月前,我走在剑桥的街上,在别人的垃圾堆里看到一个似乎是 Mac 的便携包。我往里一看,里面是一个 Mac SE。我把它搬回家,插上电源,它启动了。欢快的麦金塔笑脸,然后是 Finder。我的天,它是如此简单。就像……谷歌一样。
They certainly delivered. When the Mac first appeared, you didn't even have to turn it on to know it would be good; you could tell from the case. A few weeks ago I was walking along the street in Cambridge, and in someone's trash I saw what appeared to be a Mac carrying case. I looked inside, and there was a Mac SE. I carried it home and plugged it in, and it booted. The happy Macintosh face, and then the finder. My God, it was so simple. It was just like ... Google.
黑客喜欢为有高标准的人工作。但光是严苛还不够,你必须在正确的事情上坚持。这通常意味着你自己也必须是个黑客。我偶尔会看到关于如何管理程序员的文章。实际上只需要两篇文章:一篇是关于如果你自己是程序员该怎么做,另一篇是关于如果你不是程序员该怎么做。而第二篇大概可以浓缩成两个字:放弃。
Hackers like to work for people with high standards. But it's not enough just to be exacting. You have to insist on the right things. Which usually means that you have to be a hacker yourself. I've seen occasional articles about how to manage programmers. Really there should be two articles: one about what to do if you are yourself a programmer, and one about what to do if you're not. And the second could probably be condensed into two words: give up.
问题不在于日常管理。真正优秀的黑客实际上是自我管理的。问题在于,如果你不是黑客,你就无法分辨谁是好黑客。类似的难题也解释了为什么美国车这么丑。我称之为“设计悖论”。你可能认为,只要雇一个伟大的设计师,就能让产品变得美丽。但如果你自己没有好的品味,你又怎么能认出优秀的设计师呢?根据定义,你无法从他的作品集中看出来。你也不能看他得过什么奖或者做过什么工作,因为在设计界以及大多数领域,这些往往是由潮流和社交驱动的,真正的能力顶多排在第三位。这是无法绕过的坎:如果你不知道什么是美,你就无法管理一个旨在生产美的事物的过程。美国车之所以丑,是因为美国汽车公司是由没有品味的人掌管的。
The problem is not so much the day to day management. Really good hackers are practically self-managing. The problem is, if you're not a hacker, you can't tell who the good hackers are. A similar problem explains why American cars are so ugly. I call it the design paradox. You might think that you could make your products beautiful just by hiring a great designer to design them. But if you yourself don't have good taste, how are you going to recognize a good designer? By definition you can't tell from his portfolio. And you can't go by the awards he's won or the jobs he's had, because in design, as in most fields, those tend to be driven by fashion and schmoozing, with actual ability a distant third. There's no way around it: you can't manage a process intended to produce beautiful things without knowing what beautiful is. American cars are ugly because American car companies are run by people with bad taste.
这个国家的许多人认为品味是难以捉摸的,甚至是微不足道的。其实不然。为了驱动设计,管理者必须是公司产品最苛刻的用户。如果你有极佳的品味,你就可以像史蒂夫·乔布斯那样,把满足你的要求变成优秀人才乐于去解决的挑战。
Many people in this country think of taste as something elusive, or even frivolous. It is neither. To drive design, a manager must be the most demanding user of a company's products. And if you have really good taste, you can, as Steve Jobs does, make satisfying you the kind of problem that good people like to work on.
恶心的小问题
Nasty Little Problems
很容易说出哪些问题是无趣的:那些不需要你解决几个宏大、清晰的问题,而是需要你解决一堆恶心的小问题的项目。最糟糕的项目之一就是为一个漏洞百出的软件写接口。另一个是当你必须根据单个客户复杂且模糊的需求进行定制化开发。对黑客来说,这种项目简直是千刀万剐的折磨。
It's pretty easy to say what kinds of problems are not interesting: those where instead of solving a few big, clear, problems, you have to solve a lot of nasty little ones. One of the worst kinds of projects is writing an interface to a piece of software that's full of bugs. Another is when you have to customize something for an individual client's complex and ill-defined needs. To hackers these kinds of projects are the death of a thousand cuts.
恶心的小问题最显著的特征是,你无法从中学到任何东西。写一个编译器很有趣,因为它能教你什么是编译器。但是为一个充满 Bug 的软件写接口学不到任何东西,因为那些 Bug 是随机的。 [3] 因此,优秀黑客避开这些恶心的小问题,不仅仅是因为挑剔,更是一个关乎自我保护的问题。做恶心的小问题会让人变蠢。优秀的黑客避开它们,就像模特避开芝士汉堡一样。
The distinguishing feature of nasty little problems is that you don't learn anything from them. Writing a compiler is interesting because it teaches you what a compiler is. But writing an interface to a buggy piece of software doesn't teach you anything, because the bugs are random. [3] So it's not just fastidiousness that makes good hackers avoid nasty little problems. It's more a question of self-preservation. Working on nasty little problems makes you stupid. Good hackers avoid it for the same reason models avoid cheeseburgers.
当然,有些问题天生就带有这种特征。由于供求关系,这些工作的报酬往往特别丰厚。因此,如果一家公司能找到办法让伟大的黑客去解决枯燥的问题,它将会非常成功。你要怎么做呢?
Of course some problems inherently have this character. And because of supply and demand, they pay especially well. So a company that found a way to get great hackers to work on tedious problems would be very successful. How would you do it?
创业公司就是这样一个地方。在我们的创业公司里,我们让罗伯特·莫里斯(Robert Morris)当系统管理员。这就像请滚石乐队去成人礼上演奏一样。你平时是雇不到这种天才的。但如果是自己创立的公司,人们愿意做任何繁琐的杂活。 [4]
One place this happens is in startups. At our startup we had Robert Morris working as a system administrator. That's like having the Rolling Stones play at a bar mitzvah. You can't hire that kind of talent. But people will do any amount of drudgery for companies of which they're the founders. [4]
大公司解决这个问题的方法是进行部门划分。他们通过建立独立的研发部门来吸引聪明人,让员工不需要直接面对客户那些恶心的小问题。 [5] 在这种模式下,研究部门就像一个矿场,他们生产新想法,公司其他部门或许可以使用这些想法。
Bigger companies solve the problem by partitioning the company. They get smart people to work for them by establishing a separate R&D department where employees don't have to work directly on customers' nasty little problems. [5] In this model, the research department functions like a mine. They produce new ideas; maybe the rest of the company will be able to use them.
你可能不需要走这个极端。自底向上编程提供了另一种划分公司的方法:让聪明人充当工具制造者。如果你的公司开发做 X 的软件,可以让一个小组构建开发此类软件的工具,另一个小组使用这些工具来编写应用。这样,你就可以让聪明人编写 99% 的代码,同时让他们几乎像在传统的研发部门一样,与用户保持隔离。工具制造者也会有用户,但这些用户只是公司内部的开发者。 [6]
You may not have to go to this extreme. Bottom-up programming suggests another way to partition the company: have the smart people work as toolmakers. If your company makes software to do x, have one group that builds tools for writing software of that type, and another that uses these tools to write the applications. This way you might be able to get smart people to write 99% of your code, but still keep them almost as insulated from users as they would be in a traditional research department. The toolmakers would have users, but they'd only be the company's own developers. [6]
如果微软采用这种方法,他们的软件就不会有这么多安全漏洞,因为没那么聪明的应用开发人员就不需要做内存分配等底层工作了。他们不用直接用 C 语言写 Word,而是可以用 Word 专用语言把大块的乐高积木拼在一起。(我相信专业术语应该叫大颗粒乐高 Duplo。)
If Microsoft used this approach, their software wouldn't be so full of security holes, because the less smart people writing the actual applications wouldn't be doing low-level stuff like allocating memory. Instead of writing Word directly in C, they'd be plugging together big Lego blocks of Word-language. (Duplo, I believe, is the technical term.)
聚集效应
Clumping
除了有趣的问题,优秀黑客喜欢的还有其他优秀的黑客。伟大的黑客倾向于聚集在一起——有时聚集的规模极其壮观,比如在施乐帕罗奥多研究中心(Xerox Parc)。因此,你吸引优秀黑客的能力,并不会随着你创造的环境变好而呈线性增长。这种聚集倾向意味着它更像是环境质量的平方关系。所以这是赢家通吃的。在任何特定的时期,世界上最吸引黑客工作的地方大概只有十到二十个。如果你不是其中之一,你不仅是拥有的伟大黑客较少,而是根本一个都没有。
Along with interesting problems, what good hackers like is other good hackers. Great hackers tend to clump together-- sometimes spectacularly so, as at Xerox Parc. So you won't attract good hackers in linear proportion to how good an environment you create for them. The tendency to clump means it's more like the square of the environment. So it's winner take all. At any given time, there are only about ten or twenty places where hackers most want to work, and if you aren't one of them, you won't just have fewer great hackers, you'll have zero.
拥有伟大的黑客本身并不足以让一家公司获得成功。这在谷歌和 ITA(目前最热门的两个地方)行得通,但它并没有帮到 Thinking Machines 或施乐。Sun 公司曾红极一时,但他们的商业模式正像下行的电梯。在这种情况下,即使是最好的黑客也救不了你。
Having great hackers is not, by itself, enough to make a company successful. It works well for Google and ITA, which are two of the hot spots right now, but it didn't help Thinking Machines or Xerox. Sun had a good run for a while, but their business model is a down elevator. In that situation, even the best hackers can't save you.
不过我认为,在其他条件相同的情况下,能够吸引伟大黑客的公司将拥有巨大的优势。有些人可能不同意这一点。我们在 20 世纪 90 年代拜访风投公司时,好几家风投告诉我们,软件公司赢不赢不靠写出伟大的软件,而是靠品牌、垄断渠道以及做对交易。
I think, though, that all other things being equal, a company that can attract great hackers will have a huge advantage. There are people who would disagree with this. When we were making the rounds of venture capital firms in the 1990s, several told us that software companies didn't win by writing great software, but through brand, and dominating channels, and doing the right deals.
他们似乎真这么想,而且我想我知道原因。我认为许多风投在潜意识里寻找的是下一个微软。当然,如果微软是你的模版,你就不应该寻找那些希望靠写出伟大软件来取胜的公司。但风投寻找下一个微软是错误的,因为没有哪家创业公司能成为下一个微软,除非有另一家大公司准备在恰当的时刻拱手让贤,成为下一个 IBM。
They really seemed to believe this, and I think I know why. I think what a lot of VCs are looking for, at least unconsciously, is the next Microsoft. And of course if Microsoft is your model, you shouldn't be looking for companies that hope to win by writing great software. But VCs are mistaken to look for the next Microsoft, because no startup can be the next Microsoft unless some other company is prepared to bend over at just the right moment and be the next IBM.
以微软为模板是个错误,因为他们的整个文化都源于那一次幸运的机遇。微软是一个糟糕的数据点。如果你把他们排除在外,你会发现好的产品确实倾向于在市场上获胜。风投应该寻找的是下一个苹果,或者下一个谷歌。
It's a mistake to use Microsoft as a model, because their whole culture derives from that one lucky break. Microsoft is a bad data point. If you throw them out, you find that good products do tend to win in the market. What VCs should be looking for is the next Apple, or the next Google.
我想比尔·盖茨明白这一点。谷歌让他担心的不是他们的品牌力量,而是他们拥有更好的黑客。 [7]
I think Bill Gates knows this. What worries him about Google is not the power of their brand, but the fact that they have better hackers. [7]
识别
Recognition
那么,谁是伟大的黑客?当你遇到一个时,你怎么知道?事实证明这非常难,甚至连黑客自己也说不准。我现在非常确信我的朋友特雷弗·布莱克威尔(Trevor Blackwell)是一个伟大的黑客。你可能在 Slashdot 上读到过他是如何自己做了一台 Segway的。这个项目最惊人的一点是,他在一天之内写完了所有的软件(顺便说一句,是用 Python 写的)。
So who are the great hackers? How do you know when you meet one? That turns out to be very hard. Even hackers can't tell. I'm pretty sure now that my friend Trevor Blackwell is a great hacker. You may have read on Slashdot how he made his own Segway. The remarkable thing about this project was that he wrote all the software in one day (in Python, incidentally).
对特雷弗来说,这只是家常便饭。但我第一次见到他时,我觉得他是个彻头彻尾的白痴。当时他站在罗伯特·莫里斯的办公室里,跟罗伯特唠叨着什么,我记得我站在他身后,拼命向罗伯特做手势,想把这个疯子赶走,好让我们去吃午饭。罗伯特说他起初也看走眼了。显然,罗伯特第一次见到他时,特雷弗刚刚开始一项新计划,要把他生活的方方面面记录在一叠索引卡上,走到哪儿带到哪儿。他当时刚从加拿大来,带着浓重的加拿大口音,还留着一个鲻鱼头发型。
For Trevor, that's par for the course. But when I first met him, I thought he was a complete idiot. He was standing in Robert Morris's office babbling at him about something or other, and I remember standing behind him making frantic gestures at Robert to shoo this nut out of his office so we could go to lunch. Robert says he misjudged Trevor at first too. Apparently when Robert first met him, Trevor had just begun a new scheme that involved writing down everything about every aspect of his life on a stack of index cards, which he carried with him everywhere. He'd also just arrived from Canada, and had a strong Canadian accent and a mullet.
这个问题之所以更加复杂,是因为黑客虽然名声上不修边幅、不通人情,但有时也会花很大精力让自己看起来很聪明。在读研究生时,我偶尔会去 MIT 的人工智能实验室转转。刚开始有点被吓到了。那里的每个人说话都极快。但过了一段时间,我学会了快速说话的诀窍。你不需要思考得更快,只要用两倍的词汇量把每件事说一遍就行了。
The problem is compounded by the fact that hackers, despite their reputation for social obliviousness, sometimes put a good deal of effort into seeming smart. When I was in grad school I used to hang around the MIT AI Lab occasionally. It was kind of intimidating at first. Everyone there spoke so fast. But after a while I learned the trick of speaking fast. You don't have to think any faster; just use twice as many words to say everything.
信号中夹杂着这么多噪音,你很难在见面时就认出优秀的黑客。即使是现在,我也看不出来。你也没法从他们的简历中看出来。评判一个黑客的唯一方法,似乎就是和他一起做点什么。
With this amount of noise in the signal, it's hard to tell good hackers when you meet them. I can't tell, even now. You also can't tell from their resumes. It seems like the only way to judge a hacker is to work with him on something.
这就是为什么高科技区域只在大学周围出现的原因。这里的活性成分不怎么是教授,而是学生。创业公司在大学周围蓬勃发展,因为大学把有前途的年轻人聚集在一起,让他们在同一个项目上工作。聪明人知道了谁是其他聪明人,然后一起谋划他们自己的新项目。
And this is the reason that high-tech areas only happen around universities. The active ingredient here is not so much the professors as the students. Startups grow up around universities because universities bring together promising young people and make them work on the same projects. The smart ones learn who the other smart ones are, and together they cook up new projects of their own.
因为除了和黑客一起工作之外,你无法分辨他是否优秀,所以黑客自己也不知道自己有多好。在大多数领域,这在一定程度上都是真的。我发现那些在某方面很伟大的人,与其说确信自己的伟大,不如说对为什么其他人看起来如此无能感到困惑。
Because you can't tell a great hacker except by working with him, hackers themselves can't tell how good they are. This is true to a degree in most fields. I've found that people who are great at something are not so much convinced of their own greatness as mystified at why everyone else seems so incompetent.
但黑客尤其难以知道自己有多好,因为很难对比他们的工作。在大多数其他领域,这要容易得多。在百米赛跑中,你 10 秒钟就能知道谁最快。即使在数学界,对于哪些问题难以解决以及什么才是好的解决方案,似乎也有普遍共识。但编程就像写作。谁能说两部小说哪一部更好?作者显然说不准。
But it's particularly hard for hackers to know how good they are, because it's hard to compare their work. This is easier in most other fields. In the hundred meters, you know in 10 seconds who's fastest. Even in math there seems to be a general consensus about which problems are hard to solve, and what constitutes a good solution. But hacking is like writing. Who can say which of two novels is better? Certainly not the authors.
至少对于黑客来说,其他黑客是可以看出来的。因为与小说家不同,黑客在项目上是协同工作的。当你能通过网络向某人抛出几个难题时,你很快就能看出他们回击得有多重。但黑客无法看着自己工作。所以,如果你问一个伟大的黑客他有多优秀,他几乎肯定会回答:我不知道。他不仅是在谦虚,他是真的不知道。
With hackers, at least, other hackers can tell. That's because, unlike novelists, hackers collaborate on projects. When you get to hit a few difficult problems over the net at someone, you learn pretty quickly how hard they hit them back. But hackers can't watch themselves at work. So if you ask a great hacker how good he is, he's almost certain to reply, I don't know. He's not just being modest. He really doesn't know.
我们大家也都不知情,除非是和我们实际共事过的人。这让我们处于一个奇怪的境地:我们不知道谁该是我们的英雄。成名的黑客往往是因为公关的随机偶然。有时我需要举一个伟大黑客的例子,我总是不知道该用谁。脑海中浮现的第一个名字往往是我私下认识的人,但用他们似乎有点说不过去。所以我想,也许我应该说理查德·斯托曼(Richard Stallman),或者林纳斯·托瓦兹(Linus Torvalds),或者艾伦·凯(Alan Kay),或者其他名人。但我完全不知道这些人是不是伟大的黑客。我从未和他们一起做过任何项目。
And none of us know, except about people we've actually worked with. Which puts us in a weird situation: we don't know who our heroes should be. The hackers who become famous tend to become famous by random accidents of PR. Occasionally I need to give an example of a great hacker, and I never know who to use. The first names that come to mind always tend to be people I know personally, but it seems lame to use them. So, I think, maybe I should say Richard Stallman, or Linus Torvalds, or Alan Kay, or someone famous like that. But I have no idea if these guys are great hackers. I've never worked with them on anything.
如果编程界有一个迈克尔·乔丹,没人知道是谁,包括他自己。
If there is a Michael Jordan of hacking, no one knows, including him.
培养
Cultivation
最后是所有黑客一直在思考的问题:如何成为一名伟大的黑客?我不知道是否能把自己培养成一个。但做一些让自己变蠢的事情肯定是办得到的,如果你能让自己变蠢,你大概也能让自己变聪明。
Finally, the question the hackers have all been wondering about: how do you become a great hacker? I don't know if it's possible to make yourself into one. But it's certainly possible to do things that make you stupid, and if you can make yourself stupid, you can probably make yourself smart too.
成为优秀黑客的关键可能在于做你喜欢的事。当我想到我认识的伟大黑客时,他们有一个共同点:极难强迫他们去做他们不想做的事情。我不知道这是因还是果,可能兼而有之。
The key to being a good hacker may be to work on what you like. When I think about the great hackers I know, one thing they have in common is the extreme difficulty of making them work on anything they don't want to. I don't know if this is cause or effect; it may be both.
要想把一件事做好,你必须热爱它。因此,只要你能在最大程度上把编程保留为你热爱的事情,你就很可能把它做好。试着保持你 14 岁时对编程的那种好奇和惊叹。如果你担心当前的工作正在腐蚀你的大脑,那它很可能确实在腐蚀。
To do something well you have to love it. So to the extent you can preserve hacking as something you love, you're likely to do it well. Try to keep the sense of wonder you had about programming at age 14. If you're worried that your current job is rotting your brain, it probably is.
最顶尖的黑客往往很聪明,这在很多领域都是如此。黑客是否有某种独有的品质?我问了一些朋友,他们提到最多的第一点就是好奇心。我一直以为所有聪明的人都很好奇——好奇心只是知识的一阶导数。但显然黑客尤其好奇,特别是对事情是如何运作的。这说得通,因为程序在效果上就是对事物如何运作的巨幅描述。
The best hackers tend to be smart, of course, but that's true in a lot of fields. Is there some quality that's unique to hackers? I asked some friends, and the number one thing they mentioned was curiosity. I'd always supposed that all smart people were curious-- that curiosity was simply the first derivative of knowledge. But apparently hackers are particularly curious, especially about how things work. That makes sense, because programs are in effect giant descriptions of how things work.
几位朋友提到了黑客的专注能力——正如其中一人所说,他们有能力“屏除脑子以外的一切干扰”。我确实注意到了这一点。我听好几位黑客说过,喝了半杯啤酒之后,他们就完全无法编程了。所以也许编程确实需要某种特殊的专注能力。也许伟大的黑客能在大脑中装载大量的上下文,以至于当他们看着一行代码时,看到的不仅是这一行,而是它周围的整个程序。约翰·麦克菲(John McPhee)写道,比尔·布拉德利(Bill Bradley)作为篮球运动员的成功,部分归功于他非凡的外围视觉。普通的“完美”视力意味着大约 47 度的垂直外围视觉。比尔·布拉德利有 70 度;他看着地板时也能看到篮筐。也许伟大的黑客也有类似的先天能力。(我通过使用非常紧凑的语言来作弊,这缩小了球场范围。)
Several friends mentioned hackers' ability to concentrate-- their ability, as one put it, to "tune out everything outside their own heads.'' I've certainly noticed this. And I've heard several hackers say that after drinking even half a beer they can't program at all. So maybe hacking does require some special ability to focus. Perhaps great hackers can load a large amount of context into their head, so that when they look at a line of code, they see not just that line but the whole program around it. John McPhee wrote that Bill Bradley's success as a basketball player was due partly to his extraordinary peripheral vision. "Perfect'' eyesight means about 47 degrees of vertical peripheral vision. Bill Bradley had 70; he could see the basket when he was looking at the floor. Maybe great hackers have some similar inborn ability. (I cheat by using a very dense language, which shrinks the court.)
这可以解释为什么大家对格子间产生分歧。也许负责办公设施的人自己没有什么注意力需要集中,所以根本不知道在格子间里工作对黑客来说,感觉就像把大脑放进了搅拌机里。(而比尔,如果关于自闭症的传言是真的,他再清楚不过了。)
This could explain the disconnect over cubicles. Maybe the people in charge of facilities, not having any concentration to shatter, have no idea that working in a cubicle feels to a hacker like having one's brain in a blender. (Whereas Bill, if the rumors of autism are true, knows all too well.)
我注意到伟大黑客与普通聪明人之间的一个区别是,黑客往往更加政治不正确。如果说优秀黑客之间有什么接头暗号的话,那就是当他们彼此足够熟悉时,会表达一些如果公之于众会被大众乱石砸死的观点。我能明白为什么政治不正确在编程中是一项有用的品质。程序非常复杂,而且至少在优秀的程序员手中是非常流动的。在这种情况下,养成质疑假设的习惯是很有帮助的。
One difference I've noticed between great hackers and smart people in general is that hackers are more politically incorrect. To the extent there is a secret handshake among good hackers, it's when they know one another well enough to express opinions that would get them stoned to death by the general public. And I can see why political incorrectness would be a useful quality in programming. Programs are very complex and, at least in the hands of good programmers, very fluid. In such situations it's helpful to have a habit of questioning assumptions.
你能培养这些品质吗?我不知道。但你至少可以不压抑它们。所以这是我能给出的最好秘诀。如果有可能把自己变成一个伟大的黑客,方法可能是和自己达成以下协议:永远不去做无聊的项目(除非你的家人要饿肚子),作为回报,你永远不允许自己把工作做得敷衍了事。我认识的所有伟大黑客似乎都达成了这个协议,尽管他们中可能没人有别的选择。
Can you cultivate these qualities? I don't know. But you can at least not repress them. So here is my best shot at a recipe. If it is possible to make yourself into a great hacker, the way to do it may be to make the following deal with yourself: you never have to work on boring projects (unless your family will starve otherwise), and in return, you'll never allow yourself to do a half-assed job. All the great hackers I know seem to have made that deal, though perhaps none of them had any choice in the matter.
注释
Notes
[1] 公平地说,我必须承认 IBM 制造了不错的硬件。我就是在 IBM 笔记本上写下这篇文章的。
[1] In fairness, I have to say that IBM makes decent hardware. I wrote this on an IBM laptop.
[2] 他们最后确实完蛋了。几个月后他们就关闭了。
[2] They did turn out to be doomed. They shut down a few months later.
[3] 我认为这就是人们谈论“生命的意义”时的意思。表面上看,这是一个奇怪的想法。生命不是一种表达,它怎么会有意义呢?但它可以拥有一种感觉非常像意义的品质。在像编译器这样的项目里,你必须解决很多问题,但这些问题都落入一个模式中,就像信号一样。而当你必须解决的问题是随机的,它们看起来就像噪音。
[3] I think this is what people mean when they talk about the "meaning of life." On the face of it, this seems an odd idea. Life isn't an expression; how could it have meaning? But it can have a quality that feels a lot like meaning. In a project like a compiler, you have to solve a lot of problems, but the problems all fall into a pattern, as in a signal. Whereas when the problems you have to solve are random, they seem like noise.
[4] 爱因斯坦曾在某个阶段设计过冰箱。(他拥有股份。)
[4] Einstein at one point worked designing refrigerators. (He had equity.)
[5] 很难准确说出计算机世界里的研究是由什么构成的,但作为粗略的近似,它就是没有用户的软件。
[5] It's hard to say exactly what constitutes research in the computer world, but as a first approximation, it's software that doesn't have users.
我不认为发表论文是让最好的黑客想在研究部门工作的动力。我认为主要是不用和产品经理开三个小时的会,讨论如何把韩文版的 Word 13.27 与会说话的回形针整合在一起的问题。
I don't think it's publication that makes the best hackers want to work in research departments. I think it's mainly not having to have a three hour meeting with a product manager about problems integrating the Korean version of Word 13.27 with the talking paperclip.
[6] 建筑行业很长一段时间以来一直在发生类似的事情。几百年前,当你盖一栋房子时,当地的建筑工人会建造里面的所有东西。但现在,建筑工人越来越多地只是组装由别人设计和制造的部件。就像桌面出版系统的到来一样,这给了人们以灾难性方式进行实验的自由,但它确实更有效率。
[6] Something similar has been happening for a long time in the construction industry. When you had a house built a couple hundred years ago, the local builders built everything in it. But increasingly what builders do is assemble components designed and manufactured by someone else. This has, like the arrival of desktop publishing, given people the freedom to experiment in disastrous ways, but it is certainly more efficient.
[7] 谷歌对微软的危险性远大于当年的网景。可能比以往任何其他公司都要危险。尤其是因为他们决心战斗。在他们的招聘页面上,他们说他们的“核心价值”之一是“不作恶”。对于一家销售大豆油或采矿设备的公司来说,这样的声明仅仅是古怪。但我认为我们计算机界的所有人都知道这是对谁宣战。
[7] Google is much more dangerous to Microsoft than Netscape was. Probably more dangerous than any other company has ever been. Not least because they're determined to fight. On their job listing page, they say that one of their "core values'' is "Don't be evil.'' From a company selling soybean oil or mining equipment, such a statement would merely be eccentric. But I think all of us in the computer world recognize who that is a declaration of war on.
感谢 Jessica Livingston、Robert Morris 和 Sarah Harlin 阅读了本演讲的早期版本。
Thanks to Jessica Livingston, Robert Morris, and Sarah Harlin for reading earlier versions of this talk.