优秀的黑客
Original2004年7月
(这篇文章源自我在Oscon 2004上的一次演讲。)
几个月前,我完成了一本新的书,在评论中,我一直看到诸如"引人深思"和"具有争议性"之类的词语。更不用说"愚蠢"了。
我并不是想让这本书具有争议性。我只是想让它更有效率。我不想浪费人们的时间告诉他们他们已经知道的事情。只给他们差异就更有效率。但我想这肯定会产生一本令人不安的书。
爱迪生们
关于哪个想法最具有争议性,没有什么争议:即财富差异可能不像我们想象的那么大的问题。
我在这本书中并没有说财富差异本身就是一件好事。我说在某些情况下,它可能是一些好事的标志。剧烈的头痛不是一件好事,但它可能是一些好事的标志——比如你在被打到头后恢复了意识。
财富差异可能是生产力差异的标志。(在一个只有一个人的社会中,它们是一样的。)而这几乎肯定是一件好事:如果你的社会没有生产力差异,可能不是因为每个人都是托马斯·爱迪生,而是因为你根本没有托马斯·爱迪生。
在一个低技术社会,你看不到太多生产力的差异。如果你有一群游牧民族在收集柴火,最优秀的柴火收集者比最差的要高效多少?也许只有两倍?而当你把一个复杂的工具,比如电脑,交给人们时,他们能用它做出的事情的差异是巨大的。
这并不是一个新想法。弗雷德·布鲁克斯在1974年就写过这个问题,他引用的研究发表于1968年。但我认为他低估了程序员之间的差异。他谈到了生产力的差异,即最优秀的程序员可以在十分之一的时间内解决一个给定的问题。但如果问题本身并没有给定呢?在编程中,就像在许多领域一样,最困难的部分不是解决问题,而是决定要解决什么问题。想象力很难衡量,但实际上它主导了以代码行为单位衡量的生产力。
任何领域都存在生产力差异,但很少有领域差异如此之大。程序员之间的差异大到成为一种质的差异。我不认为这是编程本质上的特点。在每个领域,技术都放大了生产力的差异。我认为编程中发生的情况只是我们拥有大量的技术杠杆。但在每个领域,杠杆都在变长,所以我们看到的差异是越来越多领域将会看到的东西。一个公司或国家的成功,将越来越依赖于它如何应对这种差异。
如果生产力差异随着技术的进步而增加,那么最有生产力的个人的贡献不仅会呈现出不成比例的大,而且实际上会随着时间的推移而增加。当你达到一个群体90%的产出由1%的成员创造的地步时,如果有什么东西(无论是维京人的袭击还是中央计划)拖累了他们的生产力,使之降到平均水平,你就会损失很大。
如果我们想从他们那里得到最大收益,我们需要了解这些特别有生产力的人。是什么激励他们?他们需要什么来完成工作?如何识别他们?如何让他们来为你工作?当然,还有一个问题是,如何成为其中的一员?
不仅仅是金钱
我认识几个超级黑客,所以我坐下来思考他们有什么共同点。他们的定义特质可能是他们真的热爱编程。普通程序员写代码是为了赚钱。伟大的黑客把它视为一种他们乐于从事的事情,而且很高兴发现有人愿意为此付费。
伟大的程序员有时被认为对金钱漠不关心。这并不完全正确。确实,他们真正关心的只是做有趣的工作。但如果你赚够了钱,你就可以做任何你想做的事情,这也是黑客被巨额收入所吸引的原因。但只要他们还必须每天上班,他们更关心他们在那里做的事情,而不是他们为此得到的报酬。
从经济学的角度来看,这是一个极其重要的事实,因为这意味着你不需要付给伟大的黑客他们的价值。一个伟大的程序员可能比一个普通程序员有10倍或100倍的生产力,但他可能只会认为自己很幸运能得到三倍的报酬。正如我稍后会解释的,这部分是因为伟大的黑客不知道自己有多出色。但也是因为金钱并不是他们最主要想要的。
黑客想要什么?和所有工匠一样,黑客喜欢好的工具。事实上,这是一种轻描淡写。优秀的黑客发现使用糟糕的工具是难以忍受的。他们会干脆拒绝参与使用错误基础设施的项目。
在我曾经工作过的一家初创公司,我们的公告板上贴着一则IBM的广告。这是一张AS400的图片,标题大概是"黑客们鄙视它"。[1]
当你决定一个项目使用什么基础设施时,你不仅仅在做一个技术决定。你也在做一个社会决定,这可能是更重要的。例如,如果你的公司想编写一些软件,使用Java似乎是一个谨慎的选择。但当你选择一种语言时,你也在选择一个社区。你能雇佣来参与Java项目的程序员,不会像你能雇佣来参与用Python编写的项目的程序员那么聪明。你的黑客的质量可能比你选择的语言更重要。不过,说实话,优秀的黑客更喜欢Python而不是Java,这应该告诉你一些关于这两种语言相对优缺点的信息。
商业类型更喜欢最流行的语言,因为他们将语言视为标准。他们不想把公司押注在Betamax上。不过,关于语言的问题是,它们不仅仅是标准。如果你必须通过网络传输位,那么使用TCP/IP是没问题的。但编程语言不仅仅是一种格式。编程语言是一种表达媒体。
我读到Java刚刚超过Cobol成为最流行的语言。作为一个标准,你不能要求更好的了。但作为一种表达媒体,你可以做得更好。我能想到的所有伟大的程序员中,我只知道一个人会自愿使用Java编程。而我能想到的所有不为Sun工作、不在Java上工作的伟大程序员中,我一个也不知道。
优秀的黑客通常也坚持使用开源软件。不仅因为它更好,还因为它给了他们更多的控制权。优秀的黑客坚持控制。这就是他们成为优秀黑客的部分原因:当有什么地方出问题时,他们需要修复它。你希望他们对你写的软件也有这种感觉。你不应该对他们对操作系统也有同样的感觉感到惊讶。
几年前,一位风险投资家朋友告诉我他参与的一家新创公司。听起来很有前景。但下次我和他谈话时,他说他们已经决定在Windows NT上构建他们的软件,并刚刚聘请了一位非常有经验的NT开发人员担任首席技术官。当我听到这个消息时,我认为这些人注定要失败。一是,首席技术官不可能是一流的黑客,因为要成为一位杰出的NT开发人员,他必须自愿多次使用NT,而我无法想象一位伟大的黑客会这样做;二是,即使他很出色,如果项目必须建立在NT上,他也很难招聘到任何优秀的人为他工作。[2]
最后的前沿
除了软件,黑客最重要的工具可能就是他的办公室了。大公司认为办公空间的功能是表达等级。但黑客使用他们的办公室不仅仅是为了这个:他们把办公室当作思考的地方。而如果你是一家科技公司,他们的思想就是你的产品。所以让黑客在嘈杂、分散注意力的环境中工作,就像在一个充满煤烟的车间里开油漆厂一样。
漫画《Dilbert》对隔间办公室有很多评论,这是有道理的。我认识的所有黑客都讨厌它们。仅仅被打断的可能性就足以阻止黑客处理困难的问题。如果你想在隔间办公室里完成真正的工作,你有两个选择:在家工作,或者在其他人都不在的时候,比如早上或晚上或周末来上班。难道公司没有意识到这是一个问题的迹象吗?办公环境应该是帮助你工作的,而不是你不得不忍受的。
思科公司以每个人都有一个隔间办公室而感到自豪,甚至包括CEO。但他们并没有像他们认为的那么先进;显然他们仍然把办公空间视为等级的标志。还要注意的是,思科以在内部做很少产品开发而闻名。他们通过收购创造了新技术的初创公司来获得新技术--在那里,黑客很可能有一个安静的工作环境。
真正理解黑客需求的大公司是微软。我曾经看到一则微软的招聘广告,上面有一扇大门的大照片。为我们工作,广告的前提是,我们会给你一个可以真正工作的地方。而且,你知道,微软在大公司中是非常出色的,因为他们能在内部开发软件。也许不是很好,但也足够好了。
如果公司想让黑客更有生产力,他们应该看看黑客在家里是如何工作的。在家里,黑客可以自己安排环境,以便取得最大的成就。而且当黑客在家工作时,他们不会在嘈杂的开放空间里工作;他们会在有门的房间里工作。他们在舒适、邻里式的地方工作,周围有人,有地方可以在思考问题时散步,而不是在停车场中的玻璃盒子里工作。他们有一个沙发可以在感到疲惫时小睡一会儿,而不是坐在办公桌前装作在工作。没有人会在每天晚上最佳编程时间里用吸尘器轰鸣而经过。没有会议,更不用说公司远足或团队建设活动了。当你看看他们在电脑上做什么,你会发现这再次证实了我之前对工具的说法。他们可能不得不在工作中使用Java和Windows,但在家里,当他们可以自己选择时,你更有可能发现他们在使用Perl和Linux。
事实上,关于Cobol或Java是最流行语言的这些统计数据可能会让人产生误导。如果我们想知道什么工具最好,我们应该看看黑客在自由选择的项目中使用什么。当你问这个问题时,你会发现开源操作系统已经占据了主导地位,而Perl可能是最流行的语言。
有趣的
除了好的工具,黑客还想要有趣的项目。什么样的项目才算有趣呢?显然,像隐形飞机或特技软件这样明显性感的应用程序会让人感兴趣。但任何应用程序都可以通过提出新的技术挑战而变得有趣。所以很难预测哪些问题会吸引黑客,因为有些问题只有在工作人员发现新的解决方案时才会变得有趣。在ITA(编写Orbitz内部软件的公司)之前,从事航班票价搜索的人可能认为这是最无聊的应用程序之一。但ITA通过重新定义这个问题,使其更有野心,从而使其变得有趣。
我认为谷歌也发生了同样的事情。当谷歌成立时,所谓的门户网站的常规智慧认为搜索是无聊和不重要的。但谷歌的人并不认为搜索很无聊,这就是为什么他们做得这么好。
这是管理者可以发挥作用的一个领域。就像父母对孩子说"我打赌你在10分钟内无法把整个房间收拾干净"一样,一个优秀的管理者有时可以将一个问题重新定义为一个更有趣的问题。史蒂夫·乔布斯似乎特别擅长这一点,部分原因是他有很高的标准。在Mac出现之前,已经有很多廉价的小型电脑了。他将问题重新定义为:制造一台漂亮的电脑。这可能比任何胡萝卜和大棒都更激励开发人员。
他们确实交出了一份出色的作品。当Mac首次问世时,你甚至不需要打开它就知道它会很好;从外壳就能看出来。几周前,我在剑桥的街上看到一个人家的垃圾堆里有一个看起来像Mac的手提包。我打开一看,里面是一台Mac SE。我把它带回家插上电源,它就启动了。那个快乐的Macintosh标志,然后是Finder。天哪,它是如此简单。就像...谷歌一样。
黑客喜欢为有高标准的人工作。但仅仅严格是不够的。你必须坚持正确的事情。这通常意味着你自己必须是一名黑客。我偶尔看到一些关于如何管理程序员的文章。实际上应该有两篇文章:一篇是针对自己是程序员的情况,另一篇是针对自己不是程序员的情况。后者可能可以浓缩成两个字:放弃。
问题不在于日常管理。真正优秀的黑客基本上是自我管理的。问题在于,如果你不是黑客,你无法分辨哪些是优秀的黑客。一个类似的问题解释了为什么美国汽车如此丑陋。我称之为"设计悖论"。你可能会认为,只要雇用一位出色的设计师来设计产品,就可以使其变得漂亮。但如果你自己没有好的品位,你怎么能识别一位优秀的设计师呢?从定义上说,你无法从他的作品集中判断。你也无法根据他获得的奖项或工作经历来判断,因为在设计领域,就像在大多数领域一样,这些往往受到时尚和社交影响,实际能力排在第三位。没有办法避免这一点:如果你不知道什么是美,你就无法管理旨在产生美丽事物的过程。美国汽车之所以丑陋,是因为美国汽车公司由品位低下的人管理。
许多人认为品位是一种难以捉摸的,甚至是无关紧要的东西。但事实并非如此。为了推动设计,管理者必须成为公司产品最挑剔的用户。如果你有非常好的品位,你就可以像史蒂夫·乔布斯那样,让满足你的需求成为优秀人才乐于从事的一种问题。
讨厌的小问题
很容易说哪些问题是不有趣的:那些不是解决几个大而明确的问题,而是需要解决许多讨厌的小问题的情况。最糟糕的项目之一就是编写一个与充满bug的软件进行交互的接口。另一个是当你必须根据个别客户复杂且定义不清的需求进行定制。对于黑客来说,这些类型的项目就像千刀万剐一样。
讨厌的小问题的特点是,你不会从中学到任何东西。编写编译器很有趣,因为它教会你什么是编译器。但编写一个与充满bug的软件进行交互的接口并不会教会你任何东西,因为这些bug是随机的。[3]所以,不仅仅是挑剔使优秀的黑客避免讨厌的小问题。更多的是出于自我保护的考虑。处理讨厌的小问题会让你变笨。优秀的黑客避免这样做,就像模特避免吃芝士汉堡一样。
当然,有些问题本质上就具有这种特点。由于供给和需求的关系,这些问题的报酬特别高。所以,如果一家公司能找到让优秀的黑客从事乏味工作的方法,那将是非常成功的。你会怎么做呢?
这种情况在初创公司中时有发生。在我们的初创公司,我们让罗伯特·莫里斯担任系统管理员。这就像让滚石乐队在一个犹太人的成年礼上表演。你无法雇佣到这样的人才。但对于自己创办的公司,人们会为之做任何琐碎的工作。[4]
大公司通过划分公司来解决这个问题。他们通过建立一个独立的研发部门来吸引聪明人为他们工作,在那里员工不必直接处理客户的讨厌的小问题。[5]在这种模式下,研究部门就像一座矿山。他们产生新的想法;也许公司的其他部门会能够利用它们。
你可能不必采取这种极端措施。自下而上的编程提出了另一种划分公司的方式:让聪明人担任工具制造者。如果你的公司制造某种类型的软件,让一组人构建编写该类型软件的工具,另一组人使用这些工具编写应用程序。这样,你可能能够让聪明人编写99%的代码,但仍然将他们与用户保持几乎和在传统研究部门一样的隔离。工具制造者会有用户,但他们只会是公司自己的开发人员。[6]
如果微软采用这种方法,他们的软件就不会充满安全漏洞,因为编写实际应用程序的不太聪明的人就不会从事诸如内存分配之类的底层工作。他们不会直接用C语言编写Word,而是将Word语言的大乐高块拼接在一起。(我相信技术术语是Duplo。)
聚集
除了有趣的问题,优秀的黑客还喜欢其他优秀的黑客。优秀的黑客往往会聚集在一起,有时会非常引人注目,就像在施乐帕克一样。所以,你吸引优秀黑客的数量不会与你为他们创造的环境成线性比例。这种聚集的倾向意味着它更像是环境的平方。所以这是一个胜者通吃的局面。在任何给定的时间,只有大约十到二十个地方是黑客最想去的,如果你不是其中之一,你不仅会拥有较少的优秀黑客,而且可能一个都没有。
拥有出色的黑客并不能单独使一家公司成功。这对于谷歌和ITA这样的热点公司来说很有效,但却没有帮助到思维机器公司或施乐公司。Sun公司曾一度表现良好,但其商业模式如今已经走下坡路。在这种情况下,即使是最优秀的黑客也无法拯救你。
不过我认为,在其他条件相同的情况下,一家能吸引到优秀黑客的公司将会拥有巨大的优势。这一观点并非所有人都赞同。在20世纪90年代,我们在寻找风险投资时,有几家公司告诉我们,软件公司的胜出并不在于编写出色的软件,而是在于品牌、渠道控制和达成正确的交易。
他们似乎真的相信这一点,我想我知道原因所在。至少在潜意识里,我认为很多风险投资者都在寻找下一个微软。当然,如果微软是你的模板,你就不应该去寻找希望通过编写出色软件来获胜的公司。但风险投资者错误地寻找下一个微软,因为除非另一家公司准备在恰当的时机屈服,否则任何初创公司都不可能成为下一个微软。
以微软为模型是一个错误,因为他们的整个文化都源于那次幸运的机遇。微软是一个糟糕的数据点。如果你把他们排除在外,你会发现优秀的产品确实往往能在市场上获胜。风险投资者应该寻找的是下一个苹果或下一个谷歌。
我认为比尔·盖茨也知道这一点。他对谷歌的担忧不是他们的品牌力量,而是他们拥有更优秀的黑客。[7]
认知
那么什么是优秀的黑客?当你遇到一个时,如何知道呢?这证明非常困难。即使是黑客自己也无法判断。我现在相当确定,我的朋友特雷弗·布莱克韦尔就是一位出色的黑客。你可能在Slashdot上读到过他制造了自己的Segway的消息。这个项目最remarkable的地方在于,他只用一天时间(用Python编写)就完成了所有软件。
对特雷弗来说,这只是家常便饭。但当我第一次见到他时,我认为他是个彻头彻尾的白痴。他正在罗伯特·莫里斯的办公室里絮絮叨叨地说着什么,我记得当时站在他后面拼命向罗伯特打手势,让他把这个疯子赶出去,好让我们去吃午饭。罗伯特说,他最初也误判了特雷弗。显然,当罗伯特第一次见到他时,特雷弗刚刚开始了一个新的计划,那就是把他生活的每一个方面都记录在一叠索引卡上,随身携带。而且他刚从加拿大来,有一口浓重的加拿大口音,还留着一头长发。
这个问题还因为黑客们,尽管有社交迟钝的名声,有时也会努力装得很聪明而加剧。当我在读研究生的时候,我偶尔会去麻省理工人工智能实验室闲逛。一开始,那里让我感到有些威慑。每个人都说话如此之快。但后来我学会了这个诀窍:说话越快越好。你不需要思考得更快,只需要用两倍的词语来表达同样的内容。
在这么多噪音中,很难识别出优秀的黑客。即使现在,我也无法判断。你也无法从他们的简历中看出端倪。似乎唯一的办法就是和他们一起工作,才能评判一个黑客的水平。
这也是为什么高科技领域只会在大学周围出现的原因。这里的关键因素并不完全是教授,而更多是学生。初创公司之所以会在大学周围成长,是因为大学把有前景的年轻人聚集在一起,让他们共同工作。聪明的人会认识到其他聪明人,然后一起策划新的项目。
由于除了亲自与之合作,你无法判断一个优秀的黑客,所以黑客自己也无法确定自己有多出色。这在大多数领域都是如此。我发现,在某个领域表现出色的人,并不是对自己的伟大深信不疑,而是对其他人为什么如此无能感到困惑。
但对于黑客来说,很难知道自己有多出色,因为很难比较他们的工作成果。在其他领域,这相对容易一些。在100米赛跑中,你10秒钟就知道谁最快。即使在数学领域,人们似乎也达成了共识,哪些问题很难解决,什么样的解决方案算是不错。但编程就像写作一样。谁能说哪部小说更好?当然不是作者自己。
至少对于黑客来说,其他黑客能够判断。这是因为,与小说家不同,黑客们会在项目上进行合作。当你通过网络与别人一起解决一些棘手的问题时,你很快就能了解对方的实力。但黑客无法观察自己的工作状态。所以如果你问一个出色的黑客他有多厉害,他几乎肯定会回答:"我不知道。"他不只是谦逊,而是真的不知道。
除了我们亲自合作过的人,我们谁也不知道。这让我们陷入了一种奇怪的处境:我们不知道应该把谁当作我们的英雄。那些出名的黑客通常是因为一些随机的公关事件而出名的。有时我需要举一个出色黑客的例子,我总是不知道该用谁。首先想到的总是我个人认识的人,但用他们似乎有些无聊。所以我想,也许我应该说理查德·斯托曼,或者林纳斯·托瓦兹,或者艾伦·凯之类的著名人物。但我不知道这些人是否真的很出色,因为我从未与他们一起工作过。
如果黑客界真的有一个迈克尔·乔丹,连他自己也不知道。
培养
最后,所有黑客都在想的问题:如何成为一个出色的黑客?我不知道是否可能通过自己的努力成为一个。但肯定有一些方法可以让自己变得愚蠢,如果你能让自己变蠢,你也可能让自己变聪明。
成为优秀黑客的关键可能是专注于自己喜欢的事情。 当我思考我认识的伟大黑客时,他们共同点之一就是极其 难以让他们从事任何他们 不想做的事情。我不知道这是原因还是结果,可能两者都有。
要出色地完成某事,你必须热爱它。 因此,在你能保持对编程的热爱和好奇心时,你就很可能做得很好。 试着保持你14岁时对编程的那种敬畏之心。如果你担心你现在的工作正在腐蚀你的大脑,那很可能是真的。
最优秀的黑客往往很聪明,当然这在很多领域都是如此。那么,有什么独特的黑客特质吗? 我问了一些朋友,他们提到的第一点就是好奇心。 我一直以为所有聪明人都很好奇 - 好奇心只是知识的第一个导数。但 显然黑客特别好奇,尤其是对事物如何运作感兴趣。这很有道理,因为 程序实际上是对事物运作方式的巨大描述。
几位朋友提到了黑客的专注能力 - 正如一位朋友所说,他们能"屏蔽头脑之外的一切"。 我也确实注意到了这一点。我听几位黑客说,即使喝了半瓶啤酒,他们也无法编程。 所以也许黑客确实需要某种特殊的专注能力。 也许优秀的黑客可以在头脑中装载大量上下文,以至于当他们看一行代码时, 不仅看到那一行,还能看到整个程序。约翰·麦克菲写过,比尔·布拉德利之所以在篮球上如此出色, 部分原因是他有非凡的周边视觉。"完美"的视力意味着大约47度的垂直周边视野。 而比尔·布拉德利有70度;他在看地板时也能看到篮筐。 也许优秀的黑客也有某种类似的天赋。(我通过使用一种非常 密集的语言来作弊,这缩小了"场地"。)
这可能解释了对于隔间办公的分歧。也许负责设施的人, 没有任何可被打破的专注力,根本无法理解对黑客来说, 在隔间工作就像把大脑放在搅拌机里一样。(而比尔,如果关于自闭症的传言是真的, 就很清楚这种感受。)
我注意到优秀黑客与聪明人的一个区别是,黑客更 政治不正确。在某种程度上, 优秀黑客之间有一种秘密握手,就是当他们足够了解彼此时, 才能表达那些会被普通大众石刑的观点。我能理解为什么 政治不正确会是编程中有用的品质。 程序非常复杂,至少在优秀程序员手中,非常流畅。 在这种情况下,养成质疑假设的习惯是很有帮助的。
你能培养这些品质吗?我不知道。但你至少可以不压抑它们。 所以这是我最好的建议。如果成为一名出色的黑客是可能的, 也许你可以与自己做这样的交易:你永远不必从事无聊的项目 (除非你的家人会因此挨饿),作为回报,你永远不会允许自己 敷衍了事。我认识的所有优秀黑客似乎都做出了这样的交易, 尽管也许他们中没有人有选择的余地。
注释
[1] 公平地说,我必须承认IBM生产的硬件还不错。我 在一台IBM笔记本电脑上写下了这些。
[2] 结果证明,他们注定要失败。他们几个月后就关门了。
[3] 我认为这就是人们谈论"生命的意义"时的意思。 从表面上看,这似乎是个奇怪的想法。生命不是一种表达; 它怎么会有意义呢?但它确实可以有一种感觉上很像意义的品质。 在一个像编译器这样的项目中,你必须解决很多问题,但这些问题 都会形成一种模式,就像信号一样。而当你必须解决的问题是随机的, 它们就像噪音一样。
[4] 爱因斯坦曾经从事过设计冰箱的工作。(他有股权。)
[5] 很难准确地说什么构成了计算机领域的研究,但作为一个初步的近似, 它就是没有用户的软件。
我不认为是发表论文让最优秀的黑客想在研究部门工作。我认为主要是 不必与产品经理就整合第13.27版韩语Word和会说话的纸夹子问题 进行三小时会议。
[6] 类似的事情在建筑行业已经发生了很长时间。当你几百年前让人建房子时, 当地的建筑师会建造房子的所有部分。但越来越多的情况是,建筑商所做的 只是组装由别人设计和制造的部件。这就像桌面出版的到来一样, 给人以实验的自由,但这无疑更有效率。
[7] 谷歌对微软的威胁要远大于网景。可能比任何其他公司都更危险。 部分原因是他们决心要战斗。在他们的招聘页面上,他们说他们的"核心价值观"之一是"不作恶"。 对于一家销售大豆油或矿业设备的公司来说,这样的声明可能只是古怪。 但我认为,我们计算机界的所有人都知道,这是对谁的宣战。
感谢 Jessica Livingston、Robert Morris和Sarah Harlin 阅读了本演讲的早期版本。