什么是黑客?如何成为伟大的黑客?1024 程序员节,送你一本经典《黑客与画家》
保罗·格雷厄姆 开智学堂
“ 你了解黑客吗?黑客有什么共同点?他们真正想要的是什么?喜欢怎样的工作环境?又该如何发现、管理黑客?如何成为一名伟大黑客?今天是程序员节,为你送上美国著名程序员保罗·格雷厄姆的一篇雄文,解答你所有问题。同时,积极参与文末的留言互动,还有机会获得格雷厄姆的《黑客与画家》一书哦~
作者丨保罗·格雷厄姆
本文为开智学堂精选好文
开智学堂(http://www.OpenMindClub.com)
(此文是保罗在 2004 年 OSCON「奥赖利开源大会」的讲座原文)
几个月前我完成了一本新书:《黑客与画家》。我留意读者反馈频繁出现一些词,例如「挑衅」「引起争议」,更或者是「傻逼」这样的字眼。
我并非为此书制造话题,只是想提高效率。因为我不想浪费时间告诉他们已知的东西,我想直接告诉他们(已知与未知的)区别,这样显然更高效,但这也会冲击他们的固有观念。
社会需要爱迪生
读者反馈中最具争议的观点就是:贫富差距也许不像我们想的那样是个大问题。
我不是说贫富差距本身是件好事。我是指在某些情况下它也许是好征兆。例如偏头痛它本身并不好,但是它也可以是好征兆。比如说,你的头部受到重击后产生了这种头痛,它表明你正在恢复意识。
贫富差距可以是生产力差距的标志,这其实是件好事:如果社会生产力差距消失了了,这可能不是因为人人都成为了托马斯·爱迪生(美国发明家、商人),而是因为这个社会中一个托马斯·爱迪生都没有。
在科技水平较低的社会,贫富差距并不明显。
如果游牧民族部落用收集柴火来衡量生产力,最好和最差的柴火收集者之间的生产力差距能有多少?但当你给人们像电脑这样的复杂工具,他们之间的生产力差距将是巨大的。
这已不是新观点。早在 1974 年,Fred Brooks 就发表过此类观点,此后的研究在 1968 年发表。不过,Fred Brooks 仍低估了程序员之间的差距。
譬如说到写代码的效率,他认为:最优秀的程序员可以用普通程序员十分之一的时间解决给定的问题。
但如果问题并非给定的呢? 编程与其他领域一样,其困难的部分不是解决问题,而是决定要解决何种问题,这需要想象力,想象写力可在实践中主导可测量的编程效率,但想象力很难测量。
行业内的生产力各有差异,但仅有少数几个行业的生产力的千差万别,编程就是其中一个。程序员之间的差异已经大到可以分门别类。即便如此,我认为这并非编程本质所固有的。
在每个领域中,科技都能加大生产力的差距。编程领域里,我们已经有了许多技术杠杆,随着杠杆作用时间延长,我们所见的差异在其他领域也会慢慢出现。公司、国家的成功将很大程度上取决于他们如何解决这个问题。
如果效率的差异随着科技水平而增长,那么最有效率的个体贡献不仅远远超过其他人,而且会随着时间不断增长。
当一个团体 90% 的输出是靠 1% 的人完成,一旦出现意外(海盗袭击或者中央独裁计划)将他们的生产力拉低至平均水平,就会损失惨重。
如果我们想要得到这群高生产力的人,我们就需要理解他们:他们的动力何在?他们工作需要什么?他们想得到怎样的认可?如何让他们来为你工作?当然,还有最后一个(重要)问题:如何成为他们这样的人?
不止是钱
我知道不少超级黑客,于是我开始思考他们有什么共同点。定义他们为超级黑客的原因大概是他们真心热爱编程。
普通程序员写代码只是为了养家糊口。伟大的黑客认为写代码是件乐趣,如果再有人为他们的乐趣付费,他们自然开心不已。
人们常常认为伟大的程序员淡泊金钱。这不完全正确。的确,他们最关心的是做有趣的工作。
但如果你赚的钱足够多,你就可以做任何想做的工作,因此,黑客们会关注可赚大笔的项目,但如果他们仍然要每天上班,他们更关注工作的内容,而不是薪水。
从经济学角度来看,这个事实非常重要,因为它意味着你不需要支付黑客自身实际的价值。
伟大程序员在效率上是普通程序员的十倍甚至百倍,但他会觉得自己拿到他人三倍薪水已是幸运。部分原因是他们并不知道自己有多优秀,也同样因为金钱不是他们最想要的东西。
黑客们想要什么?像所有的手艺人一样,黑客喜欢好工具。事实上,这种说法还算保守,黑客们难以忍受垃圾工具,他们会甚至拒绝在基础架构错误的项目上工作。
我曾在一家创业公司工作,我们的告示牌上贴着一张 IBM 的广告。那是一张 AS/400 的 图片,标题写着「黑客鄙视之」。
当你要决定要项目的基础架构时,你要知道这不仅是一个技术决定,也是一个社交决定,甚至要比这两种决定更为重要。
举个例子,如果公司需要做一个软件,选择使用 Java 编程语言也许比较慎重的。但当你选择一种编程语言,你也在选择一个社区。你可以雇到的 Java 程序员也许并不如 Python 程序员聪明。
所以,黑客的素质比选择的语言更重要。至于语言之间的优势比较,偏爱 Python 多过 Java 的优秀黑客也可以告诉你。
偏商业风格的人倾向选择最流行的语言,因为他们认为语言是种标准。他们不想拿公司下赌注。但编程语言不只是一种标准或格式。编程语言是表达的媒介。
我早前读到报道说 Java 已经击败 Cobol 成为最流行的语言。作为一种标准,你不能奢望更多,但作为一个表达媒介,你可以做得更好。
所有我能想到的伟大程序员,只有一个人会自愿做 Java 编程的项目。除了在 Sun 公司的员工,用Java 为编程语言的,一个都没有。
伟大的黑客普遍坚持使用开源软件。
因为开源软件不仅更好用,而且可获得更多的操作权限——好黑客都需要更高操作权限,这也是他们成为厉害黑客的原因之一:东西坏了,他们就会修好它。
你会希望他们为你写软件时是这种工作风格,所以也无需诧异他们对操作系统也是这样。
几年前,一个做风投的朋友告诉我,他加入了一个新的创业公司,听上去前途一片光明。但后来我再与他交流时,他说他们公司已决定在 Windows NT 上开发软件,并请了一名经验丰富的 NT 开发者当 CTO。
当我听完,我心想,这班人要完蛋了。
第一、这个 CTO 不可能是一流的黑客,因为要想成为杰出的 NT 开发者,他必须主动使用过无数次 NT,我无法想象一个伟大的黑客会做这种事。
第二、就算他很厉害,他也很难请到足够厉害的人来做这个必须在 NT 上开发项目。
图片来源 Pixabay
最后的边界
除了软件,对黑客来说,最重要的工具就是办公室。
大公司认为办公场所的功能在于显示级别,但对黑客们,办公室不仅是办公场所,更是集中思考的地方。
对一家科技公司来说,他们的思考就是公司的产品。所以,让他们在嘈杂而令人无法专注的场所工作,就像在灰尘弥漫的地方开一家油漆厂。
连环漫画 Dilbert 曾多次谈论过小隔间办公室的好处,但所有我认识的黑客都讨厌它。它仅有的用途就是防止黑客想出解决困难的方法。
如果你想在小隔间完成工作,你有两个选择: 一是在家工作;二是是早晨、晚上、周末没人在的时候来工作。
难道这些公司不会意识到是哪里出了问题吗?办公环境不仅是你工作的地方,它还是可提高效率的地方。
像 Cisco 这样的公司非常自豪每个人甚至 CEO 都有一个小隔间,但是这些小隔间并非如他们认为的那样先进。很明显,他们仍然将办公场所当做等级的象征。
你要知道 Cisco 很少自己做产品开发,他们通过买下创业公司来获得新技术,而创业公司往往有黑客可以安静工作的地方。
微软是个非常了解黑客需求的大公司。我记得看到微软的招聘广告,是一幅图片,上面有一扇门。「为我们工作,前提是,我们会提供你可以真正工作的地方。」
微软是家卓越的公司,他们能够自己开发软件,也许不是非常优秀,但也算可以了。
如果公司希望黑客们生产效率更高,应该看看黑客们在家是如何度过的。在家时,黑客们可以自己安排所有事情,所以他们可以完成大部分工作。
他们不喜欢嘈杂的公开环境,更喜欢呆在有门的房间,周围是舒适熟悉的东西和人,他们有思考沉浸的地方,也有散步的地方。
家里有可以小憩的沙发,累了也不必坐在办公室边假装工作,黄金时间的不会有吸尘器的骚扰。没有回忆、公司聚会、团体活动。
黑客们的电脑操作也会印证我前面关于工具使用的观点,也许工作时,他们会被逼无奈使用 windows 和 Java,但在家时,他们很有可能使用 Perl 和 Linux。
的确,统计显示 Cobol 和 Java 是最流行的语言,但这是有误导的。
如果我们想知道最好的工具是什么,我们需要留意在自由挑选编程语言时黑客的选择,也就是他们在自己的项目中是使用什么工具。你会发现开源操作系统已经主导市场份额了,最流行的语言应该就是 Perl。
追逐有趣
和好工具一样,黑客想要有趣的项目。
什么是有趣的项目?当然是那些性感的应用,例如隐形战斗机或者特效软件必然是有趣的,有技术挑战的应用也是有趣的。
所以很难预知黑客们喜欢什么问题,因为有些开始枯燥的问题会在发现新的解决办法后变得有趣。
在 ITA(一家旅行规划网站,曾写出 Orbitz)之前,在航空公司做票价搜索工作的人们大概觉得这是最无聊的应用。但是 ITA 大胆地重新定义了问题,使它变得有趣多了。
我想这和 Google 类似。Google 成立时,门户网站的传统共识是搜索无聊且不重要。但 Google 的人并不这么认为,这也是他们做得如此出色的原因。
在此方面,管理者的影响力会非常大。就像父母对小孩子说,我打赌你 10 分钟内整理好自己的房间。
一个好的管理者可以重新定义问题,使之更为有趣。Steve Jobs 就对此非常在行,一部分纯粹出于高标准要求。
Mac 之前已经有很多小巧不贵的电脑。于是他重新定义问题为:做一个好看的电脑。这比任何胡萝卜或大棒都更能驱动开发程序员的工作。
他们当然做到了。当 Mac 首次亮相,你不用开机就能知道它有多棒,光看盒子你就能知道。
几周前我在剑桥散步,在垃圾箱里我看到了 Mac 包装盒。我看了看里面,竟然有一个Mac SE(译注:1987-1990 年代产品)。我带回家连接电源,它启动了。Macintosh 的笑脸,然后是 Finder。天呢,它就这么简单,就像 Google。
黑客喜欢为高标准的人工作。但仅仅严格是不够的。你需要坚持正确的东西,而这经常意味着你自己也必须是个黑客。
我偶尔会看到文章说如何管理程序员。说实在的,应该有两篇文章:一篇是讲如果你自己就是一个程序员,你该怎么做;一篇则讲如果你不是。不过第二篇可能最后就剩两个字:放弃。
日常管理并不是最重要的问题。好的黑客通常非常自律。问题在于,如果你自己不是黑客,你无法分辨谁是好的黑客。
类似的原因可以解释为什么美国汽车都很丑。我称之为设计悖论。你也许认为你可以雇佣一个好设计师来让你的产品变好看。
但如果你自己没有好品味,那要如何判断设计师的好坏? 你从他的作品集无法做出评断,你从他过去的工作中也无从判断,因为在设计领域,这些很可能被潮流和交际所决定,实际技能水平只能排到第三位。
所以问题依然:如果你不知道什么是美,你就无法管理好一个美的产品诞生过程。美国汽车不好看就是因为美国汽车生产公司的管理者都没什么品味。
许多人认为品味难以捉摸,甚至虚无缥缈。但不是这样,为了驱动设计,管理者必须是对公司产品要求最高的用户。
如果你的确有好品味,你可以像乔布斯一样,将满足自己的需求,变成优秀黑客愿意解决的问题。
图片来源 Pixabay
讨厌的小问题
什么样的问题是无趣的,这个就很简单了,比起大的清晰的问题,那些讨厌的小问题很让人烦躁。
最糟糕的项目就是为一个满是 bug 的软件写接口。另一种就是需要为散客定制某个复杂且不明确的产品。对于黑客来说,这种项目堪比凌迟处死。
这些小问题最让人反感的地方在于,你学不到任何东西。
写一个编译器很有趣,是因为这教会你什么是编译器。但为一个很多 bug 的软件写接口一点也不有趣,是因为 bug 是随机的。
所以并不是因为挑剔,黑客之所以避免处理这些讨厌的小问题,更多是一种自我保护。处理这些讨厌的问题会让人变蠢。好的黑客拒绝小问题就像模特拒绝芝士汉堡。
当然有些问题本身具有这种特性:因供需关系,支付的薪酬相当可观。如果一家公司能想办法让黑客解决繁琐的问题,它将会所向披靡。所以,你会怎么做呢?
这会发生在创业公司。如果创业公司有 Robert Morris(译注:网络科学家)做系统管理员,就好像让滚石乐队在犹太成年礼上演出。你请不到这种天才。但如果是自己开创的公司,他们会愿意做任何苦差事。
大型企业通过划分部门解决这个现象。他们为聪明绝顶的人成立了一个研发部门,这样他们就不必被客户的讨厌问题所骚扰。
这种情况下,研发部门像是一个地下矿藏。他们生产新思路新想法,公司的其他部门也能用得到。
或者也不用这么极端。可以采用另一种方式:自下而上式的编程(译注: 指从小零件的细节入手): 就是让聪明的人成为工具制造者。
如果你的公司软件是做一件事 X,让一组黑客去建造工具,这些工具是让建造 X 的人所使用的;另一组则用这些工具去制作应用软件。
这样的话,你能让聪明的人完成 99% 的工作量,但仍然让他们像传统研发部门一样,与普通用户绝缘。工具制造者也有他们的用户,但是仅限于公司内部的开发者们。
如果微软采取这种方式,他们的软件不会有那么多安全漏洞,因为不那么聪明的人写的应用往往考虑不周,比如不具备内存分配这样的低级别功能。与其直接用 C 编写语言,他们更容易将大块的语言像乐高一样接入。
聚集黑客
除了有趣的问题,优秀的黑客也喜欢其他优秀的黑客。
伟大的黑客会聚集在一起,有时会异常瞩目,例如 Xerox Parc(译注: 许多现代计算机技术的诞生地),对黑客的吸引力与提供的环境并非线性比例,聚集倾向意味着环境的平方。赢得好黑客的地方拥有一切适合黑客成长的特质。
任何时代,都只有十到二十个黑客最想工作的地方,如果你不是它们其中之一,你连少数几个黑客都不可能有,也就是,一个都没有。
仅仅是拥有伟大的黑客并不能使公司成功,Google 和 ITA 是当前的热门公司,它们成功了,但是 Thinking Machine 和 Xerox 就并不成功。
Sun 公司有一阵子不错,但是他们的商业模式已经在走下坡路,这种情况下,最好的黑客也帮不了你。
我认为,当其他条件相同,一家公司如果拥有厉害的黑客一定是占优势的。许多人不同意这个观点。
90 年代时我们做风投的时候,有人说软件公司的成功并不是靠创造伟大的软件,而是依靠品牌、市场销量和正确的交易决策。
他们似乎的确相信这些,我知道这是为什么,因为风投们下意识寻找的是下一个微软。如果微软是你想寻找的模型,你自然不会找那些创造出伟大软件的公司。
然而风投错了,没有创业公司会成为下一个微软,除非其他公司准备好了适时弯腰成为下一个 IBM。
拿微软作当模型是错误的,因为他们的成功完全靠的是运气。如果你抛开微软,你会发现好的产品的确能赢得市场。风投们应该寻找的下一个苹果,或下一个 Google。
我想比尔盖茨明白着点,他最担心的不是 Google 的品牌能量,而是 Google 拥有更多更好的黑客这个事实。
图片来源 Pixabay
发现黑客
所以哪些人是伟大的黑客呢?如何知道你已经遇到了黑客呢?想做到这个并不容易,就算黑客自己都不一定知道。
我非常肯定我的朋友之一 Trevor Blackwell(Y Combinator 的共同创立者)是一名伟大的黑客。可能你在 Slashdot上(译注:科技相关新闻网站)已经读过他自己创造电动平衡车的故事。
这个故事最令人惊叹的地方在于,他仅用了一天时间就完成了所有的软件开发(顺带一提,用的是 Python)。
对 Trevor 来说,这是意料之中。但当我们第一次见面,我以为他就是个傻瓜。
当时他在 Robert Morris 的办公室里胡说八道,我记得我站在他后面气急败坏地打着手势,让 Robert 将这个蠢蛋撵出去,这样我们可以去吃午饭了。
Robert 说他第一次见 Trevor 也误判了,因为当时 Trevor 刚开始一件新尝试:将自己生活中的所有事写在卡片上并标上序号,那些卡片他走到哪儿都带着。Trevor 当时刚刚从加拿大过来,有着很重的加拿大口音和胭脂魚发型(译注:80年代流行发型,头顶及两侧短 后面长)。
尽管黑客对社交较为淡漠,但都很努力表现得非常聪明。
我读研究生的时候,经常在 MIT 的 AI 实验室出没,起初那里看起来令人生畏,每个人语速都那么快。但一段时间之后,我学会了如何快速讲话,不需要思考得多么迅速,只需要用两倍的语句描述所有事情就可以。
许多这样干扰因素的存在,也导致很难分辨好的黑客。到今天我也无法说出哪种是好,哪种是坏,从他们的简历中是无从知晓的,唯一的办法就是:与黑客一起工作。
这也是为什么高科技园仅在大学附近建立,因为学生比教授活跃得多。大学附近成长出许多创业公司,是因为年轻人为了共同的事业而聚在一起。聪明的人向其他聪明的人学习,他们一起创造了新的项目。
因为除了一起工作之外,你没有别的方法辨别黑客,黑客自己也不知道他们有多厉害。
事实上,多数领域都是这样。某个领域中专长出色的人往往并不相信自己很厉害,反而对周围的人表现得如此无能而困惑不解。
但对黑客来说,知道自己有多厉害的确不易,因为他们的劳动成果很难互相比较。
其他领域比较起来就没这么难,比方说 100 米赛跑,你 10 秒钟就能知道谁跑的最快。数学里对于什么问题比较难,哪种答案比较好,也都是有普遍共识的。
然而黑客更像是写作,谁能决定两篇小说中的哪篇更出色?作者自然无法决定。
黑客可以知道某个人有多厉害。和小说家不同,黑客们协作完成项目。当你提出一些很难的问题,你黑客们绝对会迅速回应。
工作时,黑客们无法自己看着自己,所以如果你问一个黑客他有多厉害,他肯定会回答,我不知道。他并不是谦虚,他真的不知道。
除了一起工作过的人,没有人知道黑客有多厉害. 这也产生了一个奇怪的现象:我们不知道谁是英雄。有名的黑客一般是因为某些事故才变得有名。
偶尔我需要给出一些伟大黑客的例子,我总是不知道用谁的例子。我第一想到的永远是我个人认识的人,但这也许有失偏颇。
也许我应该说 Richard Stallman(译注: 自由软件基金创始人, Emacs & GNU project 创造者),或者 Linus Torvalds(译注:Linux 内核之父),或者 Alan Kay(译注:面向对象编程和窗口式图形用户界面先驱)这些有名的人。
但是我并没有和他们一起工作过,我不能肯定他们真的是伟大的黑客。
如果黑客界有迈克尔·杰克逊,没人知道,连他自己也不会知道。
培养黑客
最后,黑客们最为好奇的问题:如何成为一个伟大的黑客? 我不知道能否让你成为伟大的黑客。
但肯定有办法让你变蠢,而既然你可以让自己变蠢,那你应该也可以让自己变聪明。
成为好黑客的关键,是做你喜欢的工作。我认识的伟大黑客,有一个共同点就是,很难让他们做不想做的事。我不知道这是原因还是结果,或许都是。
想把某件事做好,你就必须爱上它。如果你把黑客当成喜欢的事,你很有可能做得很好。
保留你 14 岁对编程的惊奇感。如果你担心现在的工作正在腐蚀你的大脑,你担心的很有可能就是事实。
最好的黑客当然是聪明的,许多领域都是如此,但是黑客有什么特质吗?我询问了一些朋友,他们提到最多的就是好奇心。
我一直觉得所有聪明的人都有好奇心,因为好奇心是知识的衍生品。但是很明显,黑客有着特殊的好奇心,尤其在「事情是如何运作」的问题上。这说得通,因为程序本身就是对事物运作机制的翔实描述。
有些朋友还提到一项黑客能力:专注,他们可以将任何东西从大脑中隔离,做到「心无旁骛」。我当然也注意到这一特质。
有朋友说过,如果喝了酒,哪怕只有半瓶,他也完全无法写程序。所以黑客的确对专注度有非常高的要求。伟大的黑客可以在将海量内容置入大脑,当他们看着一行代码,他们看到的不仅是这一行更是整个程序。
John McPhee(译注:美国作家)写过关于 Bill Bradley(译注:前 NBA 运动员,现在为政治家)的成功部分是由于非凡的周边视力。
完美视力是指约 47 度的垂直视力,但 Bill Bradley 有 70 度,这意味着当他看着地板时,他也同时能看到篮筐。也许,伟大的黑客的确具有一些与生俱来的能力。
这也许可以解释小隔间的脱节感。负责公司设施的人,估计对专注度要求不高,所以不知道对于黑客来说,小隔间工作就像是在搅拌机里搅拌大脑。
我还注意到一个伟大黑客的共同点是,他们会倾向于「政治不正确」。好的黑客之间会结成秘密联盟,当他们彼此间的了解加深,就会交流一些能被普通民众乱石砸死的观点。
我能理解为什么「政治不正确」是一项有用的品质。程序非常复杂,在优秀程序员手中又非常流畅,此种情况下,质疑一切是个好习惯。
你能培养这些品质吗?我不知道。但你至少不要抑制它们。
所以我的建议是,如果你有塑造自己成为伟大的黑客的潜力,就要做到以下两点:永远不要在无聊的项目上浪费时间(除非你的家庭会因此饿肚子);永远不要做不够格的蹩脚东西。所有伟大的黑客都做到了这两点。■
原文:http://www.paulgraham.com/gh.html 编译:倪梦竹、高鹤 & 陈素封
互动话题:【程序员】
- 你是程序员吗?与大家谈谈作为一名程序员的感受吧~
- 你身边有程序员吗?你心目中的程序员是什么样的?来说说吧~
【参与方式】
如果你是开智书友会成员,请以「我是开智书友会 xx 分会成员」开头留言,一休将综合留言内容和点赞数(高质量、用心的留言更容易被选中哦),选取 2 名书友会成员,1 名非书友会成员作为幸运读者,每人获赠 1 本《黑客与画家》(获奖名单将于明日 18:00 前公布)。