06bc3cce0f65cc6aa656b7e76d9c6caa_MD5.jpg

最近在看《黑客与画家》这一本书,主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题,本文用于记录读书过程中的一些笔记和思考。

1.为什么书呆子不受欢迎

为什么呢?

因为书呆子真的不想让自己受欢迎,他们脑子里面想着别的事情,注意力放在了读书或者观察世界上面,让自己变得更聪明,而不是琢磨打扮社交让自己变成受欢迎。

有趣观点

不是很认同的地方

几乎每一个和我讨论过的人都同意,人生的最糟糕时期是在11岁到14岁。”

这里我不是很认同,应该是作者那个时间段受够了被那些受欢迎小孩欺负形成的阴影,同时和他交流的那些人刚好也是那种不收欢迎的“书呆子”

至于学校,不过是这个虚假环境中关住牲口的围栏。表面上,学校的使命是教育儿童。事实上,学校的真正目的是把儿童都关在同一个地方,以便大人们白天可以腾出手来把事情做完。

看到这句话,可见作者青春期过得真的有阴影了,也不是很认同,以后自己有儿女了,需要好好引导;

不过在整本书中,大部分观点还是很认同作者的。

2.黑客与画家

没有看此书之前,一直很不想自诩自己为码农,感觉像没有思考重复劳动者,更多的是想做一个手艺人,通过代码这个工具来一些有趣的东西,顺便可以赚钱,两全其美。

关系

作者说“黑客和画家最相像”,很认同,黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术。

黑客真正想做的是设计优美的软件,考核这种工作是非常困难的。你本人需要有良好的设计感,才能去考核别人的设计是否良好。但是,你觉得你有“良好的设计感”,与你实际是否具有,不存在相关关系,甚至可能存在负相关。

接着举了一个大学上机的例子,学校教的是先在先在纸上把程序搞清楚,然后再敲出来,这与作家、画家和建筑师的做法完全一样,他的方式是一股脑不管对错,先把代码堆上去,再慢慢修改,看上去像编程就是在调试。

有趣的点

思考

普通黑客与优秀黑客的所有区别之中,会不会“换位思考”可能是最重要的单个因素。

此处的换位思考是指设身处地为用户考虑,如何评定一个人是否具备呢?就是看他怎样向没有技术背景的人解释技术问题,越来越觉得,如何向不是很懂某种技术的人将你懂的东西让他也可以很轻易的理解,很考验人的能力。

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

非常赞同这一句话,程序写出来是为了让人看懂它的算法,附带告诉计算机如何执行。”一种好的编程语言应该比英语更容易解释软件。只有在那些不太成熟、容易出现问题的地方,你才应该加上注释,提醒读者注意那里,就好像公路上只有在急转弯处才会出现警示标志一样。

不少人以为写出很体现技术的代码是高水平、高能力的体验,其实不然,用简单的代码解决复杂的问题,同时实习生都能够轻易看懂的代码才是好代码。

3.不能说的话

作者比较谨慎,认为无论什么年代,“祸从口出”是一直存在的,告诫读者一定要小心自己说的话。自以为无害的言论会给你惹来大麻烦。

你是一个随大流的人吗?

假如在大庭广众下,你有没有观点什么观点不愿说出口?如果没有,应该好好想一想了,有一可能你的观点就是从别人那里听来的,别人告诉你什么,你就相信了什么,你把别人灌输的观点当作了自己的观点。

为了防止他人复制,古代制作地图的工匠会故意在地图上画错一个小地方。如果你的地图与他的地图一样,就说明不太可能是你自己独立制作的。

我们的思想几乎肯定也是一张有错误的地图。如果你也犯下与别人一样的错误,那么这个错误不太可能完全来自于你自己

找出“不能说的话”的方法

为什么要这样做?

发现后怎么办

有趣的点

思考

训练自己去想那些不能想的事情,你获得的好处会超过所得到的想法本身。

但是一般都是喜欢先做自己喜欢的事情,对于不想做的事情能拖就拖着,殊不知一直在原地思维圈子,跳不出去,毫无无创新。

如果你想要清晰地思考,就必须远离人群。但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。

也就是做自己,follow your heart,不要随波逐流。

4.良好的坏习惯

