登录站点

用户名

密码

binglan的instagram日志

binglan的主页 » TA的所有ins日志 » 查看ins日志

《黑客与画家》读书笔记

1已有 407 次阅读  2016-06-13 16:05   标签计算机系统  读书笔记  编程语言  全世界  程序员 
《黑客与画家》读书笔记
一、章节结构

本文中的“黑客”是指最优秀的程序员,而不是入侵计算机系统的人。《黑客与画家》从解释为什么书呆子不受欢迎到阐述黑客精神的意义,实际上是给程序员进行了正名。保持黑客精神,就有可能改变这个世界。 

  全书15章可以大致分成三个部分: 

  第一部分(第1章到第4章):解释了黑客是如何成长的以及他们看待世界的一些观点。 

  第二部分(第5章到第9章):解释了黑客怎样做出自己的成果,这些成果又是怎样对全世界产生了影响。 

  第三部分(第10章到第15章):解释了黑客的工具(编程语言)和工作方法,黑客文化的基础和核心。 

  从书名可以看出,作者认为和画家一样,黑客只是怀有一门特殊手艺、有创造天赋的普通人;同时,编程是一种艺术创作,黑客就是艺术家,开发软件与画家作画、雕塑家雕刻、建筑师设计房屋并没有本质不同。 
  这是一本帮助读者理解这个时代的书。

二、章节内容
-为什么书呆子不受欢迎?
  作者发现在美国的中学,书呆子反而不受欢迎。然而,作者发现“智力”本身与“受欢迎”无关,所以作者认为造成这种现象的原因就是他们本身不想让自己受欢迎,这部分的人追求的是聪明而不在意是否受欢迎。对于他们来说,平庸的智力不可忍受。 
  书呆子没有意识到“受欢迎”需要付出很多的努力,对于高度困难的领域,只有身处其中的人,才能意识到成功需要不间断的努力。书呆子真正不受欢迎的原因,是因为他们想着别的事情上,他们有其他的兴趣而没有多余的精力用来使自己更受欢迎。 
  为什么欺负书呆子?一个人在产生良知之前,折磨别人可作为一种娱乐。在任何社会等级制度中,那些对自己没有自信的人就会通过虐待他们眼中的下等人来突显自己的身份。中间层需要找一件事情一起干,他们其实并不恨书呆子,他们只是需要一个共同的目标把自己团结起来,而书呆子是一个可供欺负的安全目标。在封闭的环境中更容易出现这种现象。 
  成年人在真实世界中的团体,一般来说,都存在某个共同目标。那么领导者通常可以由最善于实现此目标的人承担,而学校里的学生并没有共同目标,但等级关系却不会消失,所以学生们的等级是凭空创造出来的。

-黑客与画家
  黑客与画家的共同之处,在于他们都是创作者,都试图创作出优秀的作品,本质上都不是在做研究,虽然过程中可能发现一些新技术。优秀的软件并不总是论文的合适题材:科研必须具有原创性,必须能够产生大量成果。黑客的出发点是原创,最终得到一个优美的结果;科学家的出发点是别人优美的结果,最终得到原创性。 
  黑客如何才能做自己喜欢的事情?解决方法之一是找一份养家糊口的“白天工作”。面试程序员的时候,作者主要关注的事情就是业余时间他们写了什么软件。因为如果你不爱一件事,就不可能把它做得真正优秀,要是你狠热爱编程,你就不可避免地会开发自己的项目。 
  画家学习绘画主要是动手去画,而黑客学习编程的方法也是通过自己实践;画家通过临摹大师作品学习,黑客可以通过观看优秀的程序学会编程;绘画是逐步完成的,从草图再逐步填细节,黑客也是如此。多个画家共同创作一幅画的时候,每个人画的部分不同,且有主有次;同样,黑客共同开发一个软件时也需要合作,每个人负责一个模块,模块间的接口严格定义。 
  生产特别优秀的产品不是大公司的获胜手段,如果一家公司达到需要由一群产品经理来设计软件,而不是程序员,那么他就已经做不出最优秀的产品了,所谓知行合一,天下无敌。

