PG Paul Graham 文集
100%
Part 5 · 早期文章 Early Essays

顶尖黑客

想创业吗? 获得 Y Combinator 的投资。

2004年7月

(本文源自作者在 Oscon 2004 上的演讲。)

几个月前,我完成了一本新书,在评论中我不断看到诸如“挑衅性”和“争议性”这样的词,更不用说“愚蠢”了。

我并非有意让这本书充满争议。我只是想让它高效。我不想浪费读者的时间,告诉他们已知的事情。直接呈现差异的部分更为高效。但我想,这注定会写成一本令人震惊的书。

爱迪生们

最无争议的“最具争议”观点是:财富差异或许并不像我们想象的那样是个大问题。

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

财富差异可能是生产效率差异的标志。(在一个只有一个人的社会中,两者是等同的。)而那几乎肯定是好事:如果你的社会没有生产效率差异,那很可能不是因为人人都是托马斯·爱迪生,而是因为你们根本没有托马斯·爱迪生。

在低科技社会中,你不太会看到生产效率的显著差异。如果有个游牧部落捡柴生火,最出色的拾柴者会比最差的多捡多少?两倍?而当你递给人们像计算机这样复杂的工具时,他们用它能做到的事情差异就变得巨大。

这不是新观点。弗雷德·布鲁克斯在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]

最后的疆域

在软件之后,对黑客来说最重要的工具大概就是他们的办公室了。大公司认为办公空间的功能是表达等级。但黑客使用办公室不仅仅是为了这个:他们把办公室当作思考的场所。如果你是一家科技公司,他们的思考就是你的产品。所以让黑客在嘈杂、分散注意力的环境中工作,就像在空气中充满烟尘的油漆厂里工作一样。

连环漫画《呆伯特》对格子间有很多吐槽,而且很有道理。我认识的所有黑客都鄙视它们。仅仅是可能被打断的前景就足以阻止黑客攻克难题。如果你想在有格子间的办公室里完成真正的工作,你有两个选择:在家工作,或者早来、晚走、周末来,那时没有别人在。公司难道没有意识到这是出了问题的一个迹象吗?办公环境应该是有助于你工作的东西,而不是你需要克服才能工作的障碍。

像思科这样的公司自豪于那里的每个人都有格子间,即使是CEO也不例外。但他们并没有自己想象的那么先进;显然他们仍然把办公空间视为等级的徽章。还要注意,思科以在公司内部很少做产品开发而闻名。他们通过购买创造了新技术的创业公司来获得新技术——那些公司的黑客们大概确实有安静的工作场所。

有一家理解黑客需求的大公司是微软。我曾见过微软的一则招聘广告,上面是一扇门的大图片。“为我们工作”,其前提是,“我们会给你一个能真正完成工作的地方。”你知道,微软在大公司中是引人注目的,因为他们能够内部开发软件。也许做得不算完美,但足够好。

如果公司想让黑客高效工作,他们应该看看黑客在家做什么。在家里,黑客可以自己安排一切,以便完成最多的工作。当黑客在家工作时,他们不在嘈杂、开放的空间里工作;他们在有门的房间里工作。他们在舒适、有社区氛围的地方工作,周围有人,需要思考时可以去散步,而不是在停车场包围的玻璃盒子里。他们有一张沙发,累了可以打个盹,而不是坐在办公桌前昏昏欲睡,假装工作。没有一群人在每晚的黄金编程时段开着吸尘器呼啸而过。没有会议,更不用说公司静修或团队建设活动了。当你看到他们在电脑上做什么时,你会发现这印证了我之前关于工具的说法。他们可能在工作中必须使用Java和Windows,但在家里,在他们可以自由选择的地方,你更可能发现他们在使用Perl和Linux。

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

有趣

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

我想同样的事情也发生在Google身上。当Google创立之时,那些所谓的门户网站普遍认为搜索是无聊且无关紧要的。但Google的那些人并不觉得搜索无聊,这正是他们能够做得如此出色的原因。

这是一个管理者能够发挥作用的领域。就像父母对孩子说“我打赌你不可能在十分钟内整理好整个房间”一样,一个好的管理者有时能够将一个问题的定义转化为一个更有趣的挑战。史蒂夫·乔布斯在这方面似乎特别擅长,部分原因仅仅是他拥有高标准。在Mac之前,已有许多小型、廉价的电脑。他将问题重新定义为:做一台美观的电脑。这或许比任何胡萝卜加大棒的方式更能激励开发者。