对于程序员来说,“黑客”这个词的字面意思主要就是“精通”,也就是他可以随心所欲地支配计算机。“黑”(hack)也有一种意思是赞美,如果你解决问题的方式非常聪明高超,将整个系统操纵在股掌之间,这也叫做你很“hack”。

之后作者讲了一个想学习开锁的例子,原因并不是想着去破解做坏事,而是为了满足好奇心,或者磨练自己的智力。

这里所说的良好的坏习惯,我理解应该是一种对新事物保持好奇心,爱自由,不爱管束的心态。

有趣的点

5.另一条路

作者当时创业时候,本来打算写一个传统的桌面软件,但是想到可以让软件在服务器上运行,浏览器作为操作界面。我们试着重写,让所有操作都通过网络完成。

他将事情看得很透彻,想到对于用户来说其实很多东西不需要关注,对于乱七八糟、经常变动的东西,都放在服务器端,由精通此道的专业人员维护,不需要用户自己当“系统管理员”。这种方式更容易、更便宜、更机动、更可靠,通常也比桌面软件更强大。

用户的胜利

95年的思路,death before inconvenience(太麻烦、不如死)

互联网的操作应该是不受地域限制,在任何地方都可以使用,其实也即网页比安装在计算机上面的桌面软件更方便使用。

“你的电脑”这个概念正慢慢成为过去时,取而代之的是“你的数据”。你应该可以从任何电脑上获取你的数据。或者更准确地说,在任何终端设备上获取你的数据,终端设备不一定是电脑。

互联网的软件对于用户的好处有:无需安装、发布迅速、平滑升级、bug修复迅速、可以同时多人使用,数据更加安全等到优点。

有趣的点

思考

应该让用户像订报纸那样按照使用时间长短订购软件的使用权。

想起有些mac、iphone 上面软件的订阅方式,之前一直不理解,其实这样是对应开发者/用户来说都是好的,开发者这边可以持续的升级,为用户带来更好的体验。

对于软件开发者来说,这样是一种理想的收入来源,每个季度有一个持续的现金流,同时可以更好的管理购买软件的人(不付钱,后面就用不了了….)

对于购买者来讲,我喜欢,下次我就可以不订阅了,也是比较方便的。

许多农场用电篱笆防止奶牛逃跑,但是不少电篱笆其实并没有通电。不过奶牛们已经吃过苦头,显然学会了不去碰电篱笆,这时不通电也能起到效果。“奶牛们,行动吧!”他写道,“趁着统治者打鼾时,夺回你们的自由!”

也就是说,为什么不尝试一下呢?作者讲到创业,但大部分黑客会有两件事让他们望而却步,不敢真正开始采取行动。一件是不懂得管理企业,另一件是害怕竞争。可是实际上,这两件事都是没有通电的电篱笆。 其实可以试试的。

6.如何创造财富

作者认为最好的办法就是创业,或者是加入创业公司。

为什么呢?

创业其实是一个压缩过程,你的所有工作年限被压缩成了短短几年,在高科技领域,回报尤其丰厚,工作效率越高,额外报酬就越高。

其次创业工作时候上班时候是在公司时间的2倍,加上全神贯注,产出提高3倍,将中间管理层出去,效率再提升2倍,同时不需要完成强行上级指派的任务,尽可能根据自己愿望,发挥聪明才智,效率再提升3倍,也就是工作效率是在公司的36倍,也即之前是8万美元一年,现在可以成为300万美元一年了。(当然前提是黑客…..)

运气的成分

任何公司的成功历程中,运气都是一个很大的随机因素。那些你在报纸上读到的成功人士固然很聪明,很努力,但是他们的运气也不坏。

这里举了一个比尔盖茨的例子,IBM 和 微软关于DOS操作系统的授权协议,是IBM 犯下的一个错误,IBM尽全力帮助微软控制了个人电脑的标准。从那时起,微软只要不停地做出产品就可以了,它从来不用做出有商业风险的决策。微软只要抱着授权协议不放,快速地复制新产品就行了。

致富的方式有很多种(投机、婚姻、继承、偷窃、敲诈、诈骗、垄断、行贿、游说、造假、开矿等),当时上述大概都是不劳而获或者不合法的那种,这里主要讲的是通过创造有价值的东西在市场上得到回报,从而致富,这种既合法还简单。

