伟大的黑客
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。