这几天一直沉浸在《黑客与画家》所营造的强大思维气场之中,该书是Paul Graham 的博客文集,涵盖了软件开发,思维方式,编程语言,创业,社会财富,社会价值,自由等话题的思考.在读过第二遍之后,我决定把书中对我触动较大的内容整理出来.笔记于此,注:文章内容版权归原作者和翻译者所有.喜欢本书请购买正版.

 

 

 

思维方式

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

  2. 我们这个世界,你向下沉沦或者向上奋进都是取决于你自己,不能把原因归于外界.

  3. 数学家Norbert Wiener说:如果你与奴隶比赛,你也会变成一个奴隶.

  4. 你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这和作家画家和建筑师的做法完全一样.

  5. 历史的常态似乎就是,任何一个年代的人们都会对一些荒谬的东西深信不疑.

  6. 如果你想要清晰地思考,你就必须远离人群.小时候每个人都会鼓励你不断成长,变成一个心智成熟,不耍小孩子脾气的人.但是很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人.如果自己就是潮水的一部分怎么能看到潮流的方向?

  7. 如果一个命题是错误的,这就是它所得到的最坏的评价,足够批判它了,根本不用在加上任何标签.但是一个命题不是错的,却被加上各种标签,进行压制和批判就有问题.因为只要不是错误的观点,就不应该被压制讨论.

  8. 丑陋的做法和聪明的做法有一个共同点就是不符合常规.

  9. Michael Rabin遇到难题的时候,会把问题重新定义成一个比较简单的形式,同时一定会假想一个对手在与他比赛谁更快的解决问题.

  10. 构思这东西有个特点,就是它会导致更多的构思.你有没有注意过,坐下来写东西的时候,一般构思是在写作的时候产生的?软件也是这样!

互联网产品

  1. "你的电脑"这个概念正慢慢成为过去式,取而代之的是"你的数据".你应该可以从任何终端上获取你的数据.

  2. 硬件需要考虑的地方不仅仅在于怎样才能避免出问题,还在于怎样做才能最大地发挥它们的作用.

  3. 如果软件是经常性发布,每次只有很小幅度的变化,那么就不容易产生复合式Bug,这好比是扫除,你一直在打扫大厅,掉落在地板上的东西会被被立刻清理,省得它们时间一长与其它东西粘在一起.软件运行不了就不发布,一旦能运行了就立刻发布;你的软件是连续性渐变的,某些更新也许比较重大,但是"版本"这个概念并不适用于互联网软件.因为你能得到用户数据,所以就不用依赖基准测试了,基准测试不过是在模拟用户,而你现在能看到真实的用户.你想知道该优化什么地方,就登录到服务器,看看什么程序最消耗CPU,你会知道什么时候应该停止优化.当我们发现ViaWeb编辑器的瓶颈是内存而不是CPU时,就知道可能应该停止优化了.

  4. 大公司的做法不是立刻实现新的功能,而是先对新功能做一个计划,我们没有任何计划,我们有改进的想法,但是我们如果想到怎么改进,我们就已经把它实现了.

  5. 提高软件可靠性的关键在于开发时的全神贯注,而不是降低开发速度.正因为飞行会员的全神贯注,他在能在夜间让一架18吨的飞机以225公里的时速平安降落在航母的加班上,做的比小孩子切面包还要安全.

  6. 正如人月神话指出的,向一个项目增加人手,往往会拖慢项目进度,随着参与人数的增加,人与人之间的沟通成本呈指数式增长.

  7. 只要你还在很活跃的开发产品,就免不了亲自做系统管理.互联网软件是获得,每时每刻都在你的服务器上运行.

 

工作,价值与创业

  1. 人们无法考核你的工作,甚至误解你的工作,都不是最糟糕的事情.更大的危险是你自己也误解自己的工作.

  2. 工作就是在一个组织中,与很多人共同合作,作出某种人们需要的东西.

  3. 你的职位产生的业绩应该是可测量的,否则你做得再多,也不会得到更多的报酬.

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

  5. 从经济学观点看,你可以把创业想象成一个压缩的过程,你所有的工作年份被压缩成短短的几年,你不在是低强度的工作四十年,而是以极高的强度工作四年.在高技术领域,这种回报极其丰厚,工作效率越高,额外报酬越高.

  6. 技术就是某种手段,就是我们做事的方式.如果你解决了一个热门的技术难题,别人都会使用你的解决方案,这就是可放大性.

  7. 假定软件有两个候选的新功能,它们创造的商业价值完全相同,那么我们总是选择比较困难的那个功能.不是因为这个功能能带来更多的收入而是因为它比较难,我们在创业初期筋疲力尽解决难题,但是我们很高兴,如果那些问题我们都觉得那么困难,那么竞争对手就会更认为不可能解决.VC知道这个道理,为它取了一个名字:barriers to entry 进入壁垒

  8. 用户数量也许不是最好的测量指标,但是应该也相差不远了.买家(收购方)关心它,收入依赖它,竞争对手恐惧它,记者和潜在用户则是被它打动.无论你的技术水平有多高,用户数量都比你自己的判断更能准确反映哪些问题应该优先解决.

 

