读《黑客与画家》

推荐理由

本书是硅谷创业之父Paul Graham 的文集,主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。书中的内容不但有助于了解计算机编程的本质、互联网行业的规则,还会帮助读者了解我们这个时代,迫使读者独立思考。

作者简介

保罗•格雷厄姆,《黑客与画家》一书的作者,硅谷创业之父。1964年,出生于匹兹堡郊区的一个中产阶级家庭。父亲是设计核反应堆的物理学家,母亲在家照看他和他的妹妹。青少年时代,格雷厄姆就开始编程。但是,他还喜欢许多与计算机无关的东西,这在编程高手之中是很少见的。
保罗•格雷厄姆在康奈尔大学读完本科,然后在哈佛大学获得计算机科学博士学位。1995年,他创办了Viaweb,帮助个人用户在网上开店,这是世界上第一个互联网应用程序。1998年夏天,Yahoo!公司收购了Viaweb,收购价约为5000万美元。
此后,他架起了个人网站paulgraham.com,在上面撰写了许许多多关于软件和创业的文章,以深刻的见解和清晰的表达而著称,迅速引起了轰动。2005年,他身体力行,创建了风险投资公司Y Combinator,将自己的理论转化为实践,目前已经资助了80多家创业公司。现在,他是公认的互联网创业权威。

主要内容

1)为什么书呆子不受欢迎:他们的兴趣在别的地方,且偏离主流。
2)黑客与画家:黑客也是创造者,与画家、建筑师、作家一样。
3)不能说的话:如果你的想法是社会无法容忍的,你应该怎么做。
4)良好的坏习惯:黑客成功的秘诀是打破常规。
5)另一条路:互联网软件是PC诞生后的最大机会
6)如何创造财富:致富最好的方法就是为社会创造财富。创造财富最好的办法就是创业。
7)关注贫富分化:收入的差距并没有想象的那么可怕。
8)防止垃圾邮件的方法:本文改变了一些人认为无法有效的过滤垃圾邮件的想法。
9)设计者的品味:好的设计的特征。
10)编程语言解析:编程语言流行的原因。
11)一百年后的编程语言:具有长久生命力的编程语言的特征。
12)拒绝平庸:可以用任何想用的语言编程
13)书呆子的复仇:在高科技行业不存在“业内最佳实践”。
14)梦寐以求的编程语言:一种杰出得的编程语言是允许黑客自由使用的语言
15)设计与研究:设计必须是“好”的,研究必须是“新的”。

精编书摘

1 为什么书呆子不受欢迎
虽然“书呆子”饱尝不受欢迎之苦,但是为了解除痛苦而让他们放弃“聪明”,我想大多数人是不会愿意的。对他们来说,平庸的智力是不可忍受的。

没有什么比一个共同的敌人更能使得人们团结起来了。这就好比一个政客,他想让选民忘记糟糕的国内局势,方法就是为国家找出一个敌人,哪怕敌人并不真的存在,他也可以创造一个出来。

真实世界的关键并非在于它是由成年人组成的,而在于它的庞大规模使得你做的每件事都能产生真正意义上的效果。

真实世界的特点是,它极其庞大。如果总体足够大,即使是人数最少的少数派,只要聚集在一起,也能产生可观的力量。

几乎在任何团体中都存在等级关系。成年人在真实世界中形成的团体,一般来说,都存在某个共同目标,团体的领导者往往由最善于实现目标的人担任。学校就不一样,大多数情况下,学生内部形成的团体没有一个共同目标。但是等级关系却不会缺席,所以孩子们的等级是凭空创造出来的。
2 黑客与画家
黑客与画家的共同之处,在于他们都是创作者。

计算机科学就像一个大杂烩,由于某些历史意外,很多不相干的领域被强行拼装在一起。所以在“计算机科学”的名义下,数学家、物理学家、建筑师都不得不待在同一个系里。

