『读书笔记』黑客与画家

前言

朋友推荐了我这本书,我就仔细地读了。这本书虽然看似堆满了零散的观点,但这些观点发人深省,有些又很新奇,有些又充满经验。大致讲了黑客的特点,书呆子气等,与画家类似的创新设计模式,开发互联网软件的过程与经验,财富获得,黑客选择的语言,软件的设计哲学,还有各种夸 lisp(我也想学 lisp 了》_<)。观点比较杂,我就整理我认同的一些观点与经验吧


作者介绍

Paul Graham,他开发了第一个互联网应用软件 Viaweb,该程序被雅虎收购,成为 Yahoo!Store。他创办了创业孵化公司 Y conbinator。


观点与经验

1. 黑客是怎样的

黑客充满书呆子气,不愿参与社交。这是因为他们的心思都放在要解决的问题上了。在学生时代,就会显得不受欢迎。

黑客的学习进步可借鉴其他行业,比如画家,完成一个作品是要不断修改的,不要过早优化。作为创作者,要从原创出发,这里是对比科研人员是在已有成果上做改进,而不是原创。在技术上,应多从优秀代码学习。对待编程要有一丝不苟的认真态度。

2. 财富

财富不等于金钱。获得财富的方法也有很多,但是最好的,最有效的是创造财富 — 创业或是加入创业公司。在创业公司的效率可以是大公司的数十倍(估计,数值不重要),(沟通需要成本),虽然在创业公司创造的财富是数十倍,总体回报也是差不多,但是对于个体是随机的,回报的中位数为 0。人与人创造财富的能力有差距,从而回报也有差距(若用金钱来衡量)比如一般 CEO 是常人的 100 倍,职业篮球运动员是常人的 128 倍…

技术的发展,是否加剧贫富分化? 在收入上是拉大了差距,但是在其他方面可以说是减小了差距,比如 pc,手机人人都可以有,在以前是不可想象的。

3. 编程与软件开发

编程主要在调试,所得有好的 debug 能力。编程的特点不是先把全部思路都想好了再写,可以便携程序边理解,其中可能有其他发现。由于这个特点,程序语言最好支持动态类型,以方便扩展。

人人都想变得聪明,或者让自己,别人觉得聪明。数学,是聪明的一种表现。所以,在编程时,存在诱惑:向数学方法上靠近,这时应该提醒自己:什么是你认为重要的东西。

编程语言,是程序员的思考模式。要选择好的编程语言,语言是有强弱之分的。只是大多数人满足现状:我目前使用的语言能解决问题,某些语言不过是有一些奇怪的特性罢了。这就是思维被语言同化。使用某种语言能做到的事是有极限的。虽然在图灵完备性上程序可以由任何一种语言写,但是代码长度,开发速度,工作量是不同的。他就设想了 100 年后 的编程语言:内核小(如同数学上的公理),eg 尽量少的基础类型,虽然可能速度较慢,但他认为硬件的提升可以忽略这个差异。有强大的函数库,简洁很重要

程序写出来是给人看的,附带能在机器上运行。

代码尽量要简洁,冗余的代码会产生更多的冗余的代码。对于软件开发,在竞争方向上,选择新兴领域会更有市场。如果能发布,就发布,即使还有 bug。开发的技术越困难,对手越难模仿。这就是‘进入壁垒’。提高进入壁垒的方法可以是申请专业,但是打官司是打不过大公司的。所以小的创业公司还是要让自己的产品不能被轻易复制。提高软件可靠性的关键在于开发时全神贯注,而不是降低速度。

4. 设计

好的设计以永不过时为目标。有以下特点。

  • 趣味
  • 艰苦
  • 模仿大自然
  • 对称:重复性;递归性
  • 再设计:反复修改,不断完善
  • 启发性:在软件领域,是指一个产品要有基础夫人模块,供用户组合,就像搭积木。在科研领域,可以看一篇文章的引用送送次数。

5. 不能说的话

他将不能说的话分成几类,以启发我们去寻找。不能说的话是对谁不能说,对谁可以说?这样刻意去做也是有意的。优秀作品往往来自其他人忽视的想法。而且自由思考比畅所欲言更重要。

  • 真话。想想其他人说了,而陷入麻烦?
  • 异端想法。那些我们未经大脑审查而冒出的想法,才是我们的真实想法,让它出现,来好好剖析自己。
  • 时空差异。时过境迁,地域文化差异。
  • 口号禁令。想想一本正经的卫道者在捍卫着什么。

在别人想试探你的立场,观点时,要么保持沉默,要么注意分寸地回答。

“别想在我身上做石蕊试验’

本文结束感谢阅读