Paul Graham Essays

返回

伟大的黑客

发布于 2004-09-01

原文:https://www.paulgraham.com/gh.html

030 伟大的黑客

梦想启航创业? Y Combinator 等你来申请资金支持。

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》对立方体办公室有很多批评,原因是充分的。我认识的所有黑客都讨厌它们。仅仅是被打断的可能性,就足以阻止黑客处理难题。如果你想在一个有隔间的办公室里完成真正的工作,你只有两个选择:在家工作,或者早来晚走或在周末来,那时没有其他人在。公司难道不意识到这是一个标志,表明某些东西出了问题吗?办公环境应该是帮助你工作的东西,而不是你不得不克服的障碍。

像 Cisco 这样的公司为每个人都有一个隔间而自豪,甚至包括 CEO。但他们并不像他们认为的那么先进;显然他们仍然将办公空间视为等级的象征。也值得注意的是,Cisco 因为很少在内部进行产品开发而出名。他们通过收购创造新技术的初创公司来获得新技术 —— 在那里,黑客显然确实有一个安静的工作环境。

一个理解黑客需要什么的大公司是 Microsoft。我曾经看到 Microsoft 的一则招聘广告,上面有一张门的大图片。广告的前提是,为我们工作,我们会给你一个你可以真正专注工作的地方。你知道,Microsoft 在大公司中是不寻常的,因为他们能够在内部开发软件。也许不是很完美,但足够好了。

如果公司想让黑客保持高效,他们应该看看黑客在家里是如何工作的。在家里,黑客可以自己安排一切,以便他们可以做得最多。而且,当他们在家工作时,黑客不在嘈杂、开放的空间工作;他们在有门的房间里工作。他们工作在舒适、有邻里氛围的地方,有人在周围,有地方可以散步思考,而不是在停车场旁的玻璃盒子里。他们有一个沙发,当他们感到疲倦时,可以在上面小睡,而不是坐在桌子前昏昏欲睡,假装在工作。没有一群带着吸尘器的清洁人员在最佳黑客时间大声嚷嚷。没有会议,更不用说,天哪,公司撤退或团队建设活动了。而且,当你看看他们在电脑上做什么时,你会发现这强化了我之前关于工具的说法。他们可能不得不在工作中使用 Java 和 Windows,但在家里,他们可以自由选择时,你更有可能发现他们使用 Perl 和 Linux。

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

有趣的项目

除了优秀的工具,黑客还想要有趣的项目。什么使一个项目变得有趣?显然,像隐形飞机或特效软件这样公开性感的应用肯定很有趣。但任何应用,如果它提出了新的技术挑战,都可以变得有趣。因此,很难预测哪些问题会吸引黑客,因为有些问题只有在人们发现了一种新的解决方案时才变得有趣。在 ITA(编写 Orbitz 内部软件的公司)之前,从事航空票价搜索的人可能认为这是最无聊的应用之一。但 ITA 通过以更雄心勃勃的方式重新定义问题使其变得有趣。

我认为在 Google 也发生了同样的事情。当 Google 成立时,所谓的门户网站中的常识是搜索是无聊且不重要的。但 Google 的创始人不认为搜索无聊,这就是为什么他们做得如此出色的原因。

这是一个经理可以发挥作用的领域。就像父母对孩子说,我打赌你不能在十分钟内整理好你的整个房间,一个好的经理有时可以将问题重新定义为更有趣的问题。Steve Jobs 似乎在这方面特别擅长,部分原因仅仅是因为他有很高的标准。在 Mac 出现之前,有很多小巧、便宜的电脑。他重新定义了问题为:制造一个美丽的。这可能比任何胡萝卜或大棒都能更努力地推动开发者。

他们确实交付了。当 Mac 首次出现时,你甚至不需要打开它就知道它会很好;你可以从外壳上看出来。几周前,我在剑桥的街上走着,在某人的垃圾中,我看到了看起来像是一个 Mac 携带箱。我看了看里面,那是一个 Mac SE。我把它带回家并插上电,它启动了。快乐的 Macintosh 脸,然后是查找器。我的天,它是如此简单。它就像……Google。

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

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

在这个国家,许多人认为品味是一种难以捉摸的,甚至是轻浮的东西。它既不是。要推动设计,经理必须是公司产品的最苛刻用户。如果你有真正好的品味,你可以像 Steve Jobs 那样,让满足你成为好人喜欢工作的那种问题。

讨厌的小问题

