伟大的黑客

Paul Graham 2004-07-01

伟大的黑客

2004年7月

(本文源自2004年Oscon大会的演讲。)

几个月前我完成了一本新书,在评论中我不断注意到诸如”挑衅性”和”争议性”的词语。更不用说”白痴”了。

我并不是想让这本书具有争议性。我试图让它高效。我不想浪费人们的时间告诉他们他们已经知道的事情。更高效的方法只是给他们差异。但我想这必然会产生一本令人担忧的书。

爱迪生们

最具争议的想法是:财富的差异可能并不像我们想象的那么大问题。

我在书中没有说财富差异本身就是好事。我说在某些情况下它可能是好事的标志。剧烈的头痛不是好事,但它可能是好事的标志——例如,你被击中头部后正在恢复意识。

财富差异可能是生产力差异的标志。(在一个人的社会中,它们是相同的。)这几乎肯定是好事:如果你的社会没有生产力差异,可能不是因为每个人都是托马斯·爱迪生。而是因为你没有托马斯·爱迪生。

在低技术社会中,你看不到太多的生产力差异。如果你有一群游牧民族为火收集木棍,最好的木棍收集者比最差的能多收集多少?两倍?而当你给人们一个像电脑这样的复杂工具时,他们能用它做的事情的差异是巨大的。

这不是一个新想法。Fred Brooks在1974年写过这个,他引用的研究发表于1968年。但我认为他低估了程序员之间的差异。他写了代码行数方面的生产力:最好的程序员可以在十分之一的时间内解决给定问题。但如果问题没有给定呢?在编程中,就像在许多领域一样,困难的部分不是解决问题,而是决定要解决什么问题。想象力很难衡量,但在实践中它主导着以代码行数衡量的那种生产力。

生产力在任何领域都有变化,但很少有领域变化如此之大。程序员之间的差异如此之大,以至于成为一种质的差异。我不认为这是编程固有的,但在每个领域,技术都放大了生产力的差异。我认为编程中发生的事情只是因为我们有很多技术杠杆。但在每个领域,杠杆都在变长,所以我们看到的差异是随着时间的推移,越来越多的领域都会看到的。公司和国家的成功将越来越取决于他们如何应对这个问题。

如果生产力的差异随着技术而增加,那么最有生产力个体的贡献不仅会不成比例地大,而且会随着时间的推移而实际增长。当你达到一个群体的90%产出由其1%的成员创造的地步时,如果有什么(无论是维京袭击,还是中央计划)将他们的生产力拖到平均水平,你就会损失惨重。

如果我们想充分利用他们,我们需要了解这些特别有生产力的人。什么激励他们?他们需要什么来做他们的工作?你如何认识他们?你如何让他们来为你工作?然后当然还有这个问题,你如何成为其中一员?

不仅仅是金钱

我认识一些超级黑客,所以我坐下来思考他们有什么共同点。他们的决定性品质可能是他们真的喜欢编程。普通程序员写代码是为了付账单。伟大的黑客认为这是他们为了乐趣而做的事情,并且很高兴发现有人会为此付钱。

伟大的程序员有时被认为对金钱漠不关心。这不完全正确。确实,他们真正关心的只是做有趣的工作。但如果你赚了足够的钱,你就可以做任何你想做的工作,因此黑客被赚取巨额金钱的想法所吸引。但只要他们还必须每天上班工作,他们更关心在那里做什么,而不是得到多少报酬。

从经济学上讲,这是最重要的事实,因为这意味着你不必支付伟大的黑客接近他们价值的报酬。一个伟大的程序员可能比普通程序员生产力高十倍或一百倍,但他会认为能获得三倍报酬就很幸运了。正如我稍后要解释的,这部分是因为伟大的黑客不知道他们有多好。但也是因为金钱不是他们主要想要的东西。

黑客想要什么?像所有工匠一样,黑客喜欢好工具。事实上,这低估了。好的黑客发现无法忍受使用坏工具。他们会拒绝在错误基础设施的项目上工作。

在我曾经工作过的一家创业公司,我们公告板上钉着的一张东西是IBM的广告。那是一张AS400的图片,标题写着,我认为,“黑客鄙视它。“[1]