金钱不等于财富

创造有价值的东西就是创造财富,之前自己也一直认为有钱就是有财富,其实不是,我们需要的东西就是财富,食品、服装、住房、汽车、生活用品、外出旅行等都是财富。即使你没有钱,你也能拥有财富。、

比如说你身处南极洲内陆,再多的钱对你也是无用的,因为没有东西可买,你真正需要的是财富。

那为什么大家都把挣钱挂在嘴边呢?部分原因是,金钱是财富的一种简便的表达方式:金钱有点像流动的财富,两者往往可以互相转化,但不是财富,而只是我们用来转移财富所有权的东西。

手工艺人

最可能明白财富能被创造出来的人就是那些善于制作东西的人,也就是手工艺人。他们做出来的东西直接放在商店里卖,但是,随着工业化时代的来临,手工艺人越来越少。目前还存在的最大的手工艺人群体就是程序员。

工作是什么

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

更努力地工作

大公司会使得每个员工的贡献平均化,这是一个问题。我觉得,大公司最大的困扰就是无法准确测量每个员工的贡献。

但是,现实是你在工作上投入的精力越多,就越能产生规模效应。在某些行业,那些真正拼命工作的员工能够创造出比普通员工多十倍甚至百倍的财富。

此处也指明了大公司的一个弊端,你的工作无法被量化,贡献难以被测量,导致很多想更努力地工作,但是与其他许多人的工作混杂在一起,这样就产生了问题,公司里其他人会拖累你。

可测量性和可放大性

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

但是,如果你想同时具备可测量性和可放大性,不一定非当上CEO或电影明星不可。你只需要成为某个攻克难题的小团体的一部分就可以了

小团体=可测量性、高科技=可放大性

一个非常能干而且在乎回报的人,通常在同类人组成的小团队中会有更出色的表现,自己也会感到更满意。

同时多数因为创造财富而发财的人都是通过开发新技术而实现的。

创业的潜规则

有趣的点

思考

什么是技术?技术就是某种手段,就是我们做事的方式。如果你发现了一种做事的新方式,它的经济价值就取决于有多少人使用这种新方式。

很有道理的一句话,很多时候,做技术人会有一个误区,自己觉得很厉害,但是东西根本没有人去使用,这其实也是不好的,它的价值取决于有多人在使用,同时可解决问题。

假定你是一个手脚敏捷的小男孩,身后有一条壮硕的大狗正在追你。你跑到楼梯口,这时应该上楼还是下楼?我觉得应该上楼。如果下楼的话,大狗可能跑得跟你一样快。上楼的话,大狗的庞大身躯就将成为劣势。不错,跑上楼你会比较吃力,但是大狗会感到更吃力。

在生活工作中也应该这样,应该故意去选择那些很困难的技术问题,不是因为这个功能能带来更多的收入,而是因为它比较难,也即进入壁垒(bairiers to entry)。其实做技术也应该这样,这样才有意思。

总的来说,这也是很好的处事原则。如果你有两个选择,就选较难的那个。如果你要选择是坐在家里看电视,还是外出跑步,那就出去跑步吧。这个方法有效的原因可能是遇到两个一难一易的选择时,往往出于懒惰的缘故,你会选择较易的那个选项。在意识深处,你其实知道不懒惰的做法会带来更好的结果,这个方法只是迫使你接受这一点。

7.关注贫富分化

当人们非常想把某件事做好的时候,有些人会做得比其他人好得多。

我们说一些工作报酬过高,另一些工作报酬过低,我们的真实想法到底是什么?在自由竞争的市场经济中,价格由买家的需求决定。如果人们喜欢棒球甚于喜欢诗歌,那么棒球运动员的收入就是要比诗人的收入高。如果说某种工作的报酬过低,那就相当于说人们的需求不正确。当然,人们确实会需求不正确的东西。

有趣的点

8.防止垃圾邮件的一种方法

这一节对于现在这个年代的意义不是很大,作者认为过滤垃圾邮件是可以做到的,基于内容的过滤器将发挥作用。 但是在他那个年代,意义很大的。