-不能说的话
  历史的常态就是,任何一个年代的人们,都会对荒谬的东西深信不疑。他们的信念还很坚定,只要有人稍微表示一点怀疑,就会惹来大麻烦。作者试图找出适用于所有年代的通用法则,来判断那些话是不能说的。 
  你的观点从别人那里听来的,别人告诉你什么,你就相信了什么,你把别人灌输的观点当作了自己的观点,那么你就会犯下和别人一样的错误。 
  到底什么话是不能说的?我们可以假设周围人因为说什么而陷入了麻烦。你会发现需要满足两个条件:第一,这些话不能说出口;第二,这句话看起来可能是正确的,值得进一步讨论。第二个条件很关键,因为你说2+2=5是不会有麻烦的。 
  许多言论,今天的人们看来再平常不过的,但是放在过去都是不能说的。找出“不能说的话”的第一种方法就是判断言论的真伪。除此之外,有些想法纯粹因为非常特别而不能说出口。关注“异端邪说”是找出“不能说出的话”的第二种方法。将当代观念与不同时期的古代观念比较一下,这是用来找出“不能说的话”的第三种方法。如果某个观点在大部分时空都是不受禁止的,只有我们这个社会才把它当作禁忌,那么很有可能是我们出错了。寻找那些一本正经的卫道者,看看他们到底在捍卫什么,这就是第四种寻找“不能说的话”的方法。观察流行的产生方式,试着预测它会禁止哪些话,这是寻找“不能说的话”的第五种方式。 
  优秀的作品往往来自于其他人忽视的想法,而最被忽视的想法就是那些被禁止的思想观点。一旦发现了“不能说的话”,作者建议下一步就是别说,至少也要挑选合适的场合再说,只打那些值得打的仗。自由思考比畅所欲言更重要,在心里无所不想,但是不一定要说出来。 
  如果你想要清晰的思考,就必须远离人群,如果自己就是潮水的一部分,怎么能看见潮流的方向呢,你只能永远保持质疑

-良好的坏习惯
  黑客是不服从管教的,这就是他们的本性。公民自由使得国家富强,一个人们拥有言论自由和行动自由的社会,往往可能采纳最优方案,而不是最有权势的人提出的方案。黑客对于公民自由是非常敏感的,因为这对他们至关重要。 
  那些不服从管教的人们,才是美国财富与力量的源泉。与其他美国人一样,黑客的成功秘诀就是打破常规。

- 另一条路
  使用互联网软件,除了软件本身,用户不需要别的事情,往往只需要一个能够上网的浏览器就可以。随着互联网越来越深入人心,桌面模式的弊端就越来越明显。平滑的升级软件,不让使用者感到困惑,这是互联网软件面临的新问题。 
  使用互联网软件,数据会更安全,不太容易感染病毒,能够同时被多人使用。对于互联网软件,可以使用多种编程语言开发,不同的语言适合不同的任务。互联网软件带来的最大的变化之一就是软件发布方式的改变,互联网软件的发布规则是它运行不了就无法发布。另一个技术优势在于开发者能够根据服务器日志再现大部分的bug。 
  本章除此之外,还讲述了一些作者创业时的感悟,以及采取的措施。

- 如何创造财富
  致富的最好方法就是为社会创造财富。创造财富的最好方法就是创业。 
  要致富,你需要2样东西,可测量性和可放大性。你的职位产生的业绩,应该是可以测量的,否则你做的再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。 
  可测量性: 
  团队越小,每个人的工作成绩越容易衡量,所以在小团队中工作你的价值会更容易体现。团队越大,每个人的贡献就越接近于整体的平均值。 
  可放大性:回顾历史,大多数发财的人都是通过开发新技术而实现的。

-关注贫富分化
  每个人的技能不同导致收入不同,这是贫富分化的最要原因。人们对贫富分化不满意的一个原因就是在大部分的人类历史中,积累财富最常见的方法其实是偷窃。技术的进步会引起收入差距的扩大,但是能缩小其他的生活差距。 
  社会历史上,压制收入差距的扩大,最终导致的结果都是使社会作为一个整体变得更为贫穷。一个人,要避免的是绝对的贫穷而不是相对贫穷,所以社会需要有富人,不是因为富人的支出创造就业机会,而是因为他们在致富过程做出的事情。

