《黑客与画家》
约 6285 字大约 21 分钟
2018-04-23
书名:黑客与画家
作者:paul graham
首次出版:2004
中文版首次出版:2010
译者:阮一峰
保罗·格雷厄姆其人其事
被收购之后,格雷厄姆就成为了雅虎的员工,继续从事编程。他在那里工作了一年半,总是感觉很不自在,不适应雅虎的企业文化,用他自己的话说,就是不习惯大公司的官僚环境,他说:“运营创业公司,每天都像在战斗;而为大公司工作,就像在窒息中挣扎。”于是,他选择了辞职。
译者序
想要把握这个时代,就必须理解计算机。理解计算机的关键,则是要理解计算机背后的人。表面上这是一个机器的时代,但是实际上机器的设计者决定了我们的时代。
从一开始,黑客就是有精神追求的。自由软件基金会创始人理查德·斯托尔曼说:“出于兴趣而解决某个难题,不管它有没有用,这就是黑客。”
前言
黑客行为必须包含三个特点:
- 好玩
- 高智商
- 探索精神
黑客的追求的是这三种价值,而不是实用性或金钱。
应该把黑客与画家当作同一种人看待。和画家一样,黑客只是怀有一门特殊手艺,有创造天赋的普通人。编程是一种艺术创作,黑客就是艺术家,开发软件与画家作画,雕塑家雕塑,建筑师设计房屋并没有本质不同。
虽然黑客从外表看上去一般都是呆呆的,但是他们的大脑内部却是一个有趣得让你吃惊的地方。
第一章 为什么书呆子不受欢迎
这一章作者阐述了书呆子在学校不受欢迎的原因正是因为他们太聪明。大多数处于青少年时期的学生都尽可能地让自己“合群”和“受欢迎”,否则就会遭受到排挤。既然书呆子很聪明,他们肯定也意识到这一点,但是为什么他们还是把注意力放在读书或观察世界上面,而不是让自己受欢迎呢?因为读书和观察世界是更重要的事。
借由这个话题,作者批判了现代教育的失败,他认为学校教育只是把孩子聚在一起不要让他们闹出事来,而教书育人反而成了其次。另一方面,今天我们的社会化程度变高了,成年人专注于工作,对青少年的关注度也不够,导致青少年和成年人对立起来,这是我们的失败。但是最后作者还是保持乐观主义,他认为书呆子虽然不受欢迎导致他们青少年时期往往过得不快乐,但学校不是社会,鼓励他们向前走,而我们也有义务解决教育的问题。
部分原文摘录:
书呆子不受欢迎的原因:
书呆子不受欢迎的真正原因,是他们脑子里想着别的事情。他们的注意力都放在读书或者观察世界上面,而不是放在穿衣打扮、开晚会上面。他们就像头顶一杯水来踢足球,一边踢球,一边拼命保持不让水洒出来。其他人都在一门心思玩足球,遇到这样的对手,自然能够毫不费力地击败,并且心里还奇怪,对方怎么如此无能。
得失:
你在其他地方有所得,就会在这个地方有所失。
书呆子的优势:
因为我在这个世界中过得并不好,我觉得一定是自己什么地方做错了。我没有意识到,作为书呆子,我不适应周围环境,某种程度上正说明我领先了一步。书呆子已经在思考的东西,正是世界看重的东西。他们与别人不一样,不把所有的时间用来玩一种耗尽全力但又毫无意义的游戏。
书呆子不是失败者:
书呆子并不是失败者。他们只是在玩一个不同的游戏,一个更接近于真实世界状况的游戏。
真实世界不会发生“校园排挤”:
真实世界的关键并非在于它是由成年人组成的,而在于它的庞大规模使得你做的每件事都能产生真正意义上的效果……当你所做的事情能产生真实的效果,那就不仅仅是好玩而已了,发现正确的答案就开始变得重要了,这正是书呆子的优势所在……真实世界的特点是,它极其庞大。如果总体足够大,即使是人数最少的少数派,只要聚集在一起,也能产生可观的力量。
反驳成年人觉得孩子的苦难是“青春期”作怪:
你告诉一个人,他的脚天生就是坏的,并不能阻止他去怀疑他可能穿错了鞋子。
学校并非全部:
意识到学校并非全部的人生,也是很重要的事情。学校是一个很奇怪的、人为设计出来的体系,一半像是无菌室,一半像是野蛮洪荒之地。它就像人生一样,里面无所不包,但又不是事物的真实样子。它只是一个暂时的过程,只要你向前看,你就能超越它,哪怕现在你还是身处其中。
成年人和青少年的对立:
以前的青少年似乎也更尊敬成年人,因为成年人都是看得见的专家,会传授他们所要学习的技能。如今的大多数青少年,对他们的家长在遥远的办公室所从事的工作几乎一无所知。他们看不到学校作业与未来走上社会后从事的工作有何联系。
第二章 黑客与画家
黑客与画家都是从事创造性的工作:
黑客与画家一样,都是从事创造性的工作。 …… 对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料。…… 黑客搞懂“计算理论”的必要性,和画家搞懂颜料化学成分的必要性差不多大。
黑客就像画家,工作起来是有心理周期的。有时候你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。为了做出优秀的工作,你必须把这种心理周期考虑在内。
如何创造:
创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。
如何考核一个黑客:
黑客真正想做的是设计优美的软件,考核这种工作是非常困难的。你本人需要有良好的设计感,才能去考核别人的设计是否良好。 …… 唯一有效的外部考核就是时间。经过岁月的洗礼,优美的东西生存发展的机会更大,丑陋的东西往往会被淘汰。
黑客如何编程:
编程不应该是先打草稿然后把头脑中的程序一步步写出来,确保大体是正确的,最后再调试;而应该是一股脑不管对错,先把代码堆上去,再慢慢修改(编程和调试同步)。绘画的创作过程就很值得学习,你不能盼望先有一个完美的规格设计,然后再去动手编程,这样想是不现实的。
你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。
编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。
也许对于黑客来说,采取像画家这样的做法很有好处:应该定期地从头开始,而不要长年累月地在一个项目上不断工作,并且试图把所有的最新想法都以修订版的形式包括进去。
你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。
如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书写出代码,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。但是,如果黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。
大学和大公司的问题:
大学和实验室强迫黑客成为科学家,企业强迫黑客成为工程师。
在大公司看来,黑客的工作就是用软件实现某个功能,而不是设计软件。在那里,程序员被当作技工,职责就是将产品经理的“构想”翻译成代码。当然这也不能说是错的,大公司本该如此(减少设计结果的标准差)。
黑客创业:
开发优秀软件的方法之一就是自己创业,但是会遇到许多与开发软件无关的事情,而且赚钱的软件和好玩的软件重叠度不高。
当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。
真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。
如何做喜欢的事:
黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的“白天工作”(day job)。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。
关于热爱:
如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目。
换位思考:
有些黑客很聪明,但是完全以自我为中心,根本不会设身处地为用户考虑。这样的人很难设计出优秀软件,因为他们不从用户的角度看待问题。
判断一个人是否具备“换位思考”的能力有一个好方法,那就是看他怎样向没有技术背景的人解释技术问题。
“程序写出来是给人看的,附带能在机器上运行。” ——《计算机程序的结构与解释》
第三章 不能说的话
什么是不能说的话
不能说的话指的是那些它是真的(或很可能是真的),但它是被禁止说的话。作者提供了五种方法来寻找“不能说的话”,并给出寻找这些话对我们的帮助,以及我们的应对措施。
要是能坐上时间机器回到过去,不管哪一个年代,有一件事都是不会改变的,那就是“祸从口出”。你一定要小心自己说的话。自以为无害的言论会给你惹来大麻烦。
寻找“不能说的话”:
方法一:判断言论的真伪
当你发现某些言论很可疑时,你可以这样想,那些话听上去真是大逆不道(或者类似的形容词),但是有没有可能是真的?
方法二:关注“异端邪说”和“标签化”
当一个政治家说自己的对手是错的,这是直截了当的批评。但是,如果他不谈论对错,却使用“制造分裂”或者“对种族问题不敏感”这样的标签攻击对手,那么我们就应该多加注意了。
方法三:时空差异
我们可以去找那些过去被认为理所当然,如今却被认为不可思议的事情……将当代观念与不同时期的古代观念diff一下。diff得到的结果,有一些用当代标准衡量是很令人震惊的。
甚至也不用参照历史,当代世界是多种文化并存的世界。东方文化和西方文化存在巨大的差异,各种文化的价值观念和禁忌之处都不一样。所以,你也可以将我们的观念与其他文化的观念diff一下。(做到这一点的最好办法,就是亲自去看一看)
方法四:道貌岸然
寻找那些一本正经的卫道者,看看他们到底在捍卫着什么
方法五:观察禁忌是如何产生的
如果有些观点我们不能说出口,原因很可能是某些团体不允许我们说。
如果一个团体强大到无比自信,它根本不会在乎别人的抨击。美国人或者英国人对外国媒体的诋毁就毫不在意。但是,如果一个团体太弱小,就会无力推行禁忌。
不管实际上是否有思想斗争,斗争总是会以思想斗争的形式表现出来。正如刚刚过气的时尚并非一点儿也不时尚,失败一方的思想其实也并非一无是处。
他们接受流行,不是因为想要与众不同,而是因为害怕与众不同。
为什么要寻找不能说的话
想要做出优秀作品,你需要一个什么问题都能思考的大脑。尤其是那些似乎不应该思考的问题,你的大脑也要养成思考它们的习惯。
做一个与众不同的异端是有回报的,不仅是在科学领域,在任何有竞争的地方,只有你能看到别人看不到或不敢看的东西,你就有很大的优势。
训练自己去想那些不能想的事情,你获得的好处会超过所得到的想法本身。
该怎么做
守口如瓶:
你的思想是一个地下组织,绝不要把那里发生的事情一股脑说给外人听。
与笨蛋辩论,你也会变成笨蛋。这时你要明白,自由思考比畅所欲言更重要。如果你感到一定要跟那些人辩个明白,绝不咽下这口气,一定要把话说清楚,结果很可能是从此你再也无法自由理性地思考了。我认为这样做不可取,更好的方法是在思想和言论之间划一条明确的界线。在心里无所不想,但是不一定要说出来。
人们喜欢讨论的许多问题实际上都是很复杂的,马上说出你的想法对你并没有什么好处。
只与信得过的人讨论:
“守口如瓶”的真正缺点在于,你从此无法享受讨论带来的好处了。讨论一个观点会产生更多的观点,不讨论就什么观点也没有。所以,如果可能的话,你最好找一些信得过的知己,只与他们畅所欲言、无所不谈。这样不仅可以获得新观点,还可以用来选择朋友。能够一起谈论“异端邪说”并且不会因此气急败坏的人,就是你最应该认识的朋友。
笑脸相迎:
狂热分子试图引诱你说出来真心话,但是你可以不回答。如果他们不放手,一定要你回答“到底是赞成还是反对我们”,你不妨以不变应万变:“我既不反对也不赞成。” 不过,更好的回答是“我还没想好”。
具体来说,一种方法就是逐步把辩论提升到一个抽象的层次。
使用隐喻和幽默:
另一种反击的方法就是使用隐喻(metaphor)…… 所有反击方法之中,最好的一种可能就是幽默。
永远质疑
不管问谁,人们都会说同样的话:“我们心态很开放,愿意接受新思想。”但是实际上,人们脑子里有一根界线,早就认准了什么是对的,什么是错的。
只有保持一定的距离才能观察到人们观念的变化,发现流行(也就是人们自以为正确的事情)到底是什么。
所以每当你看到有些话被攻击为出自××分子或××主义,这就是一个明确的信号,表明背后有问题。
如果你发现自己也在用这些标签,那就更要问为什么。你不仅要远距离观察人群,更要远距离观察你自己。
如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?
第四章 良好的坏习惯
不服从管教,其实是黑客之所以成为优秀程序员的原因之一。
计算机确实是非常精确、有条不紊的,但是黑客的所作所为完全出于兴趣,想到哪里就做到哪里,没有明确的计划,只求开心。
Michael Rabin 遇到难题的时候,会把问题重新定义成一个较简单的形式,同时一定会假想一个对手正在与他比赛谁能更快地解决问题。
在计算机工业的历史上,新技术往往是由外部人员开发的,而且所占的比例可能要高于内部人员。
最新的版权法设置了前所未有的障碍,禁止外部人员了解专有技术的内部细节,从而也就禁止了外部人员从这个途径产生新构想。过去,厂商使用专利,防止你出售他们产品的复制品,但是他们无法阻止你把产品拆开,了解内部的工作原理。最新的版权法将后面的这种行为定义为一种犯罪。如果我们不可以研究当前的技术,不能思考如何改进它,那么我们怎样才能开发出新技术呢?
第五章 另一条路
几年前,我妈妈收到苹果公司的一封来信,上面说她可以优惠购买新版的操作系统。老太太被这些术语吓坏了。一个65岁的妇女,只用电脑收发邮件和记账,却被迫要和操作系统打交道,搞清楚要不要安装一个新版本,这真是太过分了。 ——普通用户根本没必要知道“操作系统”这个词,更不要说“驱动程序”和“补丁”了。
“你的电脑”这个概念正慢慢成为过去,取而代之的是“你的数据”。你应该可以从任何电脑上获取你的数据。或者更准确地说,在任何终端设备上获取你的数据,终端设备不一定是你的电脑。
第六章 如何创造财富
金钱并不等于财富。
哥白尼不认同托勒密的体系,一个极其重要的原因是,她觉得托勒密提出的偏心等距点(equant)毫无美感。 ——托马斯·库恩《哥白尼革命》
我们所有人都受到凯利·约翰逊的影响,狂热地相信外观优美的飞机一定会飞得同样漂亮。——本·里奇《臭鼬计划》
美感是第一道关卡。丑陋的数学在世界上无法生存。——G.H 哈代《一个数学家的辩白》
第九章 设计者的品味
确实存在比其他设计更好的杰出设计。众多不同学科对“美”的认识有着惊人的相似度。优秀设计的原则是许多学科的共同原则,一再反复地出现。
- 好设计是简单的设计;
- 好设计是永不过时的设计;
- 好设计是解决主要问题的设计;
- 好设计通常是有点趣味性的设计;
- 好设计是艰苦的设计;
- 好设计是看似容易的设计;
- 好设计是对称的设计;
- 好设计是模仿大自然的设计;
- 好设计是一种再设计;
- 好设计是能够复制的设计;
- 好设计通常是奇特的设计;
- 好设计是成批出现的;(如果你远离这些中心,几乎不可能单靠自己就取得伟大成果,趋势决定你,不是你决定趋势)
- 好设计常常是大胆的设计。
单单是无法容忍丑陋的东西还不够,只有对这个领域非常熟悉,你才可能发现哪些地方可以动手改进。 你必须锻炼自己。只有在成为某个领域的专家之后,你才会听到心里有一个细微的声音说:“这样解决太糟糕了!一定有更好的选择。“不要忽视这种声音,要培育他们。优秀作品的秘诀就是:非常严格的品味,再加上实现这些品味的能力。
第十章 编程语言解析
如果你长期使用某种语言,你就会慢慢按照这种语言的思维模式进行思考。所以,后来当你遇到其他任何一种有重大差异的语言,即使那种语言本身并没有任何不对的地方,你也会觉得它极其难用。缺乏经验的程序员对于各种语言优缺点的判断经常被这种心态误导。
一些黑客只喜欢自己用的语言,反感其他所有的语言。另一些黑客则说所有的语言都一样。事实介于这两个极端之间。语言之间确实有差别,但是很难确定地说哪一种语言是最好的。
对于一些编程语言,内核设计并非很好,但却有着无数强大的函数库。你可以想象一辆本身性能很差的小汽车,车顶却绑着一个飞机发动机……然而,车顶上绑着飞机发动机的小车也许真能开,只要你不尝试拐弯,可能就不会出问题。
程序员活在这个文艺复兴时代可能是一件好事。如果我们所有人都使用同一种编程语言,反而有可能是坏事。
第十一章 一百年后的编程语言
当你设计语言的时候,心里牢牢记住这个目标是有好处的。学习开车的时候,一个需要记住的原则就是要把车开直,不是通过将车身对齐画在地上的分隔线,而是通过瞄准远处的某个点。即使你的目标只在几米开外,这样做也是正确的。
第十二章 拒绝平庸
语言只是工具。如果有更好的工具,为什么不用呢?
第十五章 设计与研究
设计意味着做出符合人类特点和需要的产品。
设计与研究的区别看来就在于,前者追求“好”,后者追求“新”。优秀的设计不一定很“新”,但必须是“好”的。
优秀设计的前提是你自己必须喜欢这种产品,否则你不可能对设计有兴趣,更不要说士气高昂了。为了把产品设计好,你必须对自己说:“哇,这个产品太棒了,我一定要设计好!” 而不是心想:“这种垃圾玩意,只有傻瓜才会喜欢,随便设计一下就好了。”