当你决定为项目使用什么基础设施时,你不仅在做出技术决定。你还在做出社会决定,而这可能是两者中更重要的。例如,如果你的公司想写一些软件,用Java写似乎是一个谨慎的选择。但当你选择一种语言时,你也在选择一个社区。你能雇佣来在Java项目上工作的程序员不会像你能雇佣来在Python项目上工作的那样聪明。而你的黑客的质量可能比你选择的语言更重要。虽然,坦率地说,好的黑客更喜欢Python而不是Java这一事实应该告诉你这些语言的相对优点。

商业类型更喜欢最流行的语言,因为他们将语言视为标准。他们不想在公司上下注Betamax。但语言的问题是,它们不仅仅是标准。如果你必须通过网络传输比特,务必使用TCP/IP。但编程语言不仅仅是格式。编程语言是一种表达媒介。

我读到Java刚刚超过Cobol成为最流行的语言。作为标准,你不能期望更多。但作为表达媒介,你可以做得更好。在我能想到的所有伟大程序员中,我只知道一个会自愿用Java编程。而在我能想到的所有不为Sun工作的伟大程序员中,在Java方面,我一个也不知道。

伟大的黑客通常也坚持使用开源软件。不仅仅是因为它更好,还因为它给他们更多控制权。好的黑客坚持控制权。这是使他们成为好黑客的部分原因:当某些东西坏了时,他们需要修复它。你希望他们对你为他们编写的软件有这种感觉。当他们对操作系统有同样的感觉时,你不应该感到惊讶。

几年前,一个风险投资家朋友告诉我他参与的一家新创业公司。听起来很有希望。但下次我和他交谈时,他们说他们决定在Windows NT上构建软件,并刚刚聘请了一位非常有经验的NT开发者担任首席技术官。当我听到这个时,我想,这些人注定要失败。第一,CTO不可能是第一流黑客,因为要成为杰出的NT开发者,他必须自愿多次使用NT,我无法想象一个伟大的黑客会这样做;第二,即使他很好,如果项目必须在NT上构建,他也很难雇佣到优秀的人才。[2]

最后的边疆

除了软件,黑客最重要的工具可能是他的办公室。大公司认为办公室空间的功能是表达等级。但黑客不仅仅为此使用办公室:他们将办公室作为思考的地方。如果你是一家技术公司,他们的思想就是你的产品。所以让黑客在嘈杂、分散注意力的环境中工作,就像在油漆厂空气中充满烟尘。

连环漫画Dilbert有很多关于隔间的说法,这是有充分理由的。我认识的所有黑客都鄙视它们。仅仅被中断的前景就足以阻止黑客处理困难问题。如果你想在有隔间的办公室里完成真正的工作,你只有两个选择:在家工作,或在别人不在的时候早点来、晚点来或周末来。公司没有意识到这是出了问题的标志吗?办公室环境应该是有助于你工作的东西,而不是你尽管如此才工作的东西。

像思科这样的公司为每个人都有一间隔间而自豪,即使是CEO。但他们不像他们想象的那么先进;显然他们仍然将办公室空间视为等级的标志。还要注意,思科以很少在内部进行产品开发而闻名。他们通过收购创造新技术的创业公司来获得新技术——大概在那里黑客确实有安静的工作地方。

一家理解黑客需求的大公司是微软。我曾经看到过微软的招聘广告,有一张门的大图片。为我们工作,前提是,我们会给你一个可以真正完成工作的地方。而且你知道,微软在大公司中之所以非凡,是因为他们能够在内部开发软件。也许不太好,但足够好。

如果公司希望黑客有生产力,他们应该看看他们在家里做什么。在家里,黑客可以自己安排事情,以便完成最多的工作。当黑客在家工作时,他们不在嘈杂、开放的空间工作;他们在有门的房间里工作。他们在舒适、社区化的地方工作,周围有人,需要思考时可以散步,而不是在停车场英亩的玻璃盒子里。他们有可以在感到疲倦时小睡的沙发,而不是坐在桌前昏迷,假装工作。没有吸尘器人员在每晚黑客黄金时间呼啸而过。没有会议,或者,天哪,公司静修或团队建设练习。当你看他们在电脑上做什么时,你会发现它强化了我之前关于工具的说法。他们在工作时可能必须使用Java和Windows,但在家里,当他们可以自由选择时,你更可能发现他们使用Perl和Linux。

