《黑客与画家》读书笔记


本书是硅谷创业之父,Y Combinator创始人Paul Graham(保罗•格雷厄姆)的文集。Paul Graham是一名黑客(指最优秀的程序员,而不是入侵计算机系统的人),也是一位画家,还是个出色的作家,书名之所以叫这个名字,是因为作者认为黑客与画家有着极大的相似性,他们都是在创造,而不是完成某个任务。本书引发技术人思考,真正意义上的黑客精神、创业、编程语言,是本书的三个主题。


从书名可以看出,作者认为和画家一样,黑客只是怀有一门特殊手艺、有创造天赋的普通人;同时,编程是一种艺术创作,黑客就是艺术家,开发软件与画家作画、雕塑家雕刻、建筑师设计房屋并没有本质不同。科技、艺术和人文并不是对立的东西,而是你中有我,我中有你。全书分成三个部分:

  • 解释了黑客是如何成长的以及他们看待世界的一些观点。
  • 解释了黑客怎样做出自己的成果,这些成果又是怎样对全世界产生了影响。
  • 解释了黑客的工具(编程语言)和工作方法,黑客文化的基础和核心。

内容解析

为什么书呆子不受欢迎?

作者从年轻时就开始观察,发现在美国的中学,书呆子反而不受欢迎。然而,作者发现“智力”本身与“受欢迎”无关,所以作者认为造成这种现象的原因就是他们本身不想让自己受欢迎,这部分的人追求的是聪明而不在意是否受欢迎。书呆子没有意识到“受欢迎”需要付出很多的努力,对于高度困难的领域,只有身处其中的人,才能意识到成功需要不间断的努力。书呆子真正不受欢迎的原因,是因为他们没有时间和精力,更没有那种意识去努力使自己受欢迎,他信想着别的事情上,他们有其他的兴趣而没有多余的精力用来使自己更受欢迎。

文艺复兴时期的代表人物阿尔伯蒂有一句名言:“任何一种艺术,不管是否重要,如果你想要在该领域出类拔萃,就必须全身心投入”

从书呆子不受欢迎说起,实是给程序员进行了正名,保持黑客精神,就有可能改变这个世界。

黑客与画家

黑客与画家的共同之处,在于他们都是创作者,都试图创作出优秀的作品,本质上都不是在做研究,虽然过程中可能发现一些新技术。优秀的软件并不总是论文的合适题材:科研必须具有原创性,必须能够产生大量成果。黑客的出发点是原创,最终得到一个优美的结果;科学家的出发点是别人优美的结果,最终得到原创性。

黑客如何才能做自己喜欢的事情?解决方法之一是找一份养家糊口的“白天工作”。面试程序员的时候,作者主要关注的事情就是业余时间他们写了什么软件。因为如果你不爱一件事,就不可能把它做得真正优秀,要是你狠热爱编程,你就不可避免地会开发自己的项目。画家学习绘画主要是动手去画,而黑客学习编程的方法也是通过自己实践;画家通过临摹大师作品学习,黑客可以通过观看优秀的程序学会编程;绘画是逐步完成的,从草图再逐步填细节,黑客也是如此。多个画家共同创作一幅画的时候,每个人画的部分不同,且有主有次;同样,黑客共同开发一个软件时也需要合作,每个人负责一个模块,模块间的接口严格定义。

生产特别优秀的产品不是大公司的获胜手段,如果一家公司达到需要由一群产品经理来设计软件,而不是程序员,那么他就已经做不出最优秀的产品了,所谓知行合一,天下无敌。

不能说的话

历史的常态就是,任何一个年代的人们,都会对荒谬的东西深信不疑。他们的信念还很坚定,只要有人稍微表示一点怀疑,就会惹来大麻烦。作者试图找出适用于所有年代的通用法则,来判断那些话是不能说的。

  • 你的观点从别人那里听来的,别人告诉你什么,你就相信了什么,你把别人灌输的观点当作了自己的观点,那么你就会犯下和别人一样的错误。
  • 你的思想观点确实是独立思考得到的,碰巧与社会主流的思想观点一模一样。

到底什么话是不能说的?我们可以假设周围人因为说什么而陷入了麻烦。你会发现需要满足两个条件:第一,这些话不能说出口;第二,这句话看起来可能是正确的,值得进一步讨论。第二个条件很关键,因为你说2+2=5是不会有麻烦的。

回顾历史,我们会发现很多例子,人们因为说真话而给自已惹来麻烦。许多言论,今天的人们看来再平常不过的,但是放在过去都是不能说的。找出“不能说的话”的第一种方法就是判断言论的真伪。除此之外,有些想法纯粹因为非常特别而不能说出口。关注“异端邪说”是找出“不能说出的话”的第二种方法。将当代观念与不同时期的古代观念比较一下,这是用来找出“不能说的话”的第三种方法。如果某个观点在大部分时空都是不受禁止的,只有我们这个社会才把它当作禁忌,那么很有可能是我们出错了。寻找那些一本正经的卫道者,看看他们到底在捍卫什么,这就是第四种寻找“不能说的话”的方法。观察流行的产生方式,试着预测它会禁止哪些话,这是寻找“不能说的话”的第五种方式。

