前言
朋友推荐了我这本书,我就仔细地读了。这本书虽然看似堆满了零散的观点,但这些观点发人深省,有些又很新奇,有些又充满经验。大致讲了黑客的特点,书呆子气等,与画家类似的创新设计模式,开发互联网软件的过程与经验,财富获得,黑客选择的语言,软件的设计哲学,还有各种夸lisp(我也想学lisp了>_<)。观点比较杂,我就整理我认同的一些观点与经验吧
作者介绍
Paul Graham,他开发了第一个互联网应用软件Viaweb,该程序被雅虎收购,成为Yahoo!Store。他创办了创业孵化公司Y conbinator。
观点与经验
1.黑客是怎样的
黑客充满书呆子气,不愿参与社交。这是因为他们的心思都放在要解决的问题上了。在学生时代,就会显得不受欢迎。
黑客的学习进步可借鉴其他行业,比如画家,完成一个作品是要不断修改的,不要过早优化。作为创作者,要从原创出发,这里是对比科研人员是在已有成果上做改进,而不是原创。在技术上,应多从优秀代码学习。对待编程要有一丝不苟的认真态度。
2.财富
财富不等于金钱。获得财富的方法也有很多,但是最好的,最有效的是创造财富–创业或是加入创业公司。在创业公司的效率可以是大公司的数十倍(估计,数值不重要),(沟通需要成本),虽然在创业公司创造的财富是数十倍,总体回报也是差不多,但是对于个体是随机的,回报的中位数为0。人与人创造财富的能力有差距,从而回报也有差距(若用金钱来衡量)比如一般CEO是常人的100倍,职业篮球运动员是常人的128倍…
技术的发展,是否加剧贫富分化? 在收入上是拉大了差距,但是在其他方面可以说是减小了差距,比如pc,手机人人都可以有,在以前是不可想象的。
3.编程与软件开发
编程主要在调试,所得有好的debug能力。编程的特点不是先把全部思路都想好了再写,可以便携程序边理解,其中可能有其他发现。由于这个特点,程序语言最好支持动态类型,以方便扩展。
人人都想变得聪明,或者让自己,别人觉得聪明。数学,是聪明的一种表现。所以,在编程时,存在诱惑:向数学方法上靠近,这时应该提醒自己:什么是你认为重要的东西。
编程语言,是程序员的思考模式。要选择好的编程语言,语言是有强弱之分的。只是大多数人满足现状:我目前使用的语言能解决问题,某些语言不过是有一些奇怪的特性罢了。这就是思维被语言同化。使用某种语言能做到的事是有极限的。虽然在图灵完备性上程序可以由任何一种语言写,但是代码长度,开发速度,工作量是不同的。他就设想了100年后 的编程语言:内核小(如同数学上的公理),eg尽量少的基础类型,虽然可能速度较慢,但他认为硬件的提升可以忽略这个差异。有强大的函数库,简洁很重要
程序写出来是给人看的,附带能在机器上运行。
代码尽量要简洁,冗余的代码会产生更多的冗余的代码。对于软件开发,在竞争方向上,选择新兴领域会更有市场。如果能发布,就发布,即使还有bug。开发的技术越困难,对手越难模仿。这就是‘进入壁垒’。提高进入壁垒的方法可以是申请专业,但是打官司是打不过大公司的。所以小的创业公司还是要让自己的产品不能被轻易复制。提高软件可靠性的关键在于开发时全神贯注,而不是降低速度。
4.设计
好的设计以永不过时为目标。有以下特点。
- 趣味
- 艰苦
- 模仿大自然
- 对称:重复性;递归性
- 再设计:反复修改,不断完善
- 启发性:在软件领域,是指一个产品要有基础夫人模块,供用户组合,就像搭积木。在科研领域,可以看一篇文章的引用送送次数。
5.不能说的话
他将不能说的话分成几类,以启发我们去寻找。不能说的话是对谁不能说,对谁可以说?这样刻意去做也是有意的。优秀作品往往来自其他人忽视的想法。而且自由思考比畅所欲言更重要。
- 真话。想想其他人说了,而陷入麻烦?
- 异端想法。那些我们未经大脑审查而冒出的想法,才是我们的真实想法,让它出现,来好好剖析自己。
- 时空差异。时过境迁,地域文化差异。
- 口号禁令。想想一本正经的卫道者在捍卫着什么。
在别人想试探你的立场,观点时,要么保持沉默,要么注意分寸地回答。
“别想在我身上做石蕊试验’