伟大的黑客
Original2004年7月
(这篇文章源自于2004年Oscon的演讲。)
几个月前,我完成了一本新 书, 在评论中我不断注意到“挑衅”和“有争议”等词。更不用说“愚蠢”。
我并不想让这本书变得有争议。我试图让它高效。我不想浪费人们的时间告诉他们已经知道的事情。直接给他们差异更高效。但我想这注定会导致一本令人震惊的书。
爱迪生
关于哪个想法最具争议性没有争议:财富的差异可能并不像我们想的那么大。
我在书中并没有说财富的差异本身就是一件好事。我说在某些情况下,它可能是好事的迹象。剧烈的头痛并不是好事,但它可以是好事的迹象——例如,你在被击中头部后正在恢复意识。
财富的差异可能是生产力差异的标志。 (在一个人的社会中,它们是相同的。)而这几乎肯定是好事:如果你的社会没有生产力差异,可能并不是因为每个人都是托马斯·爱迪生。可能是因为你没有托马斯·爱迪生。
在一个低技术的社会中,你不会看到太多的生产力差异。如果你有一个游牧部落在收集生火的木棍,最好的木棍收集者和最差的木棍收集者的生产力差异会有多大?两倍?而当你给人们一个复杂的工具,比如计算机时,他们能用它做的事情的差异是巨大的。
这不是一个新想法。弗雷德·布鲁克斯在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]
最后的边界
在软件之后,对黑客来说,最重要的工具可能是他们的办公室。大公司认为办公室空间的功能是表达等级。但黑客使用他们的办公室不仅仅是为了这个:他们把办公室当作思考的地方。如果你是一家科技公司,他们的思考就是你的产品。因此,让黑客在嘈杂、分心的环境中工作就像在一个空气中充满烟尘的油漆厂。
漫画《迪尔伯特》对隔间有很多话要说,这也是有充分理由的。我认识的所有黑客都厌恶它们。仅仅被打断的前景就足以阻止黑客在困难问题上工作。如果你想在一个有隔间的办公室里完成真正的工作,你有两个选择:在家工作,或者在早上、晚上或周末来,当没有其他人时。公司难道没有意识到这是某种东西出问题的迹象吗?办公室环境应该是帮助你工作的东西,而不是你在工作时必须克服的东西。
像思科这样的公司为每个人都有一个隔间而感到自豪,甚至包括首席执行官。但他们并没有想象中那么先进;显然,他们仍然将办公室空间视为等级的象征。还要注意,思科以在内部进行很少的产品开发而闻名。他们通过收购创造新技术的初创公司来获得新技术——在那里,黑客们显然有一个安静的地方可以工作。
理解黑客需求的一家大公司是微软。我曾经看到一则微软的招聘广告,上面有一扇大门的图片。为我们工作,前提是,我们会给你一个可以真正完成工作的地方。你知道,微软在大公司中是一个显著的例外,因为他们能够在内部开发软件。也许不是很好,但足够好。
如果公司希望黑客高效,他们应该看看他们在家里做什么。在家里,黑客可以自己安排事情,以便完成更多的工作。当他们在家工作时,黑客不会在嘈杂的开放空间工作;他们在有门的房间里工作。他们在舒适的、邻里般的地方工作,周围有其他人,并且在需要思考时有地方可以走,而不是在停满汽车的玻璃盒子里。他们有一个沙发,可以在感到疲倦时小憩,而不是坐在桌子前假装工作。没有一群人用吸尘器在每个晚上在最佳黑客时间轰鸣而过。没有会议,或者,天哪,企业撤退或团队建设活动。当你看看他们在那台计算机上做什么时,你会发现这强化了我之前关于工具的说法。他们可能在工作中不得不使用Java和Windows,但在家里,他们可以自由选择时,更有可能发现他们使用Perl和Linux。
实际上,关于Cobol或Java是最流行语言的统计数据可能会误导我们。如果我们想知道哪些工具最好,我们应该看看黑客在可以自由选择时选择什么——也就是说,在他们自己的项目中。当你问这个问题时,你会发现开源操作系统已经占据了主导市场份额,而第一语言可能是Perl。
有趣
除了好的工具,黑客还想要有趣的项目。什么使一个项目有趣?显然,像隐形飞机或特效软件这样的明显性感应用会很有趣。但任何应用程序都可以是有趣的,只要它提出新颖的技术挑战。因此,很难预测黑客会喜欢哪些问题,因为有些问题只有在从事这些问题的人发现了一种新的解决方案时才会变得有趣。在ITA(编写Orbitz内部软件的公司)之前,参与航空票价搜索的人可能认为这是最无聊的应用之一。但ITA通过以更雄心勃勃的方式重新定义问题使其变得有趣。
我认为在谷歌也发生了同样的事情。当谷歌成立时,所谓门户网站的传统智慧是搜索无聊且不重要。但谷歌的人并不认为搜索无聊,这就是他们做得如此出色的原因。
这是管理者可以发挥作用的一个领域。就像父母对孩子说,我打赌你无法在十分钟内清理整个房间,一个好的管理者有时可以将一个问题重新定义为一个更有趣的问题。史蒂夫·乔布斯似乎在这方面特别擅长,部分原因是他有高标准。在Mac之前,有很多小型、廉价的计算机。他将问题重新定义为:制造一个美丽的计算机。这可能比任何胡萝卜或大棒都更能激励开发者。
他们确实交付了。当Mac首次出现时,你甚至不需要打开它就知道它会很好;你可以从外壳看出来。几周前,我在剑桥的街上走,看到某人的垃圾中似乎有一个Mac的携带箱。我看了一下,里面有一台Mac SE。我把它带回家,插上电源,它启动了。快乐的Macintosh面孔,然后是Finder。天哪,这太简单了。它就像……谷歌。
黑客喜欢为有高标准的人工作。但仅仅要求严格是不够的。你必须坚持正确的事情。这通常意味着你必须是一个黑客。我见过偶尔关于如何管理程序员的文章。实际上应该有两篇文章:一篇是关于如果你自己是程序员该怎么做,另一篇是关于如果你不是该怎么做。第二篇可能可以浓缩成两个字:放弃。
问题不在于日常管理。真正优秀的黑客几乎是自我管理的。问题是,如果你不是黑客,你就无法判断谁是优秀的黑客。类似的问题解释了为什么美国汽车如此丑陋。我称之为设计悖论。你可能会认为,只需雇佣一位优秀的设计师来设计产品,就可以使你的产品美丽。但如果你自己没有好的品味,你怎么能识别出一位优秀的设计师呢?根据定义,你无法从他的作品集中判断。而且你不能根据他获得的奖项或他曾经的工作来判断,因为在设计领域,像大多数领域一样,这些往往是由时尚和社交驱动的,实际能力则排在第三位。没有办法:你无法管理一个旨在创造美丽事物的过程,而不知晓什么是美丽。美国汽车丑陋是因为美国汽车公司由品味差的人管理。
这个国家的许多人认为品味是某种难以捉摸的东西,甚至是轻浮的。它既不是。为了推动设计,管理者必须是公司产品最挑剔的用户。如果你有很好的品味,你可以像史蒂夫·乔布斯那样,让满足你成为优秀人才愿意工作的那种问题。
讨厌的小问题
说出哪些问题不有趣是相当容易的:那些你不得不解决很多讨厌的小问题,而不是解决几个大而明确的问题。最糟糕的项目之一是为一段充满错误的软件编写接口。另一个是当你必须为个别客户复杂且不明确的需求定制某些东西时。对黑客来说,这些项目就像千刀万剐。
讨厌的小问题的一个显著特征是你从中学不到任何东西。编写编译器是有趣的,因为它教会你什么是编译器。但为一段有缺陷的软件编写接口并不会教会你任何东西,因为错误是随机的。[3]所以,优秀黑客避免讨厌的小问题并不仅仅是因为挑剔。这更多是出于自我保护。处理讨厌的小问题会让你变得愚蠢。优秀的黑客避免它的原因就像模特避免汉堡包一样。
当然,有些问题本质上就具有这种特征。由于供需关系,它们的报酬特别丰厚。因此,找到一种方法让优秀黑客处理乏味问题的公司将会非常成功。你会怎么做?
这种情况发生在初创公司。在我们的初创公司中,我们有罗伯特·莫里斯担任系统管理员。这就像让滚石乐队在一个成人礼上演出。你无法雇佣到那种人才。但人们会为他们创办的公司做任何数量的繁重工作。[4]
大公司通过将公司分区来解决这个问题。他们通过建立一个独立的研发部门来吸引聪明的人工作,在那里员工不必直接处理客户的讨厌小问题。[5]在这个模型中,研究部门的功能就像一个矿山。他们产生新想法;也许公司其他部分能够使用它们。
你可能不必走到这个极端。 自下而上的编程建议了另一种分区公司的方法:让聪明的人作为工具制造者工作。如果你的公司制作软件来做x,设立一个小组为这种类型的软件编写工具,另一个小组使用这些工具编写应用程序。这样,你可能能够让聪明的人编写99%的代码,但仍然让他们几乎与用户隔离,就像他们在传统的研究部门一样。工具制造者会有用户,但他们只会是公司的开发者。[6]
如果微软采用这种方法,他们的软件就不会充满安全漏洞,因为编写实际应用程序的较不聪明的人不会做诸如分配内存之类的低级工作。他们不会直接用C编写Word,而是会将Word语言的大乐高积木拼接在一起。(我相信,Duplo是技术术语。)
聚集
除了有趣的问题,优秀黑客喜欢其他优秀黑客。伟大的黑客往往聚集在一起——有时表现得特别明显,比如在Xerox Parc。因此,你不会以线性比例吸引优秀黑客,创造的环境越好,吸引的黑客就越多。聚集的趋势意味着这更像是环境的平方。因此,这是赢家通吃。在任何给定的时间,只有大约十到二十个地方是黑客最想工作的地方,如果你不是其中之一,你不仅会有更少的优秀黑客,你将会没有。
拥有优秀黑客本身并不足以使公司成功。它对谷歌和ITA(目前的两个热点)运作良好,但对思考机器或施乐并没有帮助。太阳公司曾经有过一段良好的发展,但他们的商业模式是下行电梯。在这种情况下,即使是最优秀的黑客也无法拯救你。
不过,我认为,其他条件相同的情况下,能够吸引优秀黑客的公司将具有巨大的优势。有些人可能不同意这一点。当我们在1990年代走访风险投资公司时,有几家公司告诉我们,软件公司并不是通过编写优秀软件获胜,而是通过品牌、主导渠道和做正确的交易。
他们似乎真的相信这一点,我想我知道原因。我认为许多风险投资家至少在潜意识中寻找的是下一个微软。当然,如果微软是你的模型,你就不应该寻找希望通过编写优秀软件获胜的公司。但风险投资家错误地寻找下一个微软,因为没有初创公司能成为下一个微软,除非其他公司准备在恰当的时刻屈服,成为下一个IBM。
将微软作为模型是一个错误,因为他们整个文化源于那一次幸运的机会。微软是一个糟糕的数据点。如果你把他们抛开,你会发现优秀的产品确实倾向于在市场上获胜。风险投资家应该寻找下一个苹果,或下一个谷歌。
我认为比尔·盖茨知道这一点。他对谷歌的担忧不是他们品牌的力量,而是他们拥有更优秀的黑客。[7]
认可
那么,谁是伟大的黑客?你怎么知道你遇到一个?这变得非常困难。即使是黑客也无法判断。我现在相当确定我的朋友特雷弗·布莱克威尔是一个伟大的黑客。你可能在Slashdot上读到过他如何制作自己的赛格威。这个项目的显著之处在于他在一天内(顺便说一下,用Python)编写了所有软件。
对特雷弗来说,这只是常规。但当我第一次见到他时,我认为他是个完全的傻瓜。他站在罗伯特·莫里斯的办公室里,喋喋不休地和他谈论某事,我记得我站在他身后,拼命做手势让罗伯特把这个疯子赶出他的办公室,这样我们就可以去吃午饭。罗伯特说他一开始也误判了特雷弗。显然,当罗伯特第一次见到他时,特雷弗刚刚开始一个新计划,涉及在一堆索引卡上写下他生活的每个方面的所有内容,并随身携带。他刚从加拿大到达,带着浓重的加拿大口音和一头莫霍克发型。
这个问题因黑客尽管有社交盲点的声誉,有时会花费大量精力来显得聪明而变得更加复杂。当我在研究生院时,我偶尔会在麻省理工学院的人工智能实验室闲逛。起初这有点让人感到威慑。那里每个人说话都很快。但过了一段时间,我学会了快速说话的技巧。你不必思考得更快;只需用两倍的词来表达一切。
在信号中有这么多噪音,很难在遇到时识别出优秀的黑客。我现在也无法判断。你也无法从他们的简历中判断。似乎判断一个黑客的唯一方法是和他一起工作。
这就是为什么高科技领域只在大学周围发生的原因。这里的活性成分并不是教授,而是学生。初创公司在大学周围成长,因为大学将有前途的年轻人聚集在一起,让他们在同一项目上工作。聪明的人会了解其他聪明的人,并一起策划新的项目。
因为你无法通过与他一起工作来判断一个伟大的黑客,黑客自己也无法判断他们有多优秀。这在大多数领域都是如此。我发现那些在某个领域出色的人并不那么相信自己的伟大,而是对为什么其他人似乎如此无能感到困惑。
但黑客特别难以知道他们有多优秀,因为很难比较他们的工作。在大多数其他领域,这更容易。在百米赛跑中,你在10秒钟内就知道谁最快。即使在数学中,似乎也有一个普遍共识,关于哪些问题难以解决,以及什么构成一个好的解决方案。但黑客就像写作。谁能说出两部小说中哪一部更好?当然不是作者。
至少在黑客中,其他黑客可以判断。这是因为,与小说家不同,黑客在项目上合作。当你能在网上对某人施加几个困难的问题时,你很快就会知道他们反击的力度。但黑客无法观察自己工作。因此,如果你问一个伟大的黑客他有多优秀,他几乎肯定会回答,我不知道。他并不是在谦虚。他真的不知道。
我们都不知道,除了关于我们实际合作过的人。这让我们处于一个奇怪的境地:我们不知道我们的英雄应该是谁。那些成名的黑客往往是通过公关的随机事故而成名的。偶尔我需要给出一个伟大黑客的例子,但我从来不知道用谁。首先想到的名字总是我个人认识的人,但用他们似乎很无聊。所以,我想,也许我应该说理查德·斯托曼,或林纳斯·托瓦兹,或艾伦·凯,或者其他著名的人。但我不知道这些人是否是伟大的黑客。我从未与他们合作过。
如果有一个黑客界的迈克尔·乔丹,没有人知道,包括他自己。
培养
最后,黑客们一直在想的问题:你如何成为一个伟大的黑客?我不知道是否有可能让自己成为一个。但肯定有可能做一些让自己变得愚蠢的事情,如果你能让自己愚蠢,你也可能让自己聪明。
成为一个优秀黑客的关键可能是专注于你喜欢的事情。当我想到我认识的伟大黑客时,他们有一个共同点,那就是让他们在任何不想做的事情上工作是极其困难的。我不知道这是因果关系;这可能是两者都是。
要做好一件事情,你必须热爱它。因此,在你能够将黑客保持为你热爱的事情的程度上,你可能会做得很好。尽量保持你在14岁时对编程的惊奇感。如果你担心你目前的工作正在腐蚀你的大脑,那可能确实是。
优秀的黑客往往很聪明,当然,这在许多领域都是如此。是否有某种独特于黑客的品质?我问了一些朋友,他们提到的第一件事是好奇心。我一直以为所有聪明的人都是好奇的——好奇心只是知识的第一导数。但显然,黑客特别好奇,尤其是对事物的运作方式。这是有道理的,因为程序实际上是对事物运作方式的巨大描述。
几位朋友提到黑客的专注能力——他们的能力,正如一位所说,“屏蔽自己头脑外的一切。”我确实注意到了这一点。我听到几位黑客说,即使喝了半杯啤酒,他们也无法编程。因此,也许黑客确实需要某种特殊的专注能力。也许伟大的黑客可以将大量上下文加载到他们的脑海中,以便当他们查看一行代码时,他们不仅看到那一行,还能看到周围的整个程序。约翰·麦克菲写道,比尔·布拉德利作为篮球运动员的成功部分归功于他非凡的周边视力。“完美”的视力意味着大约47度的垂直周边视力。比尔·布拉德利有70度;当他看着地板时,他可以看到篮筐。也许伟大的黑客有某种类似的天赋。(我通过使用一种非常密集的语言来作弊,这缩小了场地。)
这可能解释了对隔间的分歧。也许负责设施的人没有任何专注力可供打破,因此他们不知道在隔间工作对黑客来说就像把大脑放在搅拌机里。(而比尔,如果关于自闭症的传闻属实,他对此非常清楚。)
我注意到伟大的黑客和一般聪明人之间的一个区别是,黑客在政治上不正确。在优秀黑客之间,如果有秘密握手,那就是他们彼此了解得足够好,可以表达那些会让他们被公众石刑的观点。我可以理解为什么政治不正确在编程中会是一个有用的品质。程序非常复杂,并且至少在优秀程序员手中,非常流动。在这种情况下,质疑假设的习惯是有帮助的。
你能培养这些品质吗?我不知道。但你至少可以不压抑它们。因此,这是我对一个配方的最佳尝试。如果有可能让自己成为一个伟大的黑客,做到这一点的方法可能是和自己达成以下协议:你永远不必处理无聊的项目(除非你的家人否则会饿死),作为回报,你永远不允许自己做一个马虎的工作。我认识的所有伟大黑客似乎都达成了这个协议,尽管他们中的任何一个可能都没有选择的余地。
注释
[1] 公平地说,我必须说IBM制造的硬件还不错。我是在一台IBM笔记本电脑上写的。
[2] 他们确实注定要失败。他们几个月后关闭了。
[3] 我认为这就是人们谈论“生命的意义”时的意思。乍一看,这似乎是个奇怪的想法。生活不是一种表达;它怎么可能有意义?但它可以具有一种感觉,感觉很像意义。在像编译器这样的项目中,你必须解决很多问题,但这些问题都遵循一种模式,就像信号一样。而当你必须解决的问题是随机的时,它们就像噪音。
[4] 爱因斯坦曾在某个时候设计冰箱。(他有股份。)
[5] 很难确切说在计算机世界中什么构成研究,但作为第一近似,它是没有用户的软件。
我认为并不是出版使最优秀的黑客想在研究部门工作。我认为主要是因为不必与产品经理进行三小时的会议,讨论将Word 13.27的韩文版本与会说话的回形针集成的问题。
[6] 在建筑行业,类似的事情已经发生了很长时间。当你几百年前建造一座房子时,当地的建筑工人会建造其中的一切。但建筑工人越来越多地做的是组装由其他人设计和制造的组件。这就像桌面出版的到来,给人们带来了以灾难性的方式进行实验的自由,但这无疑更高效。
[7] 谷歌对微软的威胁远比网景大。可能比任何其他公司都要危险。尤其是因为他们决心战斗。在他们的招聘页面上,他们说他们的“核心价值观”之一是“不要做恶”。对于一家销售大豆油或采矿设备的公司来说,这样的声明只是古怪。但我认为我们在计算机界的所有人都认识到这是一种宣战的声明。
感谢杰西卡·利文斯顿、罗伯特·莫里斯和萨拉·哈林阅读这次演讲的早期版本。