很容易说出哪些问题不感兴趣:那些你不得不解决很多恶心的小问题,而不是几个大的、清晰的问题的情况。最糟糕的项目之一是为一个充满错误的软件编写接口。另一个是当你必须为一个客户的复杂且定义不清的需求定制某些东西时。对黑客来说,这些类型的项目是死亡的千刀万剐。

讨厌的小问题的特征是你从中学不到任何东西。编写编译器很有趣,因为它教你编译器是什么。但为一个错误百出的软件编写接口不会教你任何东西,因为错误是随机的。3 所以这不仅仅是挑剔让好的黑客避免恶心的小问题。这更多是一个自我保护的问题。处理恶心的小问题会让你变得愚蠢。好的黑客避免它们出于同样的原因模特避免汉堡。

当然,有些问题本质上就是这样的。并且因为供需关系,它们支付特别好。所以,如果一家公司找到了一种让伟大的黑客在乏味的问题上工作的方法,那将非常成功。你怎么做呢?

一个发生这种情况的地方是在初创公司。在我们的初创公司,我们有 Robert Morris 担任系统管理员。这就像让滚石乐队在一次成人礼上演出。你无法雇佣那种才华。但人们会为他们是创始人的公司做任何数量的苦差事。4

更大的公司通过划分公司来解决这个问题。他们通过建立一个单独的研发部门来为他们工作,员工不必直接处理客户的恶心小问题。5 在这个模型中,研究部门的功能就像一个矿井。他们产生新的想法;也许公司的其他部分将能够使用它们。

你可能不需要走到这个极端。自下而上的编程提出了另一种划分公司的方式:让聪明的人作为工具制造者工作。如果你的公司制造做 x 的软件,有一个小组构建写这种类型软件的工具,另一个小组使用这些工具编写应用程序。这样你可能能让聪明的人写 99% 的代码,但仍然几乎像在传统研究部门中那样将他们与用户隔离开来。工具制造者会有用户,但他们只会是公司自己的开发人员。6

如果 Microsoft 采用这种方法,他们的软件就不会有这么多安全漏洞,因为写实际应用程序的不那么聪明的人不会做像分配内存这样的低级工作。而不是直接用 C 写 Word,他们会把大块的 Word - 语言积木拼在一起。(Duplo,我相信,是技术术语。)

聚集效应

与有趣的项目一样,好的黑客也喜欢与其他优秀的黑客一起工作。伟大的黑客倾向于聚集在一起 —— 有时候非常壮观,就像在 Xerox Parc 那样。因此,你吸引优秀黑客的能力并不是线性增长的,而是随着你为他们创造的环境变得更好而成平方增长。所以这是一个赢家通吃的游戏。在任何给定的时间点,只有大约十个或二十个地方是黑客最想工作的地方,如果你不在这个列表上,你不仅会吸引到更少的优秀黑客,你可能一个也吸引不到。

拥有伟大的黑客并不足以确保一家公司的成功。这对 Google 和 ITA 来说非常有效,它们是目前的热点,但这并没有帮助 Thinking Machines 或 Xerox。Sun 有一段时间运行得很好,但他们的商业模式正在下滑。在这种情况下,即使是最好的黑客也无法挽救你。

我认为,尽管所有其他条件都相同,但能够吸引伟大黑客的公司将拥有巨大的优势。有些人可能不同意这一点。在我们 1990 年代拜访风险资本家时,有几家告诉我们,软件公司不是通过编写伟大的软件赢得胜利,而是通过品牌建设、主导渠道和做出正确的交易。

他们真的似乎相信这一点,我认为我知道为什么。我认为许多风险资本家在寻找的,至少是无意识中,是下一个 Microsoft。当然,如果 Microsoft 是你的榜样,你不应该寻找希望通过编写伟大软件取胜的公司。但风险资本家寻找下一个 Microsoft 是错误的,因为除非有其他公司准备在恰当的时刻弯腰,成为下一个 IBM,否则没有任何创业公司可以成为下一个 Microsoft。

以 Microsoft 为模型是一个错误,因为他们的整个文化都源于那次幸运的机遇。Microsoft 是一个坏例子。如果你把它们排除在外,你会发现好的产品确实倾向于在市场上获胜。风险资本家应该寻找的是下一个 Apple,或下一个 Google。

我认为 Bill Gates 知道这一点。他担忧 Google 的不是他们品牌的力量,而是他们拥有更好的黑客。7

认可

那么,谁是伟大的黑客?你怎么知道你遇到了一个?这实际上非常难。即使是黑客自己也很难判断。我现在相当确定我的朋友 Trevor Blackwell 是一个伟大的黑客。你可能已经在 Slashdot 上读到了他是如何自己制造 Segway 的。这个项目的不同寻常之处在于他在一天内写完了所有软件(顺便说一句,是用 Python)。