要对单个词语进行贝叶斯判断,就能很好地过滤大部分垃圾邮件。后面通过统计学的方法做了一个过滤器,其实有点像现在的机器学习了。

9.设计者的品味

这里讨论的是“如何做出优美的产品”,优秀设计的原则是许多学科的共同原则,一再反复地出现。

众多学科对美的理解

有趣的点

10.编程语言解析

计算机和其他机器一样,有一张操作命令清单,命令的总和就是计算机的机器语言(machine language)。

机器语言

计算机刚发明的时候,所有程序就是一条条机器语言的命令。没过多久,程序就改成使用汇编语言了,它要比机器语言写起来稍微方便一点。命令清单还是一样的,就是每个命令换了一个更人性化的名字。 两者共同特点是:只能让大多数计算机做一些很简单的事情。

高级语言

简便方式书写的程序所使用的语言就叫做高级语言,让你能够使用更强大的命令开发程序。 除了可以将代码写得更加简短,还有一个优点,就是可移植性。

实现高级语言可以用编译器或者解释器,区别是前者先将整个程序全部翻译成机器语言,然后再运行。后者是实时地将代码解释为相应的机器语言,然后一行行运行。

编译器处理的高级语言代码又叫做源码。它经过翻译以后产生的机器码就叫做目标码。

有趣的点

思考

车顶上绑着飞机发动机的小车也许真能开,只要你不尝试拐弯,可能就不会出问题

这里讲的后面出现的新的“头重脚轻”的编程语言,它们的内核设计得并非很好,但是却有着无数强大的函数库,可以用来解决特定的问题。可以想象一辆本身性能很差的小汽车,车顶却绑着一个飞机发动机。

有一些很琐碎、很普遍的问题,程序员本来要花大量时间来解决,但是有了这些函数库以后,解决起来就变得很容易,所以这些库本身可能比核心的语言还要重要。

也就更好解释了黑客们为什么不喜欢用C这种语言了。

11.百年后的编程语言

编程语言就像生物物种一样,存在一个进化的脉络,许许多多分支最终都会成为进化的死胡同。 也即不同分支的语言会发生聚合,因为语言的设计者们总是有意识地借鉴其他语言的设计思想。

作者认为,那些内核最小、最干净的编程语言才会存在于进化的主干上。一种语言的内核设计得越小、越干净,它的生命力就越顽强。

有趣的点

12.拒绝平庸

哈哈,这一节,作者在推广 lisp 语言,想起之前看的SICP来了,有点高深,还需要再看一遍才能搞懂,他说真正非常严肃地把黑客作为人生目标的人,应该考虑学习Lisp:

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

有趣的点

13.书呆子的复仇

产品经理和程序员之间的“冲突问题”,一个是对技术一无所知;一个是对技术有强烈的个人观点。

讲着讲着,又说到了Lisp,为什么很特别呢?Lisp语言诞生的时候就包含了9种新思想。其中一些我们今天已经习以为常,另一些则刚刚在其他高级语言中出现,至今还有2种是Lisp独有的。

为什么Lisp语言很特别

有趣的点

14.梦寐以求的编程语言

这种语言干净简练,具有最高层次的抽象和互动性,而且很容易装备,可以只用很少的代码就解决常见的问题。不管是什么程序,你真正要写的代码几乎都与你自己的特定设置有关,其他具有普遍性的问题都有现成的函数库可以调用。

这种语言有大量优秀的范例可供学习,而且非常符合直觉,你只需花几分钟阅读范例就能领会应该如何使用此种语言。

这种语言以层的方式构建。较高的抽象层透明地构建在较低的抽象层之上。如果需要的话,你可以直接使用较低的抽象层。

这种语言的所有细节对使用者都是透明的。它提供的抽象能力只是为了方便你的开发,而不是为了强迫你按照它的方式行事。

简洁

可编程性(Hackability)

一次性程序

函数库

效率

时间

再设计

15.设计与研究

设计与研究的区别看来就在于,前者追求“好”(good),后者追求“新”(new)。优秀的设计不一定很“新”,但必须是“好”的;

有趣的点

结束

这本书看了好几个星期,终于看完整理出来了,很像大学时候做笔记那种感觉,同时也解决了我不少困惑,很推荐程序员有时间去阅读一下!