建筑学和工程学之间的区别并不是很严格的,但就是存在区别。这表现在“做什么”和“怎么做”。

创造优美事物的方式不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。

我发现,黑客新想法的最佳来源,并非那些名字里有“计算机”三个字的理论领域,而是来自于其他创作领域。与其到“计算理论”领域寻找创意,你还不如在绘画中寻找创意。

真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只有你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。

画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。

如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果

正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的借口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

事实表明,从他人的角度思考问题正是成功的奥秘所在。“换位思考”并不就意味着你要做自我牺牲。实际上,这是完全不同的两回事。了解别人对于事情的看法,并不代表你为他的利益服务。
3 不能说的话
当你发现某些言论很可疑时,你可以这样想,那些话听上去真是大逆不道(或者其他类似的形容词),但是有没有可能是真的?这就是找出“不能说的话”的第一种方法:判断言论的真伪。

关注“异端邪说”,是找出“不能说的话”的第二种方法。

我们可以去找那些过去被认为理所当然,如今却被认为不可思议的事情,这是用来找出我们自己正在犯下的错误的第三种方法。

训练自己去想那些不能想的事情,你获得的好处会超过所得到的想法本身。

实际上,人们脑子里有一根界线,早就认准了什么是对的,什么是错的。在他们看来,所有观点都是可以讨论的,除了那些错误的观点。

你不要让自己成为人群的一分子,而要尽可能的远离人群,观察正在发生的事情,特别注意那些被压制的思想观点。

如果自己就是潮水的一部分,怎么能看清潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?
4 良好的坏习惯
对于适当的不服管教,保持宽容不会有太大的坏处,反而很有利于美国的国家优势,它使得美国不仅能吸引聪明人,还能吸引那些很自负的人。

一个人们拥有言论自由和行动自由的社会,往往最有可能采纳最优方案,而不是采纳最有权势的人提出的方案。专制国家会变成腐败国家,腐败国家会变成贫穷国家,贫穷国家会变成弱小国家。

有一种东西叫做美国精神,如果你想知道哪些事情可以滋养或者削弱这种精神,不妨去问问黑客,他们是最敏感的焦点人群,因为在他们身上,比我知道的其他人群,更能体现出这种精神。
5 另一条路
使用互联网软件,除了软件本身,大多数用户不需要知道别的事情。
所有那些乱七八糟、经常变动的东西,都放在服务器端,由精通此道的专业人员维护。

我觉得,大多数Windows用户使用桌面软件的时候都感到紧张,会有相当大的心理压力,释放这种压力,对你的产品将是一种巨大的推动。

随着软件规模的增大,开发成本指数式上升。这可能是因为修正旧bug的原因。如果bug都能被快速发现,成本的上升形态就能基本保持线性。

实现某个构思,会带来更多的构思。将一个构思束之高阁,不仅意味着延迟它的实现,还意味着延迟所有在实现过程中激发的构思。

从制造简洁的产品开始着手,首先要保证你自己愿意使用。然后,迅速做出1.0版,并且不断加以改进,整个过程中密切倾听用户的反馈。
6 如何创造财富
创业公司不是变魔术。它们无法改变创造财富的法则,它们只是代表了财富创造曲线远端上的一点。

创造有价值的东西就是创造财富。财富与金钱并不是同义词。

交换媒介的优点是,它使得交易可以进行下去。缺点是,它往往模糊了交易的实质。人们觉得做生意就是为了挣钱,但是金钱其实只是一种中介,让大家可以更方便的获得自己想要的东西。

公司不过是一群人在一起工作,共同做出某种人们需要的东西。真正重要的是做出人们需要的东西,而不是加入某个公司。

要致富,你需要两样东西:可测量性和可放大性。你的职位产生的业绩,应该是可测量的;此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。

在不考虑其他因素的情况下,一个非常能干的人待在大公司里可能对他本人是一件很糟糕的事情,因为他的表现被其他不能干的人拖累了。