对 Trevor 来说,这是常规操作。但当我第一次遇到他时,我认为他是一个彻底的白痴。他当时站在 Robert Morris 的办公室里对他喋喋不休地说着某件事,我记得我站在他后面对 Robert 做着疯狂的手势,让这个疯子离开他的办公室,这样我们就可以去吃午饭了。Robert 说他一开始也误判了 Trevor。显然当 Robert 第一次遇到他时,Trevor 刚刚开始了一个涉及在一堆索引卡上写下他生活中每一个方面的所有事情的新计划,他到处带着这些卡片。他也是刚从加拿大来的,有一种浓重的加拿大口音和一个莫利特发型。

问题是,尽管黑客以社交迟钝著称,但有时他们会付出很大努力来表现得聪明。当我在研究生院时,我偶尔会在 MIT 的 AI 实验室闲逛。起初有点吓人。那里的每个人说话都很快。但过了一会儿我学会了说话快的技巧。你不必思考得更快;只需用两倍的词语说出一切。

有了这么多的噪音在信号中,很难在你遇到他们时判断好的黑客。我现在也不能判断。你也不能从他们的简历上判断。似乎判断一个黑客的唯一方法是与他一起做一些事情。

这就是为什么高科技领域只围绕大学发生的原因。这里的活性成分不太是教授,而是学生。大学将有前途的年轻人聚集在一起,让他们在相同的项目上工作。聪明的人学会了谁是其他聪明的人,他们一起策划了自己的新项目。

因为你不能判断一个伟大的黑客,除非和他一起工作,黑客自己也不知道他们有多好。这在大多数领域都是真的。我发现,那些在某事上很棒的人并不是那么确信自己的伟大,而是对为什么其他人看起来如此无能感到困惑。

但对黑客来说,知道自己有多好尤其困难,因为很难比较他们的工作。这在大多数其他领域都更容易。在一百米赛跑中,你知道在 10 秒内谁跑得最快。即使在数学中,似乎也有一个关于哪些问题难以解决,以及什么构成一个好的解决方案的一般共识。但黑客活动就像写作。谁能说哪两部小说更好?当然不是作者。

至少其他黑客可以判断。那是因为,不像小说家,黑客在项目上合作。当你在网上对某人提出一些难题时,你会很快了解到他们如何回应。但黑客不能在工作时观察自己。所以如果你问一个伟大的黑客他有多好,他几乎肯定会回答,我不知道。他不仅仅是在谦虚。他真的不知道。

我们都不知道,除了我们实际工作过的人。这让我们处于一个奇怪的情况:我们不知道我们的英雄应该是谁。成名的黑客往往是因为 PR 的随机事故而成名。偶尔我需要举一个伟大的黑客的例子,我永远不知道该用谁。第一个想到的名字总是我亲自认识的人,但使用他们似乎很蹩脚。所以,我想,也许我应该说 Richard Stallman,或 Linus Torvalds,或 Alan Kay,或像那样的有名人物。但我不知道这些家伙是不是伟大的黑客。我从未和他们一起做过任何事情。

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

培养

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

成为一个好的黑客的关键可能是做你喜欢的事情。当我想到我认识的伟大黑客时,他们共有的一个特点是让他们从事他们不想做的事情的难度极高。我不知道这是原因还是结果;可能两者都有。

要做好某事,你必须热爱它。所以在你能保持黑客活动作为你热爱的事情的程度上,你很可能会做得很好。试着保持你 14 岁时对编程的那种好奇心。如果你担心你现在的工作正在腐蚀你的大脑,那它很可能就是。

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

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

这可以解释对隔间的不同看法。也许是负责设施的人,没有任何集中注意力可以被打碎,根本不知道在隔间工作对黑客来说感觉就像大脑被搅拌器搅拌一样。(而 Bill,如果有关自闭症的传言是真的,太了解这一点了。)

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

你可以培养这些品质吗?我不知道。但你至少可以不压制它们。所以这是我最好的尝试,一个配方。如果有可能让自己成为一个伟大的黑客,做到这一点的方法可能是与自己达成以下协议:你永远不必从事无聊的项目(除非你的家人会饿死),作为回报,你绝不允许自己做半吊子的工作。我认识的所有伟大的黑客似乎都做了这个交易,尽管可能没有人在这件事上有任何选择。

最后编辑于 2024-04-15