他们确实做到了。当Mac首次亮相时,你甚至不用开机就能知道它很出色;从外壳就能看出来。几周前我在剑桥街头散步时,在别人的垃圾堆里看到一个看似Mac的携带包。我打开一看,里面是一台Mac SE。我把它带回家插上电源,它居然启动了。快乐Macintosh的笑脸,然后是Finder。天哪,它是那么简单。就像……Google一样。

黑客喜欢为高标准的人工作。但仅仅要求严格是不够的。你必须坚持正确的事情。这通常意味着你自己也得是一名黑客。我见过偶尔有文章谈论如何管理程序员。其实应该有两篇文章:一篇讲如果你自己是程序员该怎么做;另一篇讲如果你不是程序员该怎么做。而第二篇可能可以浓缩成两个字:放弃。

问题主要不在于日常管理。真正优秀的黑客几乎是自我管理的。关键在于,如果你不是黑客,你就无法分辨谁是优秀的黑客。一个类似的问题解释了为什么美国车如此丑陋。我称之为设计悖论。你可能认为只要聘请一位伟大的设计师就能让你的产品变得美观。但如果你自己没有良好的审美,你怎么能识别出一位好的设计师呢?按定义来说,你无法从他的作品集中判断。你也不能依据他获得的奖项或担任过的职位来判断,因为在设计领域,如同大多数领域,这些往往受时尚和交际影响,而实际能力只能屈居第三。没有绕开的路:如果你不知道什么是美,就无法管理一个旨在创造美好事物的过程。美国车之所以丑陋,是因为美国汽车公司由审美不佳的人掌管。

这个国家的许多人认为品味是难以捉摸的,甚至是不重要的。其实两者都不是。要引领设计,管理者必须成为公司产品最挑剔的用户。如果你有真正良好的品味,你就能像史蒂夫·乔布斯那样,让“满足你”成为优秀人才乐于攻克的问题。

恼人的小问题

哪种类型的问题无趣,这个很容易说清楚:不是解决几个大而清晰的问题,而是要处理无数恼人的小问题。最糟糕的项目类型之一是为一款充满bug的软件编写接口。另一种是不得不为某个客户的复杂且定义不清的需求进行定制化。对于黑客来说,这类项目犹如千刀万剐。

恼人的小问题的显著特征是,你无法从中学习到任何东西。编写编译器之所以有趣,是因为它教你什么是编译器。但为有缺陷的软件写接口不会教给你任何东西,因为那些bug是随机的。[3] 因此,优秀的黑客避开恼人的小问题,不仅仅是出于挑剔,更多的是关乎自我保护。处理恼人的小问题会让你变笨。优秀黑客回避它们,就像模特回避芝士汉堡一样。

当然,有些问题天生就具有这种特性。而且由于供需关系,这类工作报酬特别高。所以,一家能想出办法让优秀黑客从事乏味问题工作的公司将会非常成功。你会怎么做呢?

创业公司就是这样一个发生地。在我们的创业公司,我们有Robert Morris担任系统管理员。这就像让滚石乐队在成人礼上表演一样。这种人才你是雇不来的。但人们愿意为创始人的公司做任何繁重的工作。[4]

大公司通过划分公司来解决问题。他们通过设立独立的研发部门,让员工不必直接面对客户的恼人小问题,从而吸引聪明人为他们工作。[5] 在这种模式下,研发部门就像一个矿井。他们产生新想法;也许公司其他部门能用到这些想法。

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

如果微软采用这种方法,他们的软件就不会漏洞百出,因为编写实际应用程序的不那么聪明的人就不需要做底层工作,比如内存分配。他们会直接用C语言编写Word,而是像搭大型乐高积木块一样,用Word语言组合起来。(我相信,Duplo是技术术语。)

聚集效应

除了有趣的问题,优秀黑客喜欢的是其他优秀的黑客。伟大的黑客往往会聚集在一起——有时甚至壮观地聚集,比如在Xerox Parc。因此,你吸引优秀黑客的数量不会与你为他们创造的优良环境呈线性关系。聚集的倾向意味着更像环境的平方关系。所以这是赢家通吃的局面。在任何一个时间点,只有大约十到二十个地方是黑客最想去的,如果你不在其中,你不会只是没有那么多伟大的黑客,而是只有零个。