-防止垃圾邮件的一种方法
  作者认为过滤垃圾邮件是可以做到的,基于内容的过滤器将发挥作用。作者认为用一些简单的算法就可以做到这一点,例如:只要对单个词语进行贝叶斯判断就可以很好地过滤大部分垃圾邮件。 
  黑客往往习惯于发现垃圾邮件的特征,后期想要提高精度非常困难,条件设置严格误判率就会上升。而基于统计学过滤,一大优点就是你不需要一封封去看垃圾邮件。同时作者提倡使用白名单,用于节约计算。 
过滤器的差异越大,同时使用的效果就越好。

-设计者的品味
  好的设计师简单的设计。好设计是永不过时的设计。好设计是解决主要问题的设计。好设计是启发性的设计,通常是有点趣味性的设计。好设计是艰苦的设计,是看似容易的设计。 
  好的设计是对称的设计;对称有两种:重复性对称和递归性对称。 
  好的设计是模仿大自然的设计; 
  好的设计是一种再设计,专家的做法是先完成一个早期原型,然后提出修改计划,最后把早起原型扔掉; 好设计是成批出现的,推动人才成批涌现的最大因素就是让有天赋的人聚在一起,共同解决某个难题。 
好的设计是大胆的设计,扔掉早期原型是需要信心的,你必须有本事看出有什么地方还可以再改进。你应该培养对自己的不满;犯错误是很正常的事,你要勇于承认错误,勇于改正; 编程技术也是如此,再多的修改也不为过,持续重构,保证每次修改比之前使用起来更简单。

-编程语言解析
  机器语言:计算机的操作命令;汇编语言:早期的程序语言,二者的都只能让计算机做一些简单的事情。编译器的作用就是将简便书写的程序转变为硬件可以理解的语言。 
高级语言命令较为简便,能把程序写得更简短,更容易发现bug,使得程序更具有可移植性。编译器与解释器的区别:编译器先将整个程序全部翻译成机器语言,然后再运行;解释器实时地将代码解释为相应的机器语言,然后一行行运行。 
  作者除此之外,还讨论例如开源、静态类型语言与动态类型语言、面向对象的编程等热门话题。

-一百年后的编程语言
  编程语言存在一个进化的脉络,我们需要思考,在整个进化过程中某一种语言的位置到底在哪里,从而启发我们去尽可能选择那些靠近主干的语言,这样对当前的编程最有利。编程语言的进化与生物上的进化,最大的不同是不通风分支的语言可能发生聚合,主要是由于它的概率空间比较小,它的突变不是随机的。 
作者认为,那些内核最小,最干净的编程语言才会存在于进化的主干上。 
  一百年后的语言是什么样的?作者认为一百年后的语言理论上今天就能设计出来,很可能现在就适合编程,并且能够产生更好的结果。那么,我们现在设计的时候就应该尝试写出一百年后的语言。

-拒绝平庸
  作者讲述了创业的时候他们使用Lisp的原因及结果。别忘了你的对手与你一样,能用任何想用的语言编写互联网软件。创业公司对竞争对手应该越保密越好,最了解技术的人就是顾客,他们不关心怎么开发,但是发现真的很好用。

-书呆子的复仇
  各种编程语言的编程能力是不同的。在高科技行业,只有失败者采用“业界最佳实践”。继而,作者介绍了Lisp语言的诞生,以及它的特点。

-梦寐以求的编程语言
  一种好的编程语言,是让黑客可以随心所欲使用的语言。一种语言必须是某一个流行的计算机系统的脚本语言,才会变得流行。其次,编程语言必须要有介绍它的书,必须要有在线文档,同时它需要是一种免费的实现。黑客欣赏的一个特点就是简洁,简洁性最重要的方面就是必须使语言更抽象。流行的语言通常很适合开发一次性程序,就是那些为了完成某些很简单的临时性任务而在很短时间内写出来的程序,比如自动生成测试数据,转化数据的程序等。 
  什么样的语言适合写一次性程序?首先,它必须容易安装配置,其次必须简洁。简洁性的最高形式就是已经存在函数库,你只要运行就可以了。

-设计与研究
  研究必须是“新”的,而设计必须是“好”的。
分享 举报

发表评论 评论 (0 个评论)

涂鸦板