事实上,这些关于Cobol或Java是最流行语言的统计数据可能会产生误导。如果我们想知道什么工具最好,我们应该看的是黑客在可以自由选择时选择什么——也就是说,在他们自己的项目中。当你问这个问题时,你会发现开源操作系统已经占据了主导市场份额,排名第一的语言可能是Perl。

有趣

除了好工具,黑客想要有趣的项目。什么使项目有趣?嗯,显然像隐形飞机或特效软件那样明显性感的应用程序会很有趣。但任何应用程序如果提出新颖的技术挑战,都可能很有趣。所以很难预测黑客会喜欢哪些问题,因为有些只有在工作的人发现新的解决方案时才变得有趣。在ITA(编写Orbitz内部软件的公司)之前,从事机票价格搜索的人可能认为这是可以想象的最无聊的应用程序。但ITA通过以更雄心勃勃的方式重新定义问题使其变得有趣。

我认为谷歌也发生了同样的事情。当谷歌成立时,所谓门户网站的传统看法是搜索很无聊且不重要。但谷歌的人不认为搜索无聊,这就是为什么他们做得这么好。

这是管理者可以有所作为的领域。就像父母对孩子说,我打赌你不能在十分钟内清理整个房间,一个好的管理者有时可以将问题重新定义为更有趣的问题。史蒂夫·乔布斯似乎特别擅长这个,部分原因只是因为他有高标准。在Mac之前有很多小型、便宜的电脑。他将问题重新定义为:制造一个漂亮的。这可能比任何胡萝卜或大棒更能驱动开发者。

他们确实做到了。当Mac首次出现时,你甚至不必打开它就知道它会很好;你可以从机箱上看出来。几周前我在剑桥的街上走,在某个人的垃圾里我看到了一个似乎是Mac手提箱的东西。我往里看,里面有一台Mac SE。我带回家插上电,它启动了。快乐的Macintosh脸,然后是finder。我的天,它是如此简单。就像…谷歌。

黑客喜欢为有高标准的人工作。但仅仅精确是不够的。你必须坚持正确的事情。这通常意味着你必须自己是一个黑客。我偶尔看到过关于如何管理程序员的文章。真的应该有两篇文章:一篇是关于如果你自己是程序员该做什么,另一篇是关于如果你不是该做什么。而第二篇可能可以浓缩成两个词:放弃。

问题不在于日常管理。真正好的黑客几乎是自我管理的。问题是,如果你不是黑客,你无法分辨谁是好黑客。一个类似的问题解释了为什么美国汽车如此丑陋。我称之为设计悖论。你可能认为你可以通过雇佣伟大的设计师来设计产品而使产品美丽。但如果你自己没有好品味,你如何认识好设计师?根据定义,你无法从他的作品集中判断。你也不能看他获得的奖项或工作,因为在设计领域,就像在大多数领域一样,这些往往是由时尚和交际驱动的,而实际能力排在第三位。没有办法:你无法在不知道什么是美丽的情况下管理一个旨在生产美丽的过程。美国汽车丑陋是因为美国汽车公司由品味差的人经营。

这个国家的许多人认为品味是难以捉摸的,甚至是轻浮的。它都不是。要推动设计,管理者必须是公司产品最苛刻的用户。如果你真的有好品味,你可以像史蒂夫·乔布斯那样,使满足你成为好人喜欢解决的问题。

讨厌的小问题

很容易说什么样的问题不是有趣的:那些你必须解决很多讨厌小问题,而不是解决几个大的、清晰的问题。最糟糕的项目之一是为充满错误的软件编写接口。另一个是当你必须为个别客户的复杂和定义不清的需求定制东西。对黑客来说,这类项目是千刀万剐的死亡。

讨厌小问题的区别特征是你从中学不到任何东西。编写编译器很有趣,因为它教你什么是编译器。但为有错误的软件编写接口教不了你任何东西,因为错误是随机的。[3] 所以不仅仅是挑剔使好黑客避免讨厌的小问题。这更多是自我保护的问题。处理讨厌的小问题会让你变笨。好黑客避免它就像模特避免奶酪汉堡一样。