拥有伟大的黑客本身不足以让公司成功。对Google和ITA——目前最热门的两个地方——来说效果很好,但这并没有帮助到Thinking Machines或Xerox。Sun曾经风光过一阵,但他们的商业模式是一辆下行的电梯。在那种情况下,即使是最好的黑客也救不了你。

不过,我认为在其他条件相同的情况下,能够吸引伟大黑客的公司将拥有巨大优势。也有人不同意这一点。当我们在1990年代拜访风投公司时,有几家告诉我们,软件公司不是靠编写出色软件取胜,而是靠品牌、掌控渠道和达成合适的交易。

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

以微软为模式是一个错误,因为他们整个文化源于那一次幸运的突破。微软是一个糟糕的数据点。如果你把他们排除在外,你会发现好产品确实往往在市场上获胜。风投应该寻找的是下一个苹果,或者下一个谷歌。

我认为比尔·盖茨知道这一点。他对谷歌的担忧不在于其品牌力量,而在于他们拥有更好的黑客。[7]

识别

那么,谁是伟大的黑客?当你遇到时,你怎么知道?这其实非常难。即使是黑客也无法分辨。我现在相当确定我的朋友Trevor Blackwell是一位伟大的黑客。你可能在Slashdot上读到过他是如何自制Segway的。这个项目的非凡之处在于,他在一天之内写了所有软件(顺便说一句,用的是Python)。

对Trevor来说,那是小菜一碟。但我第一次见到他时,以为他是个彻头彻尾的白痴。他站在Robert Morris的办公室里对他喋喋不休地讲着什么,我记得自己站在他身后,疯狂地对Robert做手势,让他把这个疯子赶出办公室,好让我们去吃饭。Robert说他起初也误判了Trevor。显然,当Robert第一次见到他时,Trevor刚开始一个新的计划,要把生活的方方面面都记在一叠索引卡上,走到哪里都带着。他也是刚从加拿大来,带着浓重的加拿大口音和鲻鱼头发型。

问题因这样一个事实而变得更加复杂:黑客们尽管以社交迟钝著称,有时却会花不少力气让自己显得很聪明。在研究生院时,我偶尔会在MIT的人工智能实验室周围闲逛。起初有点吓人。那里的每个人都说话飞快。但过了一段时间,我学会了快速说话的窍门。你不需要想得更快;只是每件事用双倍的词汇量来表达。

有了这么多信号中的噪音,当你遇到优秀黑客时很难分辨。即使是现在,我也分辨不出来。你也不能从他们的简历中判断。似乎评判一个黑客的唯一方法是和他一起工作。

这就是高科技区域只在大学周围出现的原因。这里的活跃因素与其说是教授,不如说是学生。创业公司在大学周围成长,因为大学把有前途的年轻人聚集在一起,让他们在同一个项目上工作。聪明人了解到谁是其他聪明人,然后他们一起开发自己的新项目。

因为除非与一个黑客合作过,否则无法评判他,所以黑客自己也无法判断自己有多出色。这在大多数领域都有一定程度的存在。我发现,在某方面表现出色的人,与其说是对自己的伟大深信不疑,不如说对周围其他人为何显得如此无能感到困惑。

但黑客尤其难以了解自己的水平,因为他们难以比较自己的工作。这在大多数其他领域更容易。在一百米赛跑中,你十秒钟就能知道谁最快。即使在数学中,对于哪些问题难解,什么构成好的解法,似乎也有普遍共识。但黑客工作就像写作。谁能说两本小说哪本更好?肯定不是作者本人。

对于黑客,至少其他黑客能分辨出来。这是因为,与小说家不同,黑客在项目上合作。当你通过网络向某人抛出几个困难问题时,你很快就能知道他们回击的力度。但黑客无法亲眼看到自己工作时的样子。所以如果你问一位伟大的黑客他有多出色,他几乎肯定会回答:我不知道。他不只是谦虚。他真的不知道。

我们谁也不知道,除非是那些我们真正共事过的人。这让我们陷入一种奇怪的境地:我们不知道自己的英雄应该是什么样的人。出名的黑客往往是因为公关的偶然事件而出名。偶尔我需要举一个伟大黑客的例子,却从不知道该说谁。脑海中浮现的第一个名字往往是我私下认识的人,但拿他们举例似乎有点没劲。所以,我想,也许我该说理查德·斯托曼,或者林纳斯·托瓦兹,或者艾伦·凯,或者某个类似的名人。但我完全不知道这些人是不是伟大的黑客。我从未和他们一起做过任何事。

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

