《黑客》读书笔记

简介

《黑客》这本书介绍的是上世纪50~80年代的一段计算机历史,介绍第一代黑客的起源,第二代硬件黑客对世界的影响,第三代游戏黑客如何让电脑融入大众生活,类似“魔戒三部曲”一样宏伟的一部计算机编年史。

黑客的起源

MIT AI实验室第九大楼是黑客的发源地,”hack”一词大概最早就是由MIT的学生提出的,原来是用来形容本校学生的一些精心策划的恶作剧,但AI实验室的黑客们对”hack”却有着极大的尊敬。一般一项技艺能称为”hack”,它必须有创新,有风格,有技术含量,AI实验室里面效率最高的人就非常骄傲的称自己为”hacker”。

黑客马拉松

熟悉Facebook的人对黑客马拉松都会有所了解,Facebook每年都会举办几场黑客马拉松编程比赛,在这些比赛中也诞生了很多伟大的产品,在《黑客》这本书里面讲到这一活动的早期雏形。在上个世纪50年代,个人电脑还没有普及,在MIT学校里面接触电脑的那一帮最早的黑客只能通过大型机编程。但是大型机就那么几台,所以喜欢编程的黑客们的上机时间非常有限,一般是一个人刚上完机,另外一个人就迫不及待地顶替他的位置编写自己的代码,甚至有些黑客觉得白天上机的时间不够,会晚上偷偷溜进实验室继续编程。虽然现在个人电脑已经很普遍了,但黑客们还是很喜欢这种长时间编程活动。

黑客道德与敏捷开发

敏捷开发中有什么?有快速迭代,代码所有制,团队自组织,了解敏捷开发的同学对此都比较清楚,而黑客道德里面也有一些很相似的共同点,我因此觉得黑客道德是敏捷开发的原型。

信息应该免费

黑客普遍认为信息应该免费共享(为什么说普遍?因为比尔盖茨不是这样认为的,他认为软件也是脑力劳动的成果,所有人应该尊重劳动成果,所以他写了那一封很著名的信——给电脑爱好者的公开信),他们认为计算机(包括软件和硬件)应该公开其中的黑盒,让所有人参与到其中的开发并对其进行完善,这样计算机才能取得更大的进步。敏捷开发中的代码所有制与此观点相同,认为团队中的代码不应该为个人所有,应该所有人都有权对代码进行修改。

快速开发产品原型

在Facebook崇尚的黑客之道中,就有Done is better than Perfect的说法,就是说一开始不要追求产品的完美,先做出产品的原型得到市场的反馈,再慢慢根据反馈来完善产品。黑客们一直以来也是这样做的,遇到感兴趣的问题不会想太多,做了再说,快速把核心功能开发出来验证自己的想法,很多伟大的产品都源自于此。敏捷开发中的快速迭代也是类似的原理,甚至最近比较火的精益创业也是此种观点。

对权威挑战

黑客希望信息共享,能快速开发产品,对开发的效率要求是十分严格,他们对工具的追求像对完美艺术追求一样。但大部分权威机构的产品都不能满足黑客们的要求,它们笨重、不开放、设计保守。黑客们更倾向于自己开发工具,自给自足,然后开放给其他黑客一起使用,大家一起完善。这是一种对权威的挑战、蔑视,黑客与生俱来的叛逆精神。

优雅简洁的代码

在还是大型机的时代,电脑的内存和容量非常小,黑客在编程的时候需要让自己的代码尽可能的少,这样才能“塞进”机器里面运行。比如实现某个功能,如果某人只是按部就班的实现这个功能,大家可能会觉得他只是靠蛮力解决了问题,勉强算是一个程序员,但如果他使用了一种奇妙的算法,让代码量大大减少了,那么大家会觉得他是一个黑客,是一位追求完美的艺术家,比如比尔盖茨编写的4KB大小的BASIC程序就经常为黑客们所津津乐道。敏捷开发中对代码的重构推崇有加,介绍重构的资料最经典的是Martin.Flower重构一书,技术背后的思想我觉得跟这些早期黑客是一致的,要像艺术家一样对待自己的代码,追求优雅和完美,是一种对自我的超越。有个说法是,如果你看自己以前的代码觉得很烂,证明你已经进步了,看自己代码的时间间隔越短,证明你进步的越快,比如上午写完的代码,下午review时觉得太糟糕了,那恭喜你,你已经进步了。

防御性编程

最后说一下防御性编程,比较有意思。以前有一位外号叫“嘎吱船长”的黑客约翰.德拉浦,他是位天才的技术家,他喜欢的编程风格就是“防御式编程”。大部分人在修复bug时,一般都会找到出错的代码,然后改正它,而船长的改法比较特别,不修改出错的代码,而是加上另外一段代码来让程序自己发现问题后自己修复。比如下面的一段有错误的代码:

1
2
3
4
5
6
   def method_name(self):
      x = y = 2
      sum = x + y
      if sum == 5:
          # do something
          ...      

正常人会这样改:

1
2
3
4
5
6
   def method_name(self):
      x = y = 2
      sum = x + y
      if sum == 4: #一般会改这里
          # do something
          ...

但是船长是这样来修复:

1
2
3
4
5
6
7
8
9
10
11
   def method_name(self):
      x = y = 2
      sum = x + y

      #在这里加代码...  
      if sum != 5:
          sum = 5

      if sum == 5:
          # do something
          ...

让程序完成自我救赎~~~^_^

Comments