当然,有些问题固有这种特征。由于供需关系,它们报酬特别高。所以找到方法让伟大黑客处理繁琐问题的公司会非常成功。你会怎么做?

这种情况发生的一个地方是创业公司。在我们的创业公司,我们有Robert Morris担任系统管理员。这就像让滚石乐队在犹太成年礼上演奏。你雇佣不到那种人才。但人们会为他们创始人的公司做任何艰苦的工作。[4]

大公司通过分割公司来解决这个问题。他们通过建立独立的研发部门来吸引聪明的人为他们工作,员工不必直接处理客户讨厌的小问题。[5] 在这个模型中,研发部门的功能就像矿山。他们产生新想法;也许公司其余部分能够使用它们。

你可能不必走到这种极端。自底向上编程提供了另一种分割公司的方法:让聪明的人作为工具制造者工作。如果你的公司制造做x的软件,让一个组构建用于编写这类软件的工具,另一个组使用这些工具编写应用程序。这样你可能能够让聪明的人写99%的代码,但仍然让他们像在传统研发部门那样与用户几乎隔离。工具制造者会有用户,但他们只是公司自己的开发者。[6]

如果微软使用这种方法,他们的软件就不会充满安全漏洞,因为编写实际应用程序的较不聪明的人不会做分配内存这样的低级工作。他们不会直接用C编写Word,而是将Word语言的大型乐高积木拼在一起。(Duplo,我相信是技术术语。)

聚集

除了有趣的问题,好黑客喜欢的还有其他好黑客。伟大的黑客倾向于聚集在一起——有时如此壮观,就像在施乐帕洛阿尔托研究中心。所以你不会以线性比例吸引好黑客,因为你为他们创造的环境有多好。聚集的倾向意味着它更像是环境的平方。所以赢家通吃。在任何给定时间,只有大约十个或二十个黑客最想工作的地方,如果你不是其中之一,你不仅会有更少的伟大黑客,你会是零。

拥有伟大的黑客本身并不足以使公司成功。这对谷歌和ITA很有效,它们是现在的两个热点,但它没有帮助思维机器或施乐。Sun曾经有一段好时光,但他们的商业模式是下降电梯。在这种情况下,即使最好的黑客也救不了你。

不过,我认为,在其他条件相同的情况下,能够吸引伟大黑客的公司将具有巨大优势。有人会不同意这一点。当我们在1990年代走访风险投资公司时,几家告诉我们软件公司不是通过编写伟大的软件获胜,而是通过品牌、主导渠道和做正确的交易。

他们似乎真的相信这一点,我想我知道为什么。我认为许多风险投资家寻找的,至少在无意识中,是下一个微软。当然,如果微软是你的模型,你不应该寻找希望通过编写伟大软件获胜的公司。但风险投资家寻找下一个微软是错误的,因为没有创业公司能成为下一个微软,除非其他公司准备在恰到好处的时刻弯腰成为下一个IBM。

使用微软作为模型是错误的,因为他们的整个文化源自那一次幸运的突破。微软是一个坏的数据点。如果你把他们扔出去,你会发现好产品确实倾向于在市场上获胜。风险投资家应该寻找的是下一个苹果,或下一个谷歌。

我想比尔·盖茨知道这一点。谷歌让他担心的不是他们品牌的力量,而是他们有更好的黑客。[7]

认可

那么谁是伟大的黑客?你遇到时如何知道?结果证明这非常困难。即使是黑客也说不出来。我现在很确定我的朋友Trevor Blackwell是一个伟大的黑客。你可能读过Slashdot上关于他如何制作自己的Segway的报道。这个项目的显著之处是他在一天内写了所有软件(顺便说一句,用Python)。