培养

最后,是黑客们一直好奇的问题:你如何成为一名伟大的黑客?我不知道是否有可能让自己成为那样的人。但可以肯定的是,你能做一些让自己变蠢的事,而如果你能让自己变蠢,你大概也能让自己变聪明。

成为优秀黑客的关键,也许就在于做你喜爱的事。当我想到我认识的那些伟大黑客时,他们有一个共同点:要强迫他们去做自己不想做的事,极其困难。我不知道这是原因还是结果;也许两者都是。

要把一件事做好,你必须热爱它。所以,尽量让黑客行为保持为你所爱的事情,你就更可能把它做好。努力保留你14岁时对编程的那种惊奇感。如果你担心当前的工作正在腐蚀你的大脑,那它多半确实在腐蚀。

最优秀的黑客当然往往很聪明,但许多领域都是如此。有没有某种品质是黑客独有的?我问了一些朋友,他们提到最多的一个词是“好奇心”。我一直以为所有聪明人都好奇——好奇心不过是知识的一阶导数。但显然,黑客特别好奇,尤其是对事物运作方式的原理。这说得通,因为程序实质上就是对事物如何运作的巨细无遗的描述。

几位朋友提到了黑客的专注力——用其中一位的话说,就是“把脑袋以外的一切都屏蔽掉”的能力。我当然注意到了这一点。我还听几位黑客说过,哪怕喝了半杯啤酒,他们就完全无法编程了。所以,也许黑客行为确实需要某种特殊的专注能力。也许伟大的黑客能把大量上下文加载到脑中,这样当看到一行代码时,他们看到的不仅是那一行,而是整个程序。约翰·麦克菲写过,比尔·布拉德利作为篮球运动员的成功,部分得益于他超凡的周边视力。“完美”视力大约意味着47度的垂直周边视野。比尔·布拉德利有70度;他低头看地板时也能看到篮筐。也许伟大的黑客也有某种类似的天生能力。(我则靠用一门非常密集的语言来作弊,这等于缩小了球场。)

这或许能解释关于小隔间的分歧。也许负责设施的人,因为自己没有什么专注力可被打碎,根本不知道在小隔间里工作对黑客而言就像把脑子扔进搅拌机。(而比尔,如果关于自闭症的传言属实,恐怕对此深有体会。)

我注意到的另一个伟大黑客与普通聪明人的区别是,黑客更“政治不正确”。如果说优秀黑客之间有什么秘密握手暗号,那就是当彼此熟到可以畅所欲言、说出那种会被大众唾弃至死的观点时。我也能明白为什么政治不正确在编程中是一种有用的品质。程序非常复杂,而且至少在优秀程序员手中,非常灵活。在这种情况下,养成质疑假设的习惯大有裨益。

你能培养这些品质吗?我不知道。但至少你可以不压抑它们。所以,我尽力给出一个配方。如果有可能让自己成为伟大的黑客,方法或许就是和自己达成如下约定:你永远不必做无聊的项目(除非家人会因此挨饿),而作为交换,你永远不允许自己敷衍了事。我认识的所有伟大黑客似乎都达成了这个约定,尽管他们也许都别无选择。


注释

[1] 公平地说,我得承认IBM的硬件不错。我就是在IBM的笔记本上写这篇文章的。

[2] 他们确实注定失败。几个月后就关门了。

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

[4] 爱因斯坦曾一度设计冰箱。(他持有股份。)

[5] 很难确切说计算机世界中的研究是什么,但粗略而言,就是没有用户的软件。

我不认为是发表论文让最优秀的黑客想在研究部门工作。我觉得主要是不必和产品经理开三小时的会,讨论如何集成韩文版Word 13.27与那个会说话的曲别针的问题。

[6] 类似的事情在建筑业已经发生很久了。几百年前你盖房子时,当地的建造者会造出房子里的所有东西。但如今建造者越来越多地只是组装别人设计制造好的部件。就像桌面出版的到来一样,这给了人们以灾难性方式自由实验的空间,但它肯定更高效。

[7] 谷歌对微软的威胁比网景大得多。可能比任何其他公司都危险。不只是因为他们决心要打。在他们的招聘页面上,他们说自己的“核心价值观”之一是“不作恶”。对于一家卖大豆油或采矿设备的公司,这种声明只是古怪。但我认为计算机世界的所有人都看得出这是向谁宣战。