《黑客与画家》读书笔记

Jan 26, 2018
3817
#笔记#黑客与画家

本文最近一次更新于 6 年 2 个月前,其中的内容很可能已经有所发展或是发生改变。

https://ae01.alicdn.com/kf/HTB1ADe_aizxK1RjSspj763S.pXa2.png

去年年底那会,花了大概一周多时间,阅读完了《黑客与画家》这本书,收获颇丰。可惜当时确实没多少时间整理出读书笔记,期末考试结束后,回到家中,本想着有时间能好好补一下博客,结果回家之后也没有想象中的空闲,看着「搬瓦工」把每年 20$ 的套餐补货了,于是就购置了一台服务器,将博客源码从 GitHub 上转移到了自己的服务器上,还拿 Golang 重写了一下「一言」的 API(扯远了,服务器的事等以后再开一篇博客说说),还补了一部早已加入想看列表却一直没看的番——「反叛的鲁路修」(嘻嘻 😌)。

直到今天,才终于有时间能把这篇读书笔记给整理出来了,笔记是直接在 Kindle 上标注的,然后用「Clippings.io」这个工具导出(为什么 Kindle 不能开发一个好用一点的笔记管理系统呢!?)。

好在 azw3 版本在 Kindle 上的体验还不错,即使有代码段排版也没有垮掉,所以决定原谅你。

(👇以下为文摘)


  1. 在一个人产生良知之前,折磨就是一种娱乐。

  2. 程序写出来是给人看的,附带能在机器上运行。(这句话的出处是在《SICP》这本书的卷首语,作者引用了)

  3. 如果有必要的话,大多数物理学家有能力拿到法国文学的博士学位,但是反过来就不行,很少存在法国文学的教授有能力拿到物理学的博士学位。

  4. 人们喜欢讨论的许多问题实际上都是很复杂的,马上说出你的想法对你并没有什么好处。

  5. 小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人。 如果自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。

  6. 不服从管教,其实是黑客之所以成为优秀程序员的原因之一。

  7. 公民自由并不仅仅是社会制度的装饰品,或者一种很古老的传统。公民自由使得国家富强。

  8. 经济学里有一条拉弗曲线(Laffer curve),认为随着税率的上升,税收收入会先增加后减少。我认为政府的力量也是如此,随着对公民自由的限制不断上升,政府的力量会先增加后减小。

  9. 极权主义制度只要形成了,就很难废除。(咳咳)

  10. 一定数量的盗版对软件公司是有好处的。不管你的软件定价多少,有些用户永远都不会购买。如果这样的用户使用盗版,你并没有任何损失。事实上,你反而赚到了,因为你的软件现在多了一个用户,市场影响力就更大了一些,而这个用户可能毕业以后就会出钱购买你的软件。

  11. 首先,管理企业其实很简单,只要记住两点就可以了:做出用户喜欢的产品,保证开支小于收入。

  12. 一个大学毕业生总是想「我需要一份工作」,别人也是这么对他说的,好像变成某个组织的成员是一件多么重要的事情。更直接的表达方式应该是「你需要去做一些人们需要的东西」。即使不加入公司,你也能做到。公司不过是一群人在一起工作,共同做出某种人们需要的东西。真正重要的是做出人们需要的东西,而不是加入某个公司。

  13. 要鼓励大家去创业。只要懂得藏富于民,国家就会变得强大。让书呆子保住他们的血汗钱,你就会无敌于天下。

  14. 财富是用工作成果衡量的,而不是用它花费的成本衡量的。如果我用牙刷油漆房屋,屋主也不会付给我额外工资的。

  15. 好设计是艰苦的设计。如果观察那些做出伟大作品的人,你会发现他们的共同点就是工作得非常艰苦。如果你工作得不艰苦,你可能正在浪费时间。

  16. 并非所有的痛苦都是有益的。世界上有有益的痛苦,也有无益的痛苦。你需要的是咬牙向前沖刺的痛苦,而不是脚被钉子扎破的痛苦。解决难题的痛苦对设计师有好处,但是对付挑剔的客户的痛苦或者对付质量低劣的建材的痛苦就是另外一回事了。

  17. 等到你逐渐对一件事产生热情的时候,就不会满足于模仿了。

  18. 「你用什么语言并不重要,重要的是你对问题是否有正确的理解。代码以外的东西才是关键。」这当然是一派胡言。各种语言简直是天差地别。

  19. 语言设计者之间的最大分歧也许就在于,有些人认为编程语言应该防止程序员干蠢事,另一些人则认为程序员应该可以用编程语言干一切他们想干的事。

  20. 允许你做某事的语言肯定不差于强迫你做某事的语言。

  21. 它们(指某些语言)的内核设计得并非很好,但是却有着无数强大的函数库,可以用来解决特定的问题。(你可以想象一辆本身性能很差的小汽车,车顶却绑着一个飞机发动机。)有一些很琐碎、很普遍的问题,程序员本来要花大量时间来解决,但是有了这些函数库以后,解决起来就变得很容易,所以这些库本身可能比核心的语言还要重要。所以,这些奇特组合的语言还是蛮有用的,一时间变得相当流行。车顶上绑着飞机发动机的小车也许真能开,只要你不尝试拐弯,可能就不会出问题。(内心 OS:我可没有针对 C++ 😏)

  22. 当我说 Java 不会成功时,我的意思是它和 Cobol 一样,进化之路已经走到了尽头。

  23. 如果摩尔定律依然成立,一百年后计算机的运行速度将是现在的 74 乘以 10 的 18 次方倍(准确地说是 73 786 976 294 838 206 464 倍)。

  24. 即使最后只是略微快了 100 万倍,也将实质性地改变编程的基本规则。如果其他条件不变,现在被认为运行速度慢的语言(即运行的效率不高)将来会有更大的发展空间。

  25. 效率低下的软件并不等于很烂的软件。一种让程序员做无用功的语言才真正称得上很烂。

  26. 自下而上的编程方法意味着要把软件分成好几层,每一层都可以充当它上面那一层的开发语言。这种方法往往会产生更小、更灵活的程序。它也是通往软件圣杯——可重用性(reusability)——的最佳路线。

  27. 罗伯特·莫里斯和我都很了解 Lisp 语言,我们相信自己的直觉,找不出任何不使用它的理由。我们知道其他人都用 C++ 或 Perl 开发软件,但是我们不觉得这说明了什么问题。如果别人用什么技术,你也用什么技术,那么你大概只能使用 Windows 了(日常黑 Windows)。

  28. 编程语言的特点之一就是它会使得大多数使用它的人满足于现状,不想改用其他语言。

  29. 如果从图灵等价(Turing-equivalent)的角度来看,所有语言都是一样强大的,但是这对程序员没有意义。

  30. 最不用担心的竞争对手就是那些要求应聘者具有 Oracle 数据库经验的公司,你永远不必担心他们。如果是招聘 C++ 或 Java 程序员的公司,对你也不会构成威胁。如果他们招聘 Perl 或 Python 程序员,就稍微有点威胁了。至少这听起来像一家技术公司,并且由黑客控制。如果我有幸见到一家招聘 Lisp 黑客的公司,就会真的感到如临大敌。

  31. 你的经理其实不关心公司是否真的能获得成功,他真正关心的是不承担决策失败的责任。

  32. 黑客欣赏的一个特点就是简洁。黑客都是懒人,他们同数学家和现代主义建筑师一样,痛恨任何冗余的东西或事情。

  33. 简洁性是静态类型语言的力所不及之处。只要计算机可以自己推断出来的事情,都应该让计算机自己去推断。举例来说,hello-world 本应该是一个很简单的程序,但是在 Java 语言中却要写上一大堆东西,这本身就差不多可以说明 Java 语言设计得有问题了。

    public class Hello {
      public static void main(String[] args) {
        System.out.println("Hello, world!");
      }
    }

    如果你从来没没有接触过编程,看到上面的代码可能会很奇怪,让计算机显示一句话为什么要搞得这么复杂?有意思的是,资深程序员的反应与你一样。

  34. 语言设计者应该假定他们的目标用户是一个天才,会做出各种他们无法预知的举动,而不是假定目标用户是一个笨手笨脚的傻瓜,需要别人的保护才不会伤到自己。如果用户真的是傻瓜,不管你怎么保护他,他还是会搬起石头砸自己的脚。

  35. 对黑客来说,选择编程语言的时候,还有一个因素比简洁更重要,那就是这种语言必须能够帮助自己做到想做的事。