对Trevor来说,这是家常便饭。但当我第一次遇到他时,我认为他是个十足的白痴。他站在Robert Morris的办公室里对他喋喋不休地说着什么,我记得我站在他身后向Robert做疯狂的手势,把这个疯子赶出办公室,这样我们就可以去吃午饭了。Robert说他一开始也误判了Trevor。显然当Robert第一次遇到他时,Trevor刚刚开始一个新计划,涉及在一堆索引卡上写下他生活各方面的所有内容,他随身携带。他也刚从加拿大来,有浓重的加拿大口音和mullet发型。

由于黑客尽管有社交迟钝的声誉,有时却花费很大努力让自己看起来聪明,这使问题更加复杂。当我在研究生院时,我偶尔会在MIT AI实验室闲逛。起初有点吓人。那里的每个人都说话这么快。但过了一会儿我学会了快速说话的技巧。你不必思考得更快;只是用两倍的词说所有事情。信号中有这么多噪音,遇到好黑客时很难分辨。我现在也分辨不出。你也无法从他们的简历中看出来。似乎判断黑客的唯一方法是和他一起处理某个问题。

这就是高科技地区只在大学周围发生的原因。这里的活性成分与其说是教授不如说是学生。创业公司在大学周围成长,因为大学将优秀的年轻人聚集在一起,让他们在相同的项目上工作。聪明的人知道其他聪明的人是谁,他们一起酝酿出自己的新项目。

因为你只能通过与他一起工作来判断伟大的黑客,黑客自己也不知道自己有多好。这在大多数领域在某种程度上都是真的。我发现擅长某事的人不是那么确信自己的伟大,而是对为什么其他人看起来如此无能感到困惑。但对黑客来说尤其难以知道自己有多好,因为很难比较他们的工作。这在大多数其他领域更容易。在百米赛跑中,你在10秒内就知道谁最快。即使在数学中,似乎也有关于哪些问题难以解决,什么构成好的解决方案的普遍共识。但黑客就像写作一样。谁能说两部小说哪部更好?作者当然不能。

至少,对于黑客,其他黑客可以分辨。这是因为,与小说家不同,黑客在项目上合作。当你在网上向某人打几个难题时,你很快就能学到他们回击的力度。但黑客无法观看自己工作。所以如果你问一个伟大的黑客他有多好,他几乎肯定会回答,我不知道。他不仅仅是在谦虚。他真的不知道。

我们中没有人知道,除了我们实际合作过的人。这使我们处于奇怪的境地:我们不知道谁应该是我们的英雄。变得有名的黑客往往是由于PR的随机事故而变得有名。偶尔我需要举一个伟大黑客的例子,我永远不知道该用谁。首先想到的往往是我个人认识的人,但使用他们似乎很蹩脚。所以,我想,也许我应该说Richard Stallman,或Linus Torvalds,或Alan Kay,或某个像那样的名人。但我不知道这些人是否是伟大的黑客。我从未与他们合作过任何事情。

如果有黑客界的迈克尔·乔丹,没有人知道,包括他自己。

培养

最后,黑客们一直想知道的问题:你如何成为一个伟大的黑客?我不知道是否有可能使自己成为这样的人。但肯定有可能做让你变笨的事情,如果你能让自己变笨,你可能也能让自己变聪明。

成为好黑客的关键可能是做你喜欢的工作。当我想起我认识的伟大黑客时,他们的共同点是极难让他们做他们不想做的事情。我不知道这是原因还是结果;可能两者都是。

要把事情做好,你必须热爱它。所以只要你能保持黑客作为你热爱的东西,你很可能做得很好。尽量保持你14岁时对编程的好奇心。如果你担心你现在的工作正在腐蚀你的大脑,它可能确实如此。

最好的黑客往往很聪明,当然,这在很多领域都是真的。有什么品质是黑客独有的吗?我问了一些朋友,他们提到的第一件事是好奇心。我一直以为所有聪明人都好奇——好奇心只是知识的一阶导数。但显然黑客特别好奇,特别是关于事物如何工作。这很有道理,因为程序实际上是如何工作的大型描述。

