Paul Graham简介
这本书是硅谷创业之父Paul Graham的文集,主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长,黑客对世界的贡献以及对编程语言的讨论。本书主要面向程序员,尤其是互联网创业者。Paul Graham出生于匹兹堡郊区的一个中产阶级家庭,这个环境对他产生了一定影响,从第一篇“为什么书呆子不受欢迎”可以看出。青少年时代,Paul Graham就开始编程,但是与其他程序员不同的是,他还喜欢过一些与编程无关的东西,例如:小说、哲学和绘画,也正是这些经历使得Paul Graham变得与一般的黑客不同。Paul Graham说“我决定不当画家了,首先要彻底解决自己的收入问题”,这个决定对他日后产生了重大影响。Paul Graham与Robert Morris合作,开发了世界上第一个互联网软件Viaweb,1997年,他们的客户总是达到了350家,一年后,也就是1998年,Viaweb被雅虎以4900万美元的收购了,Paul Graham也就成为了雅虎的员工,但是最终,Paul Graham离开了雅虎。在给哈弗大学的学生团体“计算机协会”做演讲的时候,Paul Graham决定将扶植创业公司作为一项事业,因此与其他人一起合伙在硅谷创立了Y Combinator,从Y Combinator毕业的创业公司超过200家,已经失败的公司不到20%,远低于90%的业内平均水平。Paul Graham在某种程度上已经是硅谷的中心人物,他的文章在美国创业者中广为流传。
Paul Graham有一套完整的创业哲学,他的创业公式是:(1)搭建原型;(2)上线运行(别管bug);(3)收集反馈;(4)调整产品 (5)成长壮大。
为什么书呆子不受欢迎
在第一篇“为什么书呆子不受欢迎”中,Paul Graham经过深入浅出的哲学分析,得出以下几个结论:(1)“书呆子”与“高智商”有着强烈的正相关关系;(2)为什么聪明的孩子没有让自己受欢迎呢?因为聪明的孩子真的不想让自己受欢迎;(3)“书呆子”不受欢迎的真正原因是他们脑子里想着别的事;(5)对于“书呆子”来说,一群孩子欺负你,不是因为你做错了什么,而是因为这伙人需要找一件事情一起干,他们只是需要一个共同的目标;(6)最受欢迎的孩子不会欺负“书呆子”,恰恰是焦虑的中间层欺负“书呆子”;(7)聪明的孩子读中学时往往是不快乐的,“书呆子”感到不适应的真正原因也许是其他人都是疯子;(8)学校像监狱,老师像狱卒,学生像犯人学校的真正目的是把儿童都关在一个地方,一边大人们白天可以腾出手来把事情干完;(9)为什么离开学校后,真实的世界能友好地对待“书呆子”?因为成年人都成熟了,所以不会把书呆子挑出来欺负吗?正确的答案也许是“书呆子”在某个地方聚集起来,形成自己的社区,智力因素成为那里最被看中的东西;(10)以前的青少年更尊重成年人,因为成年人都是看得见的专家,会传授给他们技能,如今的青少年看不到学校作业与未来走上社会后从事的工作有何联系,所以不太尊重成年人。就我的成长历程来说,作者的大部分观点也适合中国的情况,但是作者的结论(8)与中国的情况不太一样。大家都知道中国的应试教育把学校分成了两种:普通与重点,从中考和高考的升学率可以把初中和高中分成普通和重点,一般普通初中和高中适合Paul Graham在《黑客与画家》一书中的观点,但是重点初中和高中不存在那种情况,我所在的初中和高中的老师确实是在传授学生知识,这里并不是由别的偏见,只是我们要学会辩证的看待问题,对不同学校的学生要有不同的教育方法,普通中学的学生更应该注意Paul Graham的观点。可以肯定的是,拯救“书呆子”的日子并不会很快到来。但是需要明白的是“书呆子”并不是失败者,他们只是在一个更接近真实世界里玩游戏。“书呆子”没有必要悲观,因为成功的成年人几乎都声称自己在中学属于”书呆子“。
黑客与画家
在作者看来,现在的“计算机科学”一词包括了三类人,分别是数学家、计算机博物学家和黑客。其中只有计算机博物学家可以被称为计算机的实验科学,而两端的数学家和黑客并不是在做计算机的科学研究。黑客被看做计算机科学家的看法直接导致了一个悲剧,即大学和实验室里的黑客们觉得自己应该写一些研究性的论文,而不是设计优美的软件。那么,为什么大学和实验室还把论文数量作为考核黑客工作的指标呢?要回答这个问题,我们可以回头想想,在学校里,什么是考核学生是否优秀的标准?分数,没错,就是分数。这样的考核容易实施,而容易实施的考核总是被首先采用。黑客真正想做的其实是开发优秀的软件,然而考核这种工作是很困难的,同时需要大多数人有良好的设计感,才能去考核别人的设计是否良好。令人沮丧的是,某个人觉得自己有良好的设计感,与他是否真的具有,不存在相关关系,甚至可能存在负相关。唯一有效的外部考核就是时间,经过岁月的洗礼,优美的东西生存发展的机会更大,丑陋的东西往往会被淘汰。人们无法考核你的工作,甚至误解你的工作,都不是最糟糕的事,更大的危险是你自己也会误导自己的工作。我本人现在在读研究生,我的潜意识里一直有一种不舒服的感觉,觉得自己应该多学一些理论知识,就像大家常说的只有打好理论基础,才能把自己未来事业的瓶颈往后推。但是我总是在期末考试结束一个月后,就把学过的理论忘记的一干二净。所以我想在总是碰到一个新理论就先去实践,看不懂的地方就先不要去管它,也许在另外一门课上或者是在做某个项目时突然灵感来了,以前的疑惑引刃而解了。因此,与其在计算机理论领域寻找创意,还不如在其他领域寻找灵感,例如:绘画、音乐、建筑等。另外,一个有趣的现象是:科学界的每一个人,暗地里都相信数学家比自己聪明,最后的结果科学家往往把自己的工作弄得看上去像数学,这对其他领域,尤其是黑客无疑是个巨大的灾难。黑客通过实践来学习编程,科学家就不会通过干活来学习科学,而是通过做实验和解题来学习。黑客学习的一个捷径是观看优秀的程序,就像画家临摹大师的作品一样。编程到底能有多酷,取决于我们能够用这种媒介做出怎样的工作。
不能说的话
现实生活中,有很多不能说的话。例如,今天,说地球围绕太阳转是再平常不过的事情了,但是如果在17世纪的欧洲,这么说就要大难临头,伽利略说了这样的话,结果遭到了宗教法庭的审判。历史的常态似乎就是,任何一个年代的人们,都会对一些荒谬的东西深信不疑,只要有人稍微表示一点怀疑,就会惹来大麻烦。那么,如果你发现了“不能说的话”,下一步怎么办?作者的建议是别说,至少也要挑选合适的场合再说。你要明白一个道理,自己思考比畅所欲言更重要,如果你一定要跟其他人辩个明白,结果很可能是你从此再也无法自由理性的思考了。你的思想是一个地下组织,绝不要把那里发生的事情全部告诉其他人。如果其他人硬逼你对这种荒谬的问题表态,你可以说“我既不赞同也不反对”,也可以说“我还没想好”。如果你想要清晰地思考,就必须远离人群。但是你走的越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会风俗,而是一步步地与它背道而驰。小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人继续鼓励你继续成长,变成一个怀疑和抵制社会潮流的人。如果自己就是潮水的一部分,怎么能看清楚潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?
良好的坏习惯
黑客总是自负的,因此常常招致其他人的非议。在大多数人眼里,黑客就是入侵计算机的人,可是在程序员眼里,黑客指的是优秀程序员。现在入侵计算机被认为是一种犯罪,但是警察发现,通行的调查方法并不适用于黑客。警方总是从犯罪动机开始调查,而这些犯罪动机无非是金钱,美色,仇恨等。很显然,满足智力上的好奇心并不在警察的的犯罪动机清单上,坦率的说,这个概念对他们来说完全陌生。总体看来,黑客是不服从管教的,这往往会触怒很多人。但是,不服从管教,其实是黑客之所以成为优秀程序员的原因之一。黑客大多数不喜欢版权法,因为有些公司为了防止盗版而使用了禁止复制的技术。黑客认为只有深入了解当前技术,才能构想下一代技术。知识产权的拥有者也许会说,不,谢谢,我们不需要你的帮助,我们可以自己开发下一代技术。但是,他们错了,在计算机的历史上新技术往往是由外部人员开发的,而且所占的比例可能远远高于内部人员。为什么黑客们强烈反对知识产权保护法?一般来说,黑客都是很聪明的,他们很少出现意见一致的情况。如果他们说有问题,也许真的就是哪里出现了问题。那些占据高位,总是想约束黑客的人,要小心了,也许你们真的会成为千古罪人。
另一条路
你有没有在装软件的时候,或者在运行软件的时候遇到各种问题?你有没有想过”为什么我会遇到这种问题?“,大多数时候你遇到的问题都能在网上找到答案,当你花了很多时间解决了这个问题后,你有没有想过“怎样避免这些烦人的问题?”。实际上,作者已经提出了未来计算机发展的一个潮流:互联网软件,这是是微机诞生以来最大的机会。简单的说就是所有的软件都运行在服务器端,用户不需要关心这个软件要安装到什么操作系统,需要哪些环境设置,用户也不用担心一个不小心把软件搞崩溃了。这些事情都是互联网软件要解决的事,用户只需要关心自己要处理的事务。现在,相比与传统软件,互联网软件已经显示出了极大的优势。你不需要花很多时间装photoshop软件,也就不会被强制要求装上附带的垃圾软件,网络版的photoshop能很好的解决这些问题。现在,创业公司有更多的理由选择互联网软件,因为开发桌面软件越来越乏味了。如果你想开发桌面软件,就不得不接受微软公司的授权条款,调用它的API,为它那个bug百出的操作系统伤透脑筋。不要被微软吓到,你能做到它做不到的事情,正如它能做到你不能做到的事情一样。你可以通过浏览器发布软件,没有人能在你和浏览网站的用户之间插上一脚。也许你不相信,微软公司怕你,它的那些目中无人的中层管理人员也许不会这么想,但是比尔.盖茨肯定是,因为1975年,上一次发布软件的新方式出现时,他也曾和你一样白手起家。
如何创造财富
致富的最好办法是为社会创造财富,创造财富的做好办法就是创业。,或者加入创业公司。为什么创业公司往往选择在新技术领域,例如:开发新药或计算机软件,而不是在卖玉米或者洗衣粉?从经济学的观点来看,你可以把创业想象成一个压缩过程,你的所有工作年份被压缩成几年。另外,创业还需要运气的成分。任何公司的成功历程中,运气都是一个很大的随机因素。微软公司就抓住了历史上最大的商业错误之一——DOs操作系统的授权协议——的受益者。如果IBM没有犯下这个错误,微软依然会是一家成功的公司,但是不会膨胀的那么快。金钱不等于财富。财富存在的时间与人类历史一样悠久,事实上,蚂蚁也拥有财富。金钱是一种历史相对较短的发明。人们觉得做生意就是为了赚钱,但是金钱其实只是一种中介,让大家可以方便的获得自己想要的东西。大多数生意的目的是为了创造财富,做出人们真正需要的额东西。谈到财富总额的时候,财富经常被形容为一个大饼。政治家说:“你无法把饼做得更大。”如果你打算创业,那么不管你是否意识到了,你都是在着手推翻这种大饼谬论。在大多数情况下,世界上可供交换的财富不是一个一成不变的,人类历史上的财富一直在不停地增长和毁灭(总体上看是净增长)。在程序员看来,事情再明显不过了,财富就是被做出来的,而不是某个想象出来的神秘人物分发的大饼。我们这个世界,你向下沉沦或者向上奋进都取决于你自己,不能把原因推给外界。许许多多不创造任何财富的人——比如本科生、记者和政客——一听到最富有的5%的人占有全社会一半以上的财富,往往认为这是不公平的。一个有经验的程序员很可能也认为这是不公平的,因为最顶尖的5%的程序员写出了全世界99%的优秀软件。要致富,你需要两样东西:可测量性和可放大性。你的职位产生的业绩,应该是可测量的,否则你做得再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是你做出的决定能产生巨大的效应。小团队=可测量性。就算你无法测量每个员工的贡献,但是你可以得到近似值,那就是测量小团队的贡献。一般情况下,小型团队都由多人组成。你最好找出色的人合作,因为他们的工作和你的一起平均计算。乔布斯曾经说过,创业的成败取决于最早加入公司的那十个人。小团队的优势不在于它本身的小,而在与你可以选择成员。我们不需要小村庄的那种小,而需要全明星第一阵容的那种小。高科技=可放大性。生物科技和软件类的创业公司显然就是解决高难度技术问题的。这里有一个很有趣的例子:加入你是个手脚敏捷的小男孩,身后有一条壮硕的大狗正在追你,你跑到楼梯口,这时应该上楼还是下楼?我觉得应该上楼。如果下楼的话,大狗可能跟你一样快。上楼的话,大狗庞大的身躯就将成为劣势。不错,跑上楼你会比较吃力,但是大狗会感到更吃力。所以,在实际操作中,创业公司应该故意选择那些很困难的技术问题,让其他人复制你的模式变得很困难。否则,一旦大公司看到了,他们就会做出自己的版本,再加上他们的品牌、资本、经销能力,一夜之间就能把你的市场全部抢走。俗话说的好,最好的防御就是进攻。如果你开发出来的技术室竞争对手难于复制的,那就够了,你不需要依靠其他的防御手段了。
关注平富分化
与下棋、绘画、写小说一样,赚钱也是一种专门的技能。如果某些人善于下棋或写小说,没有人会有意见;但是,如果某些人善于赚钱,大家就会说这是不对的。为什么人们的反应会如此强烈?作者人为有三个原因。第一,我们从小被误导对财富的看法;第二,历史上积累财富的方式大多名声不好;第三,担心收入差距过大将对社会产生不好的影响。依作者的观点,第一点是错误的,第二点已经过时,第三点通不过现实的检验。那么有没有可能,在现代社会中,收入差距拉大实际上是一种健康的信号?技术的发展是否加剧了贫富分化?首先,技术肯定加剧了有技术者与无技术者之间的生产效率差异,毕竟这就是技术进步的目的。我自己就亲眼目睹过技术的这种杠杆效应不断扩大,本科阶段有人通过发传单、当促销员赚钱,也有人通过带家教和开发软件或制作网站赚钱(只有少数人具备这种能力)。无论在物质上,还是在社会地位上,技术好像都缩小了富人与穷人之间的差距,而不是让这种差距扩大了。技术的发展加大了贫富差距,这是不是一个社会问题?好像没有那么严重。技术在加大收入差距的同时,缩小了大部分的其他差距。作者提出了一种观点:现代社会的收入差距扩大时一种健康的信号。技术使得生产率的差异加速扩大,如果这种扩大没有反应在收入上面,只有三种可能的解释:(1)技术革新停顿了;(2)那些创造大部分财富的人停止工作了;(3)创造财富的人没有得到报酬。(1)和(2)都不是好事情。如果你想让社会保持繁荣,同时收入差距不扩大,那么只剩下(3)了,即创造大量财富的人不获取报酬。如果得不到报酬,人们是否愿意创造财富?唯一的坑能就是工作本身能提供乐趣。会有人愿意免费写一个操作系统,但是他们不愿意为你安装、提供服务。在一个剥夺个人财产的社会,财富创造活动中所有的那些没有乐趣的事情都会急剧放慢,乃至停顿。社会需要有富人,这主要不是因为你需要富人的支出创造就业机会,而是因为他们在致富过程所做的事。如果你让马云致富,他就会创造中国的电商模式,那你就没有必要为了买到物美价廉的物品而亲自去厂家订购。
拒绝平庸
埃里克.雷蒙德写过一篇文章《如何成为一个黑客》(How to Become a Hacker)。文中有一部分专门谈到,在他看来,如果你想成为一个黑客,应该学习哪些语言。他建议从Python和Java入手,因为他们比较容易学。想当高级一点的黑客,还应该学习C和Perl。前者用于对付Unix系统,后者用来管理和开发CGI脚本,如果你要将黑客作为毕生的职业,那么你应该学Lisp。大公司可以相互模仿,但是创业公司就不行,很多人没有意识到这一点,尤其是一些创业者。唯一洞悉所有语言优略势的人必然是懂得最强大的那种语言的人。如果你想在创业公司中使用Lisp语言,你不仅不应该担心使用它的人太少,反而应该希望这种局面保持下去。人类天性变化的速度大大慢于计算机硬件变化的速度,所以编程语言的发展通常比CPU的发展落后一二十年。如果你为创业公司工作,那么这里有一个评估竞争对手的妙招——关注他们的招聘职位。他们网站上的招聘职位写的很明确,反应出他们到底想干什么,否则就会引来一大批不合适的求职者。
书呆子的复仇
书呆子之王——约翰.麦卡锡,第一个提出了Lisp语言。简单的说,这种语言本质上不是一种技术,而是数学。数学史不会过时的,应该把它与快速排序算法进行类比,这种算法是1960年提出的,至今仍是最快的通用排序算法。认为所有语言都一样的看法是自欺欺人,但是优点是可以使许多事情变得简单。技术本来就应该是尖端的。正如伊拉恩.加内特所说,编程语言的所谓“业界最佳实践”,实际上不会让你编程最佳,只会让你变得很平常。如果你选择的编程语言使得你开发软件的速度只有对手的积分之一,那么“业界最佳”真的起错了名字。最后,作者得出连个结论。第一,不同的编程语言的编程能力不一样;第二,大多数经理故意忽略第一点。如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最艰难的问题,并且等待竞争对手的经理做出自甘平庸的选择。为了说明各种编程语言的编程能力不同,作者举了一些有价值的例子做对比。
梦寐以求的编程语言
大多数人选择一种编程语言,不是因为这种语言有什么独特的特点,而是因为听说其他人使用这种语言。但是作者认为,外界因素对于编程语言的流行其实没有想象中的那么大的影响力。大多数的程序员也许无法分辨语言的好坏。但是,这不代表优秀的编程语言会被埋没,专家级的黑客一眼就能认出它们,并且会拿来使用。他们使用什么语言,其他程序员往往会跟着使用。我们得首先承认,确实有一个外部因素会影响到语言的流行。一种语言必须是某一个流行的计算机系统的脚本语言,才会变得流行。C是Unix的脚本语言,Perl和Python也是如此。Visual Basic是Windows的脚本语言,Php是网络服务器的脚本语言,Java和JavaScript是浏览器的脚本语言。编程语言本来就需要一个很好的实现,而且这个实现必须是免费的。而你想让一种语言变得成功,需要吸引黑客。编程语言还需要有一本介绍它的书,这本书应该不厚,文笔流畅,而且包含大量优秀的范例。另外重要的一点是,这种语言必须简洁,简洁性最重要的方面就是要使得语言更抽象。为了吸引黑客,一种编程语言必须善于完成黑客想要完成的各种任务。这意味着它必须适合开发一次性程序。作者认为,未来50年中,编程语言的进步很大一部分与函数库有关。未来的函数库将像语言内核一样精心设计。优秀的函数库的重要性将超过语言本身。编程语言是供程序员使用的,而函数库就是程序员需要的东西。编程时提高代码运行速度的关键是使用好的性能分析器,通过分析器,程序员可以很方便地找到瓶颈到底在什么地方。让性能分析器自动运行可能是一个好主意。它自动告诉程序员每个部分的性能,而不是非要等到程序员手动运行后才知道。一种编程语言要想变得流行,最后一关就是要经受住时间的考验。没人想用一种会被淘汰的语言编程。发明新事物的人必须要有耐心,要常年累月不断地做市场推广,知道人们开始接受这种发明。新事物的发展改进一般也需要很长时间。大多数技术在诞生后都逐渐发生了变化,编程语言尤其如此。为了写出优秀的软件,你必须同时具备两种相互冲突的信念。一方面,你要像出生牛犊一样,对自己的能力信心万丈;另一方面,你又要像历经沧桑的老人一样,对自己的能力抱着怀疑态度。