优秀的作品往往来自于其他人忽视的想法,而最被忽视的想法就是那些被禁止的思想观点。一旦发现了“不能说的话”,作者建议下一步就是别说,至少也要挑选合适的场合再说,只打那些值得打的仗。自由思考比畅所欲言更重要,在心里无所不想,但是不一定要说出来。

如果你想要清晰的思考,就必须远离人群,但是走得越远,你的处境就会越困难,受到的阻力也会越大。如果自己就是潮水的一部分,怎么能看见潮流的方向呢,你只能永远保持质疑,提升自己的思辨能力。问自已,什么话是我不能说的?为什么?

身处当前这种复杂的社会环境中,如果你发现了这个社会的某种禁忌——你肯定会发现的,发现了不能说的话,怎么办?最恰当的办法是挑选合适的场合再说,而不是到处去说,我们要学会“只打值得打的仗”。想想我们平时在网上耗费大量精力发动的口水战,难道不是无谓之争么?别去赞同这个社会任何一种歇斯底里,但是又不告诉他们你具体不赞同哪种狂热。如果不得不面对这样的挑衅,要么将争论提升到一个抽象的层次(实际上这比较难),要么使用隐喻(这也不容易)。

良好的坏习惯

法律和当前政局一定程度上限制了黑客的自由,这恰恰不利于黑客的发展。

黑客是不服从管教的,这就是他们的本性。公民自由使得国家富强,一个人们拥有言论自由和行动自由的社会,往往可能采纳最优方案,而不是最有权势的人提出的方案。黑客对于公民自由是非常敏感的,因为这对他们至关重要。那些不服从管教的人们,才是美国财富与力量的源泉。与其他美国人一样,黑客的成功秘诀就是打破常规。

另一条路

用于大胆的假设一条新路,但要关注用户的使用体验和反馈,不断调整自己的产品和运行模式。当然最主要的是,勇于尝试

使用互联网软件,除了软件本身,用户不需要别的事情,往往只需要一个能够上网的浏览器就可以。随着互联网越来越深入人心,桌面模式的弊端就越来越明显。平滑的升级软件,不让使用者感到困惑,这是互联网软件面临的新问题。 使用互联网软件,数据会更安全,不太容易感染病毒,能够同时被多人使用。对于互联网软件,可以使用多种编程语言开发,不同的语言适合不同的任务。互联网软件带来的最大的变化之一就是软件发布方式的改变,互联网软件的发布规则是它运行不了就无法发布。另一个技术优势在于开发者能够根据服务器日志再现大部分的bug。

创业公司行动快速,看上去不是那么正式,只有很少几个人,资金也有限,这几个人勤奋工作,技术放大了他们的决策,如果赌赢了,那就是一场大胜利。必须打破常规、快速行动,循规蹈矩不可能成功。

“趁着统治者打鼾时,夺回你们的自由!”

如何创造财富

创业是对的,但要明白它只是代表财富创造曲线远端一点,而非改变创造财富法则。

致富的最好方法就是为社会创造财富。创造财富的最好方法就是创业。 要致富,需要2样东西,可测量性和可放大性。你的职位产生的业绩,应该是可以测量的,否则你做的再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。

  • 可测量性:团队越小,每个人的工作成绩越容易衡量,所以在小团队中工作你的价值会更容易体现。团队越大,每个人的贡献就越接近于整体的平均值。
  • 可放大性:回顾历史,大多数发财的人都是通过开发新技术而实现的。

技术人有必要建立起对财富的价值观。说到“财富”,似乎是很让人不齿的事情,但是又是看到周围有很多技术人热衷谈论股票、炒房,谁让我们生活在这个糟糕的时代呢?少有人同时谈谈财富和技术的关系,还好有这本书。金钱只是财富的一种表达方式,但财富不等于金钱,不止是房子与车子

致富的最好办法是创造财富(而不是掠夺),自己创业或是加入创业团队是致富的可靠方法(就我来看,如果你是官二代或是富二代,那么另当别论)。创业的付出与回报总体上是成比例的,但是在个体上是不成比例的,不要把创业过于神话,但创业的确给了我们更多的可能。

关注贫富分化

每个人的技能不同导致收入不同,这是贫富分化的最要原因,这也是技术进步的目的。人们对贫富分化不满意的一个原因就是在大部分的人类历史中,积累财富最常见的方法其实是偷窃。技术的进步会引起收入差距的扩大,但是能缩小其他的生活差距。社会历史上,压制收入差距的扩大,最终导致的结果都是使社会作为一个整体变得更为贫穷。一个人,要避免的是绝对的贫穷而不是相对贫穷,所以社会需要有富人,不是因为富人的支出创造就业机会,而是因为他们在致富过程做出的事情。

设计者的品味