(👇以下为简评)


这本书算是我从去年 7 月以来看完的第一本书了(《计算机程序的构造和解释》这本书太难了,看了前两章就没时间看,到还书的日期了),主要也在于作者 Paul Graham 的行文十分流畅,阮一峰的翻译也很到位,没有什么阅读障碍,还有「读至好几处都有一拍大腿,哎呀妈呀我也是这么想的啊」的想法,读完之后,思想也似乎豁然开朗了些。

关于第六章——「如何创造财富」,财富的获得是看你最终的结果,不是看你的付出(过程)。你做出了别人需要的产品,没人在乎你是做了三天还是三十天,他并不会因为你只做了三天就完成而少付给你报酬,更不会因为你是三十天完成而多给你报酬。还有关于「财富并不是固定不变的」这个理论,他给出了一个例子:你拥有一辆老爷车,你可以不去管它,也可以自己动手把它修葺一新这样的话,你就创造了财富:世界上因此多了一辆新的车,财富就变得多了一点,如果你把车卖掉,你得到的卖车款就会比以前更多,与此同时,你并没有使任何人变得更贫穷。正因为这个理由,他也建议我们多多创业,但也给我们泼了一盆「凉水」:创业的付出与回报总体上是成比例的,但是在个体上是不成比例的,不要把创业过于神话,但创业的确给了我们更多的可能。

还有就是关于编程语言的争论,作者似乎和我一样很喜欢黑 Java,认为 Java 是「进化之路已经走到了尽头」,因为编程语言并不应该限制程序员去做某些事情,即使这些事情是有害的。同时也抛出了另一个很新颖的说法:关于一百年以后,我们该使用什么样的编程语言?按照摩尔定律:预计 18 个月会将芯片的性能提高一倍,那时候电脑的运行速度将是现在的 73 786 976 294 838 206 464 倍,所以他认为现在某些因为运行速度略慢但编程起来更舒服的语言在未来反而是主流,即有更大的发展空间,同时作者似乎很推崇动态类型语言,因为写起来比静态类型语言方便、看起来也比较简洁。作者也不止一次的推崇了 Lisp,甚至不惜黑 Oracle 数据库、C++、Java(见上面第 30 条)。

最后,这本书算是 Paul Graham 的一本随笔文集,其中自然充斥着许多作者的价值观,如果这些价值观与你的价值观符合,那么你就会像「捡到宝」一样的对待这本书,反之,你会认为这本书的观点完全是和「邪教信条」一般,很庆幸,我是前者。


处于马上步入社会的我啊,在迷茫的时候,不妨也多阅读几本好书。

《黑客与画家》读书笔记

https://blog.itswincer.com/posts/a6c2a51d/

作者

Wincer

更新于

Jan 31, 2018

许可协议

CC BY-NC-ND 4.0
  1. Apr 19, 2018

    《代码整洁之道》读书笔记
  2. May 6, 2017

    书推:雪中悍刀行