社会财富与自由

  1. 技术肯定加剧了有技术者和无技术者的生产效率差异,这毕竟就是技术进步的目的.

  2. 技术应该会引起收入的差距扩大,但似乎在缩小其它差距;1900年只要你有一辆马车,你就是富人,根本就没有人问你马车的牌子;今天,即使美国最穷的人也有自己的汽车,那么厂商只好通过广告训练我们识别品牌;技术无法使其变得更便宜的唯一的东西就是品牌;

  3. 创造财富不是致富的唯一方法,在历史长河中它甚至不是最常见的方法.快速致富的方法可以是继承,婚姻,征服,没收,很自然的财富的名声不好.积累财富最常见的方法其实是偷窃,游牧社会是偷别人的牲口,农业社会是征税(和平时期)和直接掠夺(战争时期).不管是战争还是政治斗争,本质上都属于偷窃;在控制程度更高的社会,统治者和官僚阶层都会使用税收代替直接充公,但本质没有变.

  4. 每个人的技能不同,导致收入不同,这才是贫富分化的主要原因.

  5. 一个人们拥有言论自由的和行动自由的社会,往往最有可能采纳最有效的方案,而不是采纳最有权势的人提出的方案.专制的国家会变成腐败的国家,腐败的国家会变成贫穷的国家,贫穷的国家会变成弱小的国家.经济学里面有一条拉佛曲线,认为税率上升税收收入会先增加后减少.政府的力量也是如此.

  6. 两个事情发生了变化:一是法律的变化保护平民的血汗钱不被强盗掠夺;二是工业化的来临.创造财富的人能够心安理得的享用自己的财富,没有财富的激励,技术革新就会逐渐停顿.

  7. 欧洲在历史上为什么变得强大?答案可能就是欧洲人接受了一个威力巨大的新观点:允许赚到大钱的人保住自己的财富.只要懂得藏富于民,国家就会变得强大,让书呆子保住他们的血汗钱,你就会无敌于天下.

设计

  1. 当你被迫把东西做的简单的时候,你就被迫直接面对真正的问题.当你不能用表面的装饰交差的时候,你就不能不做好真正本质的部分.

  2. 飞机设计师凯利约翰逊的观点:如果解决防范是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已.

  3. 好设计是解决主要问题的设计

  4. 好设计是具有启发性的设计,你应该提供一些基本的模块,使得他们可以随心所欲的自由组合,解决个各种问题.

  5. 好设计是看似容易的设计 科学和工程学上一些最重大的发现在形式上往往非常简单,会使你觉得自己也想到过,可是如果它真的那么简单,为什么发现的人不是你呢?

  6. 好设计是能够复制的设计:我们对待复制的态度经常是一个否定之否定的过程.刚入门的新手不知不觉的模仿他人,逐渐熟练之后才开始创作原创性的内容.最后他会意识到,把事情做对比原创更重要;等你逐渐对一件事情产生热情的时候,就不会满足于模仿了.你的品味就进入了第二阶段,开始自觉的进行原创.

  7. 好设计是成批出现的,好设计是大胆的设计

  8. 创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将现有的观点用比较新的方式组合起来.

 

编程语言

  1. 整个语言进化过程中,某一种语言的位置到底在哪里?找到进化的主干,它会启发我们去选择那些靠近主干的语言,这样对当前的编程最有利.

  2. 在长期的职业生涯中,我发现冗余的代码会导致更多冗余的代码,不仅软件如此,而且像我这样性格懒散的人,我发现在床底下和房间的角落这个命题也成立,一件垃圾会产生更多垃圾.

  3. 编程语言进化缓慢的与原因在于他们并不是真正的技术.语言只是一种书写法,而程序则是一种严格的符合规则的描述,以书面形式记录计算机应该如何解决你的问题.所以编程语言的进化速度更像数学符号的进化速度而不像真正的技术比如交通或通信技术那样的进化速度.数学符号的进化是缓慢的渐进式变化,而不是真正技术的那种跳跃式发展.

  4. 一旦未来硬件的性能大幅提高将会发生什么事情?新增加的运算能力会被糟蹋掉.要是以及十年前的标准衡量,有一些使用新语言开发的热门应用程序对硬件资源的浪费非常惊人.不仅编程语言有这种现象,这实际是一种普遍的历史趋势.随着技术的发展,每一代人都在做上一代人觉得很浪费的事情.

  5. 一种让程序员做无用功的语言才真正称得上很烂.浪费程序员的时间而不是浪费机器的时间才是真正的浪费时间.

  6. Lisp很值得学习,你掌握它之后,会感到它给你带来的极大的启发.这回大大提高你的编程水平,是你成为一个更好的程序员.尽管在实际工作中极少会用到Lisp.

  7. 大家都知道徒手使用机器语言写整个程序是一件很蠢的事情,但是把这个观点推广到一种更为普遍的情况,知道的人就不多了.如果你有好几种语言可以选择,在不考虑其他因素的情况下,不选择最强大的那种语言就是一件很蠢的事.

  8. Lisp的最大优势体现在编程任务的另一极端,就是在激烈的竞争条件下开发那些解决困难问题的复杂程序.

好吧,看这本书对我最直接的影响是:我决定看看下面两本书,哈哈

        ANSI Common LISP                    Land of Lisp 

 

相关链接:

[1] Land of Lisp  http://book.douban.com/subject/3704991/

[2] ANSI Common LISP http://book.douban.com/subject/1456906/

[3] 黑客与画家 中文版 http://book.douban.com/subject/6021440/