几个朋友提到黑客专注的能力——他们能够,正如一个人所说的,“屏蔽掉自己头脑之外的一切。“我当然注意到了。我听到几个黑客说,即使喝了半杯啤酒后他们也完全无法编程。所以也许黑客确实需要一些特殊的专注能力。也许伟大的黑客可以将大量上下文加载到头脑中,所以当他们看到一行代码时,他们看到的不仅仅是那一行,而是周围的整个程序。John McPhee写道,Bill Bradley作为篮球运动员的成功部分是由于他非凡的周边视觉。“完美”视力意味着大约47度的垂直周边视觉。Bill Bradley有70度;他可以在看地板时看到篮筐。也许伟大的黑客有某种类似的天生能力。(我通过使用非常密集的语言作弊,这缩小了场地。)

这可以解释关于隔间的脱节。也许负责设施的人,没有任何专注力可以破坏,不知道在隔间工作对黑客来说感觉就像大脑在搅拌机里。(而Bill,如果关于自闭症的传闻是真的,则非常清楚。)

我注意到伟大黑客和一般聪明人之间的一个区别是,黑客在政治上更不正确。在某种程度上,好黑客之间有秘密握手,那就是当他们彼此足够了解,能够表达会被公众用石头砸死的意见时。我可以看到为什么政治不正确在编程中是有用的品质。程序非常复杂,至少在好程序员手中,非常灵活。在这种情况下,质疑假设的习惯是有帮助的。

你能培养这些品质吗?我不知道。但你至少可以不压制它们。所以这是我最好的尝试。如果可能使自己成为伟大的黑客,方法可能是与自己达成以下协议:你永远不必在无聊的项目上工作(除非你的家人会饿死),作为回报,你永远不允许自己做半途而废的工作。我认识的所有伟大黑客似乎都达成了这个协议,尽管也许他们中没有人对此有选择。

注释

[1] 公平地说,我必须说IBM制造不错的硬件。我用IBM笔记本电脑写的这个。

[2] 他们结果确实注定要失败。几个月后他们关闭了。

[3] 我认为这就是人们谈论”生命意义”时的意思。表面上看,这似乎是个奇怪的想法。生命不是表达;它怎么可能有意义?但它可以有感觉很像意义的品质。在像编译器这样的项目中,你必须解决很多问题,但问题都有模式,就像信号一样。而当你必须解决的问题是随机的,它们就像噪音。

[4] 爱因斯坦在某个时候从事设计冰箱。(他有股份。)

[5] 很难说计算机世界什么构成研究,但作为第一近似,它是没有用户的软件。我不认为是发表使最好的黑客想在研发部门工作。我认为主要是因为不必与产品经理开三小时的会讨论Word 13.27韩语版与会说话回形针的集成问题。

[6] 类似的事情在建筑行业已经发生很长时间了。当你几百年前建造房屋时,当地建造者建造了其中的一切。但越来越多,建造者所做的只是组装由他人设计和制造的组件。这,就像桌面出版的到来,给了人们以灾难性方式实验的自由,但它当然更有效率。

[7] 谷歌对微软的危险性比网景大得多。可能比任何其他公司都更危险。不仅仅是因为他们决心战斗。在他们的招聘页面上,他们说他们的”核心价值观”之一是”不要作恶”。对于销售豆油或采矿设备的公司,这样的声明可能只是古怪。但我认为我们计算机世界的所有人都认识到这是对谁的宣战。

感谢Jessica Livingston、Robert Morris和Sarah Harlin阅读此演讲的早期版本。

演讲音频

Python悖论

日语翻译

俄语翻译

意大利语翻译

西班牙语翻译

如果你喜欢这个,你可能也喜欢Hackers & Painters。

Great Hackers

July 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.”

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.

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.

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.

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]

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.

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.

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.

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.

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.

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.

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.

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

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.

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.

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.

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?

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]

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.

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]

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

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.

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.

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.

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.

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

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.

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. 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.

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.

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.

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] In fairness, I have to say that IBM makes decent hardware. I wrote this on an IBM laptop.

[2] They did turn out to be doomed. They shut down a few months later.

[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] Einstein at one point worked designing refrigerators. (He had equity.)

[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. 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] 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] 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.

Thanks to Jessica Livingston, Robert Morris, and Sarah Harlin for reading earlier versions of this talk.

Audio of talk

The Python Paradox

Japanese Translation

Russian Translation

Italian Translation

Spanish Translation

If you liked this, you may also like Hackers & Painters.