创业公司为每个人提供了一条途径,同时获得可测量性和可放大性。
7 关注贫富分化
我认为有三个原因使得我们对赚钱另眼相看。第一,我们从小被误导的对财富的看法;第二,历史上积累财富的方式大多名声不好;第三,担心收入差距拉大将对社会产生不利影响。

中产阶级的出现使得财富总量不再是一个固定不变的值,财富的分配也不再是一种零和游戏。

现代社会的收入差距扩大是一种健康的信号。技术使得生产差异加速扩大,如果这种扩大没有反映在收入上面,只有三种可能的解释:1、技术革新停顿了。2、那些创造大部分财富的人停止工作了。3、创造财富的人没有获得报酬。

一个社会需要有富人,这主要不是因为你需要富人的支出创造就业机会,而是因为他们在致富过程中做出的事情。
9 设计者的品味
好设计是简单的设计。当你被迫把事情做得简单时,你就被迫直接面对真正的问题。

好设计是永不过时的设计。我们很难猜测未来是什么样子,但是可以肯定,未来的人们不会在乎今天流行的风潮,这一点与上几代人是相同的。

好设计是解决主要问题的设计。软件的难题通常可以被改成等价的较易解决的形式。

好设计是启发性的设计。在软件业中,这条原则意味着,你应该为用户提供一些基本模块,使得他们可以随心所欲的自由组合,就像玩乐高积木一样。

好设计通常是有点趣味性的设计。幽默一定程度上反映了力量。

好设计是艰苦的设计。解决难题的痛苦对设计师有好处,但是对付挑剔的顾客或者对付质量低劣的建材的痛苦就是另外一回事了。

好设计是看似容易的设计。
好设计是对称的设计。对称的危险在于它可以用来取代思考,在大量使用重复的时候这种危险性更大。

好设计是模仿大自然的设计。
好设计是一种再设计。犯错误是很正常的事情。你不要把犯错误看成灾难,要勇于承认、勇于改正。

如果你想做出伟大的新成果,那就不能对常识与真理不相吻合之处视而不见,反而应该特别注意才对。
10 编程语言解析
编程语言可以变得很抽象,完全脱离硬件,但也有可能走错了方向。
11一百年后的编程语言
那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计的越小、越干净,它的生命力就越顽强。

我的两个观点是,(1)一百年后的编程语言在理论上今天就能设计出来;(2)如果今天真能设计出这样一种语言,很可能现在就是和编程,并且产生更好的结果。

12 拒绝平庸
选择使用哪一种技术的时候,你不能考虑别人的做法,只能考虑什么样的技术能最好的完成工作。

13 书呆子的复仇
编程语言本质上不是一种技术,而是数学。

使用不常见语言会出现的问题:你的程序可能无法很好的与使用其他语言写的程序协同工作;你可能找不到很多函数库;你可能不容易雇到程序员。

编程语言的所谓“业界最佳实践”,实际上不会让你变成最佳,只会让你变得很平常。

14 梦寐以求的编程语言
流行本身又会使得这种优秀的语言更加优秀,进一步拉大它与平庸语言之间的好坏差异。

为了写出优秀软件,你必须同时具备两种互相冲突的理念。一方面,你要像初生牛犊一样,对自己的能力信心万丈;一方面,你又要像历经沧桑的老人一样,对自己的能力抱着怀疑的态度。

梦寐以求的语言干净简练,具有最高层次的抽象和互动性,而且很容易装备,可以只用很少的代码就解决常见的问题。

15 设计与研究
设计追求“好”,研究追求“新”。

评价一种语言的优劣不能简单地看最后的程序是否表达得很漂亮,而要看程序从无到有的那条完成路径是否很漂亮。

设计意味着做出符合人类特点和需要的产品。但是,“人类”不仅包括用户,还包括设计师,所以设计工作本身也必须符合设计师的特点和需要。

推荐阅读更多精彩内容