这本书是一本非常经典的书,作者是有硅谷创业教父之称的Paul Graham,书中介绍了作者对黑客精神的看法,鼓励我们保持独立思考的精神,同时介绍了创业公司相比传统公司的种种优点,也谈到了自己对设计,对编程语言等的看法。非常具有启发性
为什么书呆子不受欢迎
这一章,作者从自己的角度,分析了为什么书呆子不受欢迎。因为相比让自己受欢迎,他们更愿意把精力放到让自己聪明。让自己受欢迎,需要投入大量的精力,只有极少数人能同时分出精力做到这两者。被一群孩子成群结队的欺负,并不是因为做错了什么,只是因为这一伙人需要一起找一件事情做,而欺负书呆子是一个安全的事情。
黑客与画家
作者指出黑客与画家等创作者很像,而不是科学家,并提出了以下几个观点。
- 都是创作者,试图创作出优秀的作品,本质上并不是在做研究。创作者和科学家是不同的。无论是大学的实验室还是大公司,黑客都很难做自己喜欢的事情,去创业公司,也会有很多麻烦事需要应付。有一份活命的白天工作+晚上的自由自在,是一个不错的办法。
- 应该通过实践,范例学习编程。
- 逐步完成,再慢慢填入细节。避免过度设计。
- 考虑心里周期,以根据不同的事情,找出不同的应对方法。把消灭bug这种轻松工作留到最后解决。
- 合作开发软件,最好是把项目分割成严格定义的模块,每个模块由一个人明确负责。模块与模块的接口精心设计。
- 换位思考,考虑用户的人性需要。判断是否有这个能力的方法就是看怎么向没有技术背景的人解释技术问题。
不能说的话
针对所谓“不能说的话”,作者给出了一些方法,来找出哪些话是不能说的。
- 部分情况下的真话。
- 异端邪说。很多看似叛逆的异端邪说,早就潜伏在思维深处,如果暂时着装自我审查意识,它们就会第一个浮现出来。
- 时空差异。通过回顾过去,过去与现在,东方与西方等等不同观点,进行对比。所有年代所有地方都基本禁止的,也许才是真正错误的。如果在大部分时空是不受禁止的,很可能是我们错了。
- 道貌岸然。用父母给孩子灌输的假想世界与现实世界做对比,找出不能说的话。
- 机制。观察禁忌和道德观念产生的机制。道德禁忌最大的制造者是那些权力斗争中略占上风的一方。他们有实力推行禁忌,同时又软弱到需要禁忌保护自己的利益。
训练自己去想那些不能想的,可以获得超出想法本身的好处。对于发现的“不能说的话”,最好别说,至少要挑选合适的场合再说,只打值得打的仗。自由思考比畅所欲言重要。在别人逼你表态的时候,可以说“我还没想好”。对于值得打的仗,攻击具体的东西,容易授人以把柄。可以 - 攻击元标签,即抽象描述。
- 使用隐喻。
我们要永远保持质疑的态度。良好的坏习惯
黑客不服从管教,追求自由,并有敏锐的感觉。
另一条路:创业之路
作者总结了互联网软件相对于桌面软件的各种优势。
- 迭代发布,功能逐渐变化,减少bug的引入,线上环境,bug很快浮出水面,很快修改。
- 与用户更紧密的联系。
- 即时发布让开发人员全力投入。
如何创造财富
可能最好的办法,就是自己创业或者加入创业公司了。
金钱不等于财富。金钱是财富的一种简便表达,但我们的目标是财富。社会总财富是增加的。要致富,需要两样东西 - 可测量性。职位产生的业绩,应该是可测量的。
- 可放大性。你的决定能够产生巨大影响。可以用失败的可能性来判断可放大性。没有危险,几乎就没有可放大性。
两者必须兼而有之。例如CEO,明星,基金经理,运动员。
小团体=可测量性。很难衡量每个人的贡献,但是小团队的贡献,是可测量的。这就是创业公司的真正意义:与更愿意努力工作的人组成一个团队,共同谋取更高的回报。
高科技=可放大性。创业公司通过发明新技术盈利。小团队天生就适合解决技术难题。
创业也有一些潜规则: - 很多事情由不得你。例如竞争对手决定你到底要多辛苦。
- 创业付出与回报总体上成比例,但是个体上不成比例。对个人来说,付出与回报之间存在一个很随机的放大因子。
追求保险,可以早期卖掉自己的创业公司。买家更在乎你的用户数量。要时刻牢记最基本的原则:创造人们需要的东西,即财富。
什么是好设计
- 好设计是永不过时的设计。
- 好设计是解决主要问题的设计。
- 好设计是启发性的设计。
- 好设计通常是有点趣味性的设计。
- 好设计是艰苦的设计。
- 好设计是看似容易的设计。
- 好设计是对称的设计。
- 好设计是模仿大自然的设计。
- 好设计是一种再设计。
- 好设计是能够复制的设计。
- 好设计常常是奇特的设计。
- 好设计是成批出现的。
- 好设计常常是大胆的设计。
编程语言
作者本人非常推崇LISP语言,这里列一下Lisp语言诞生时候就包含的9种新思想
- 条件结构
- 函数也是一种数据类型。
- 递归。
- 变量的动态类型。
- 垃圾回收机制。
- 程序由表达式组成。
- 符号类型。
- 代码使用符号和常量组成的树形表示法。
- 无论什么时候,整个语言都是可用的。
作者认为语言要满足下面几个条件,才能让黑客喜欢上
- 一种免费的实现
- 一本相关书籍
- 语言有它所依附的计算机系统。
- 简洁
- 可编程性:能够帮助自己做到想做的事。
- 善于完成黑客想要完成的各种一次性任务。
- 函数库。
- 效率。
- 经受时间考验。
- 再设计。
作者在这里针对各个接口由不同人负责的情况,除非两个人都同意改变接口,否则接口就无法改变。为了解决这种问题,可以想办法把接口设计成垂直的,而不是水平的。意味着软件内部的模块是一个个垂直堆积起来的抽象层,层与层之间的接口完全由其中一层控制。如果较高一层使用了较低一层定义的语言,那么接口就由较低的一层控制,如果较低一层从属于较高的一层,那么接口就由较高的一层控制。