优秀设计的原则是许多学科的共同原则:

  • 好设计是简单的设计
  • 好设计是永不过时的设计
  • 好设计是解决主要问题的设计
  • 好设计是启发性的设计
  • 好设计通常是有点趣味性的设计
  • 好设计是艰苦的设计
  • 好设计是看似容易的设计
  • 好设计是对称的设计:不单老外,其实在中国特讲究对称,如中国式的大门,窗户等等,都透着对称的设计,本人04年在学校有幸听现场聆听杨振宁教授《对称美》的讲座,感受对称设计之美;
  • 好设计是模仿大自然的设计
  • 好设计是一种再设计:专家的做法是先完成一个早期原型,然后提出修改计划,最后把早起原型扔掉; 好设计是成批出现的,推动人才成批涌现的最大因素就是让有天赋的人聚在一起,共同解决某个难题
  • 好设计是能够复制的设计
  • 好设计常常是奇特的设计
  • 好设计常常是大胆的设计:扔掉早期原型是需要信心的,你必须有本事看出有什么地方还可以再改进。你应该培养对自己的不满;犯错误是很正常的事,你要勇于承认错误,勇于改正; 编程技术也是如此,再多的修改也不为过,持续重构,保证每次修改比之前使用起来更简单。

一百年后的编程语言

为什么这个问题值得思考,原因不是我们最终会用上这些语言,而是幸运的话,我们从现在开始就能用上这些语言。编程语言存在一个进化的脉络,我们需要思考,在整个进化过程中某一种语言的位置到底在哪里,从而启发我们去尽可能选择那些靠近主干的语言,这样对当前的编程最有利。编程语言的进化与生物上的进化,最大的不同是不通风分支的语言可能发生聚合,主要是由于它的概率空间比较小,它的突变不是随机的。

一百年后的语言是什么样的?作者认为一百年后的语言理论上今天就能设计出来,很可能现在就适合编程,并且能够产生更好的结果。那么,我们现在设计的时候就应该尝试写出一百年后的语言。

拒绝平庸

大公司可以互相模仿,但是创业公司就不行,否则还有什么竞争力?想要不被别人模仿,就需要与别人保持与众不同,Viaweb公司的秘密武器是Lisp语言,Lisp语言开发速度惊人,是一种很强大的编程语言。编程语言的特点之一就是它会使得大多数使用它的人满足于现状,不想改用其他语言。

梦寐以求的编程语言

一种好的编程语言,是让黑客可以随心所欲使用的语言。一种语言必须是某一个流行的计算机系统的脚本语言,才会变得流行。其次,编程语言必须要有介绍它的书,必须要有在线文档,同时它需要是一种免费的实现。黑客欣赏的一个特点就是简洁,简洁性最重要的方面就是必须使语言更抽象。流行的语言通常很适合开发一次性程序,就是那些为了完成某些很简单的临时性任务而在很短时间内写出来的程序,比如自动生成测试数据,转化数据的程序等。

一种真正优秀的编程语言应该既整洁又混乱,听起来有点自相矛盾,但认真体会就会不一样:

  • 整洁:指设计得很清楚,内核由数量不多的运算符构成,这些运算符易于理解,每一个都有完整的独立用途。
  • 混乱:指允许黑客以自已的方式使用。

什么样的语言适合写一次性程序?首先,它必须容易安装配置,其次必须简洁。简洁性的最高形式就是已经存在函数库,你只要运行就可以了。

设计与研究

研究必须是“新”的,而设计必须是“好”的。优秀的设计不一定很新,但必须是好的;优秀的研究不一定很好,但必须是新的。这两条道路最后会发生交叉,只有应用新的创意和理论,才会诞生超越前人的最佳设计。只有解决那些值得解决的难题,才会诞生最佳的研究。所以,最终来说,设计和研究都通向同一个地方,只是前进的路线不同罢了。


总结

黑客这个词不仅是一流能力的象征,还包含着求解问题过程中 产生的精神愉悦或享受。也就是说,从一开始黑客就是有精神追求的,自由软件基金会创始人理查德·斯托尔曼说:出于兴趣而而解决某个难题,不管它有没有用?这就是黑客。根据理查德·斯托尔曼的说法,黑客行为必须包含三个特点:好玩、高智商、探索精神,只有其行为同时满足这三个标准才能被称为黑客。另一方面他们也构成了黑客的价值观,黑客追求的就是这三种价值,而不是实用性或金钱。黑客如何才能做自己喜欢的事情,我认为这个问题的解决方法是一个几乎所有创作者都知道的方法找一份养家糊口的白天工作。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作,更一般的说,白天工作的意思是你有一份为了赚钱的工作,还有一份为了爱好的工作。因为如果你不爱一件事,你不可能把他做的真正优秀,要是你很热爱编程,你就不可避免的会开发你自己的项目。

本书给我最大的收获是如何去做一个“书呆子”,坚守黑客精神,在创业中去创造财富。画作永远没有完工的一天,你只是不再画下去而已。