《黑客与画家》-读书笔记

作者是 硅谷创业之父 Paul Graham

书中的黑客指的是优秀的程序员,不仅仅是通常意义上的黑客。

保罗格雷厄姆,其人其事

书里主要讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等,有助于了解程序员、了解互联网的规则、了解这个时代。

我们生活中的一切,都正在成为计算机。所以,如果想理解我们目前的世界以及其未来的动向,要多了解黑客的想法。

保罗格雷厄姆创业公式:

  • 搭建原型。
  • 上线运营,别管bug。
  • 收集反馈。
  • 调整产品。
  • 成长壮大。

许多伟大的公司,一开始的时候做的都是与后来业务完全不同的事情。京东最早是卖光盘的、华为最早是倒卖交换机…

Make something people want. 倾听用户的声音,琢磨他们需要什么,然后就去做。

创始人本身比它的创意更重要。

创业是最有效的创造财富的方法,对创始人、对投资者、对社会都是如此。

译者序

hack 作为名词有两个意思

  • cool hack:用很巧妙或便捷的解决方法
  • ugly hack:比较笨拙、不那么优雅的解决方法

黑客行为包含三个特点,好玩儿,高智商,探索精神。构成了黑客的价值观,黑客追求的就是这三种价值,而不是实用性或金钱。

黑客伦理(hack ethic)

  1. Access to computers -and anything that might teach you something about the way the world works -should be unlimited and total. Always yield to the hands on imperative. 真理来自实际动手操作。
  2. All information should be free.
  3. Mistrust Authority - Promote Decentralization.
  4. Hikers should be judged by their hacking , not bogus criteria such as degree,age,race or position.
  5. You can create art and beauty on a computer.
  6. Computers can change your life for the better.

编程是一种艺术创作,黑客就是艺术家,开发软件与画家作画、雕塑家雕刻、建筑师设计房屋并没有本质不同。

第一章 为什么书呆子不受欢迎

因为他们的心思在别的地方

女生喜欢被其他男生妒忌的男生。

任何一种艺术不管是否重要,如果您想要在该领域出类拔萃,就必须全身心投入。

书呆子被教导追求正确答案,而受欢迎的小孩儿被教导讨人喜欢。

没有什么比一个共同的敌人更能使得人们团结起来了。

第二章 黑客与画家

黑客也是创作者,与画家、建筑师、作家一样

计算机是冰冷的,精确的井然有序的,而画画是某种原始欲望热烈狂放的表达方式。

《黑客与画家》最相像。他们都是创造者。与作曲家,建筑师作家一样,黑客和画家都是试图创作出优秀的作品。
黑客搞懂计算理论的必要性与画家搞懂颜料化学成分的必要性差不多。

day job 的意思是你有一份为了赚钱的工作,还有一份为了爱好的工作。

如果你把一个画家的作品按照时间顺序排列,就会发现每幅画所用的技巧都是建立在上一幅作品学到的东西之上。

黑客通过实践学习编程,黑客的出发点是原创,最终得到一个优美的结果,而科学家的出发点是别人优美的结果,最终发掘原创性。

过早优化 Premature optimization 是危险的事情。我们应该对过早设计 Premature design 也抱有同样的担忧,不要太早决定一个程序应该怎么做。

一副优秀的绘画作品必须比他应该有的样子更好,这可能听起来有点矛盾。达芬奇对每个作品每一部分的认真程度完全不取决于预料中,会不会有人仔细看这一部分。就像篮球巨星迈克尔乔丹,每一球都一丝不苟,绝不降低对自己的要求。

坚持一丝不苟就能取得优秀的成果。因为那些看不见的细节累加起来就变得可见了。所有那些看不见的细节合并在一起,就使得这样东西产生了惊人的效果,仿佛上千个细微的声音都以同一个音调在歌唱。

历史上许多伟大的艺术品都是多人一起合作的结果。尽管最后在博物馆展出的时候,墙上可能只会写出一个人的名字。大师负责画主要人物,助手们负责花次要人物和背景。

大多数软件是为人类用户准备的,所以黑客必须像画家一样时刻考虑到用户的人性需要,这样才能做出伟大的产品。

从他人的角度思考问题,正是成功的奥秘所在。换位思考并不意味着你要做自我牺牲,实际上这是完全不同的两回事,了解别人对于事情的看法并不代表你对他的利益服务。某些情况下,比如打仗的时候,了解对手正是为了打击对手。

几乎所有最伟大的绘画作品都是画人的,因为人类总是对自身感兴趣。
大多数创作者都是为人类用户而创作。为了吸引用户,你必须理解用户需要什么。

不能指望用户去读使用手册。软件的使用方式最好能符合用户的直觉。

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

第三章 不能说的话

如果你的想法是社会无法容忍的,你怎么办?

所谓"时尚",本质上就是自己看不见自己的样子。

”祸从口出“,自以为无害的话会给你惹来大麻烦。

能触怒他人的言论都是那些可能会有人相信的言论。

找出不能说的话的方法:

  1. 判断言论的真伪
  2. 关注”异端邪说“。历史上的每个年代,都会给”异端邪说“贴一些标签,目的是在人们开始思考他们是否为真之前就把他们封杀。
  3. 将当代观念与不同时期的古代观念diff 一下。
  4. 选择那些一本正经的卫道者,看看他们到底在捍卫着什么
  5. 去观察禁忌是如何产生的。

如果被狂热分子引诱说出真心话,可以以不变应外变,”我既不反对也不赞成“。更好的回答是”我还没有想好“

第四章 良好的坏习惯

与其他美国人一样,黑客的成功秘诀就是打破常规

数据的本质就是利于复制的。互联网的出现使得复制品更容易流通。

黑客永远是自负的,如果黑客有自己的节日,那就是4月1日愚人节,你可以放心地作弄其他人。

人均国民生产总值和公民的自由的度是成正相关的。公民自由是国家富强的原因,一个人们用于言论自由的行动自由的国家,社会最有可以采纳最优方案,而不是采纳最有权势的人提出的方案。

美国的开国元勋们的自述就很像黑客,杰弗逊写道,”法抗政府的精神,在某些场合是如此珍贵,我希望它永远保持活跃“。他们提醒我们不要忘记自己从何而来,提醒我们,正是那些不服从管教的人们,才是美国财富与力量的源泉。

第五章 另一条路

互联网软件是微机诞生后的最大机会

Hotmail 于1996年7月4日上线,是第一批浏览器界面的电子邮件服务提供商,首创了用户可以在邮件中使用HTML标记语言,Hotmail的原始写法是 HoTMaiL。

下一个潮流?

大多数时候不需要一台全功能电脑,而是只需要有键盘、屏幕、浏览器、网卡的消费类电子产品,人们主要根据外观选择购买。

用户的胜利

”你的电脑“的概念将变成”你的数据“,你可以从任何终端上获取”你的数据“。终端设备不应该存储数据,而应该更像电话那样。

互联网软件给用户带来的好处:

  1. 不用安装即可使用的软件
  2. 适用变的非常容易
  3. 不需要为新版本付出额外费用
  4. 升级不再对用户形成大的冲击
  5. bug一发现能快速得到纠正
  6. 可以同时被多人使用,所以非常适合团队协作性的工作。
  7. 数据会更安全
  8. 不容易感染病毒
  9. 使用互联网软件不会有太多压力
代码之城

对于互联网软件,可以使用任何你想用的语言。

1995年作者创建Viaweb的时候,Java applet 被认为是互联网软件的解决方案。他还是需要下载软件到客户端运行,更好更简单的方法应该是所有工作都放到服务端运行,很多创业公司都没有逃脱失败的命运。

软件的命运

桌面软件: bug宿命论,发布出去的软件肯定有bug
互联网软件:发布规则:一旦可以运行了,就可以立即发布。没有版本的概念,软件是连续性渐变的。

软件的发布

互联网软件的发布方式变了,非常的遍历。

软件bug

互联网软件的另一个技术优势在于,开发人员可以再现大部分的bug,用户的数据都在你的硬盘上。

大部分bug都是罕见情况下才会出现的,对于普通用户很难发现,对于高级用户对bug的容忍度比较高,他们玩玩会对发现隐蔽 bug 而感到得意。

客户支持

客户支持实际上就是质量监控,也是某种程度的市场营销。除了记录bug,客服人员还必须大概了解相关知识,回答与bug相关的问题,解释令使用者迷惑不解的功能等。

全身心投入

坐下来写东西的时候,一半的构思是写作时候产生的?软件也是这样。实际某个构思,会带来更多的构思。所以,将一个构思束之高阁,不仅意味着延迟他的实现,还意味着延迟所有在实际过程中激发的构思。

逆向的《人月神话》

《人月神话》是布鲁斯克斯 写的一本项目管理的名著。”人月“是一个人一个月内所能完成的工作量。某个项目预计需要12个人月,派4个人理论上3个人完成,派6个人则只需两个月完成。但作者认为这种行不通是一个神话。
因为软件项目是一个交互复杂的工作,需要大量的沟通成本,人力的增加会使沟通成本急剧上升,无法预见的相互影响越来越多,产生的bug也越来越多,反而无法达到缩短工期的目的。

关注用户

互联网软件不仅将开发者和他们的代码联系在一起,而且把开发者与他的用户也更紧密联系在了一起。

金钱问题

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

互联网软件不可能用自由软件的模式经营,只能由商业性公司来经营。

一定数量的盗版对软件公司是有好处的。不管你的软件定价多少,有些用户永远都不会购买。

你放弃了对服务器的直接控制,你就放弃了互联网软件的大部分优势。

目标客户

如果你想把钱藏在安全的地方,请问你是选择家中床垫下还是放在银行?这个比喻对于服务器管理的方方面面都适用,不仅是安全还包括正常运行时间、带宽、负载管理、备份等,互联网公司都占优势。

比起自己雇佣系统管理员,外包可以让这些公司得到更好的服务。

非IT公司的内部系统,没有竞争压力,所以要让员工表现优秀,必须有竞争压力。

有钱的客户倾向更贵的选择,即使便宜的选择更符合他们的需要,他们也不会买。

大公司付出的高价之中,很大部分是商家为了让大公司买下这个商品二付出的费用。

创业公司

研发互联网软件的创业公司会把与创业有关的每一件事都做到极致。你必须打破常规、快速行动,循规蹈矩不可能成功。

桌面软件迫使用户变成系统管理员,互联网公司则是迫使程序员变成系统管理员。

为什么不尝试一下?

创业,另你望而却步的原因:

  1. 不懂企业管理:
    做粗用户喜欢的产品,保证开支小于收入。这要做到这两点就超过大多数创业公司。
    比较软件的标准应该是看对手的软件将来会有什么功能,而不是现在有什么功能。
    你要自己判断,不要盲从。只有懂得设计的黑客才能设计软件,不能交给对软件一知半解的设计师。
  2. 害怕竞争
    大公司生产效率低,没有一家大公司能做的更好。
    他们害怕你胜过你害怕他们。上一次发布软件的新方式出现时,你们在同一个起跑线。

第六章 如何创造财富

致富的最好方法就是为社会创造财富。创造财富的最好方法就是创业。

创业公司其实就是解决了某个技术难题的小公司。

一个命题

可以把创业想象成一个压缩过程,你的所有工作年份被压缩成短短几年。在高技术领域,这种压缩的回报尤其丰厚,工作效率越高额外报酬就越高。

如果你想赚100万美元,就不得不忍受相当于100万美元的痛苦。

运气的成分

比尔盖茨很聪明有决断力,工作也很勤奋,但是单单这样还不足以让他成为他。你还需要非同一般的好运气。

任何公司的成功历程中,运气都是一个很大的随即因素。

致富的方法包括赌博,投机婚姻,继承,偷窃,敲诈,欺骗,垄断,行贿,游说,造假 ,开矿等。

通过创造有价值的东西在市场上得到回报,从而致富。这种方法的优势在于它是合法的,还在于它更简单,只需要做出别人需要的东西就可以了。

金钱不等于财富

创造有价值的东西就是创造财富,财富与金钱并不是同义词。财富存在的时间与人类历史一样长久,而金钱是一种历史相对较短的发明。

我们需要的东西就是财富。即使你没有钱你也能拥有财富。财富才是你的目标,金钱不是。金钱有点儿像流动的财富,两者往往可以互相转化。金钱只是交换媒介。

大饼谬论

金钱不是财富,而只是我们用来转移财富所有权的东西。世界上可交换的财富不是一个恒定不变的量,人类历史上的财富一直在不停地增长和毁灭,总体上看是净增长。

假如你有一辆旧的老年车,你可以放着不管他,你也可以把它修成一辆新的,这样你的财富就变得更多了。

富人拿走所有钱,那么其他人就会变得更穷,这种想法是错误的。当有人提到x%的人口占用了y%的财富。言下之意就包含了这种错误的观点。创业其实就是推翻这种观点。

手工艺人

这可能明白财富能够创造出来的人就是那些善于制作东西的人,也就是手工艺人,目前还存在的最大的手工艺人群体就是程序员。

一个优秀程序员连续工作几个星期,可能可以创造价值100万美元的财富。

在这个世界上你向下沉沦或者向上奋进都取决于你自己,不能把原因推给外界。

创造出来的财富不一定非要通过出售实现价值。科学家们一直都把自他们创造的财富直接的捐献给社会。

工作是什么

公司一切行为的目的都是盈利,从而生存下去创造财富是大多数公司盈利的手段。

几乎所有情况下,公司存在的目的就是满足人们的某种需要。所以毕业之后重要的不是加入一个公司,而是做出人们需要的东西创造财富。即使不加入公司你也能做到。

更努力地工作

大公司最大的困扰就是无法测量每个员工的贡献。个人的表现无法单独测量,公司里其他人会拖累你。

可测量性和可放大性

可放大性质:指你做出的决定能否产生巨大的效应

任何一个通过自身努力而支付的个人,在他们身上应该都能同时发现可测量性和可放大性。

没有危险就几乎等于没有可放大性。

小团队等于可测量性

公司越小,你就越能准确估计每个人的贡献。

高科技等于可放大性

创业公司通过发明新技术盈利,所以具有可放大性。

回顾历史,大多数因为创造财富而发财的人,都是通过开发新技术而实现的。

大公司的规模决定了他们无法快速行动,也无法测量并奖励表现优异的员工。

生物科技类和软件类的创业公司很显然都是解决高难度技术问题的。就算看上去技术无关的商业类公司,其实也是解决技术问题的。麦当劳其实也符合一次开发普遍使用的模式。

最好的防御就是进攻,如果你开发出来的技术是竞争对手难以复制的那就够了。这也叫进入壁垒。

潜规则

很多事情由不得你真正创业,以后你的竞争对手决定了你到底要有多辛苦。

朋友的付出与回报,虽然总体上是成比例的,但是在个体上是不成比例的。总体上来说,平均回报是30倍,但中位数却是零。也就是说,大多数创业者其实都是以失败告终。

用户数量

潜在的买家会尽可能的拖延收购,收购这件事最难的地方就是让买家真正拿出钱促成买房掏钱最好的办法不是让买家看到有获利的可能,而是让他们感到失去机会的恐惧。最重要的因素就是用户数量,他们真正在意的只是你拥有的用户数量。

最基本的原则就是创造人们需要的东西,也就是创造财富。

财富和权力

创造财富的人能够安心。心安理得的享受享用自己的财富,这其实是工业革命的一个必要条件。

近代欧洲强大的原因是欧洲人接受了一个威力巨大的新观点,允许赚到大钱的人保住自己的财富。只要懂得藏富于民国,国家就会变得强大。让书呆子保住他们的血汗钱,你就会无敌于天下。

第七章 关注贫富分化

致富的最好方法就是为社会创造财富。创造财富的最好方法就是创业。

财富的老爹模式

财富是创造出来的。
金钱与财富是两个概念。金钱只是用来交易财富的一种手段。财富才是有价值的东西。

每个人的技能不同导致收入不同,这才是贫富分化的主要原因。

正如逻辑学的奥卡姆剃刀原则所说,简单的解释就是最好的解释。

一个人的工作具有多少价值,不是有政府决定的,而是有市场决定的。

偷窃

由于人类历史上主要的致富方式长期以来都是偷窃。所以我们依然对有钱人抱有一种怀疑态度。不管是战争还是政治斗争,本质上都属于偷窃。

巴尔扎克说过。每一笔巨大财富的背后都隐藏着罪行。

技术的杠杆效应

技术肯定加剧了有技术者与无技术者之间的生产效率差异,毕竟这就是技术进步的目的。

但是前提条件是他必须掌握如何使用新技术。

由于技术的发展,富人的生活与普通人的差距缩小了。

技术无法使其变得更便宜的唯一东西就是品牌。

只要存在对某种商品的需求,技术就会发挥作用,将这种商品的价格变得很低。从而可以大量销售。

技术在加大收入差距的同时缩小了大部分的其他差距。

公理的不同意见

现代社会的收入差距扩大是一种健康的信号,技术使得生产率的差异加速扩大。如果这种扩大没有反应,在收入上面只有三种可能的解释。
一技术革新停顿了。
二那些创造大部分财富的人停止工作了。
三创造财富的人没有获得报酬。

计算机安全行业的做法,不要假设你的系统毫无漏洞,而是搞清楚多大程度上漏洞无法被利用。
即使是最先进的高科技公司,有有至少90%的工作,没有乐趣,令人生厌。

一个社会需要有富人,这主要不是因为你需要富人的支出创造就业机会,而是因为他们的创造过程,做出的事情。如亨利瓦特致富过程中创造了拖拉机,使你不再需要使用马匹耕田了。

第八章 防止垃圾邮件的一种方法

用户收到的垃圾邮件越多,他就越不可能注意到被过滤掉的垃圾邮件中包含着一封重要邮件,这就导致了一个很奇怪的后果,如果你的过滤器效果越好,就越不能出现误判。一旦误判,后果就会变得很严重。

每个收件人应该都有自己单独的概率分布表。每个人应该训练自己的贝叶斯过滤器。

使用发件人白名单可以接受计算,过滤机只需要扫描那些陌生人的邮件就可以了。

第九章 设计者的品味

你想要的学生不仅应该技术过硬,而且应当能够使用技术做出优美的产品。

品味是主观的。喜欢一件东西却不知道为什么自己喜欢他。人类的思想就是没有经过整理的无数杂念的混合。

把品味说成个人的偏好,可以有效地杜绝争论,防止争执。这种说法是不正确的。只要你开始动手设计东西,你就会明白这一点。如果你是一个设计师,并且你不承认,有一种人们共同认可的东西叫做美,那你就没有办法做好工作。

众多不同学科对美的认识有着惊人的相似度。优秀设计的原则是许多学科的共同原则,一再反复的出现。

好设计是简单的设计
第一是建筑师和设计者。它意味着美依赖于一些精心选择的结构性原则,而不依赖于表面装饰品的堆砌。表面的装饰掩盖了内部的空虚。

好设计是永不过时的设计
如果解决方法是丑陋的,那就肯定还有更好的解决方法,只是还没有发现而已。

好设计是解决主要问题的设计
许多坏设计做的很辛苦,但是从一开始方向就是就错了。

好设计是启发性的设计
绘画也分为描述性绘画和启发性回话,后者往往比前者更引人入胜。

好设计通常是有点儿趣味性的设计
幽默感是强壮的一种表现,始终拥有幽默感,就代表你对厄运一笑了之。

好设计是艰苦的设计
如果你工作得不艰苦,你可能正在浪费时间。并非所有的痛苦都是有益的。肖像画通常占据最高地位。因为我们太擅长观察脸,所以肖像画家不得不加倍努力才能达到我们的要求。
功能决定形式。Form follows function。

好设计是看似容易的设计
科学和工程学的一些最重要的发现在形式上往往很简单。会使得你觉得自己也想到过。
白描其实是最难画的视觉媒介,因为他们要求几乎完美的再现。
其作用也许是训练你把刻意为之的事情变成一种自觉的行为。

好设计是对称的设计
对称有两种重复性对称和递归性对称。

好设计是模仿大自然的设计
大自然在长期的演化中已经解决了很多设计问题,所以如果你的设计与大自然很接近,那么它基本上不会很差。

好设计是一种再设计
先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。你应该培养对自己的不满。犯错误是很正常的事情,你不要把范错看成灾难,要勇于承认,勇于改正。

好设计是能够复制的设计

好设计常常是奇特的设计
好设计是成批出现的。推动人才成批涌现的最大因素就是让有天赋的人聚在一起共同解决某个难题。相互激励比天赋更重要。

好设计常常是大胆的设计
今天的实验性错误就是明天的新理论,大多数做出优美成果的人好像只是为了修正他们眼中丑陋的东西。异常严格的品味,再加上实现这种品味的能力。

第十章 编程语言解析

计算机和其他机器一样,也有一张操作命令清单。

一个操作所需的代码越多,就越难避免bug,也越难发现他们。所以机器语言并不适用于太多的应用程序开发。

高级语言加入了编译器,它可以将简便方式书写的程序转变为硬件可以理解的语言。使得程序更具有可移植性,因为不同计算机机器语言都不是完全相同的。

除了编译器还有解释器,它的作用是实时的,将代码解释为相应的机器语言。编译器是先将整个程序全部翻译成机器语言,然后再运行。

开放源代码的优势不仅限于可以自己动手解决bug,这里的关键是所有人都可以参与。在非常强调软件可靠性的情况下,有强烈工程需求的考虑会要求开放源代码。

在静态语言中写代码时必须知道每个变量的类型,而在动态类型语言中,什么时候你都可以把变量设为任意类型的值。

第十一章 一百年后的编程语言

语言存在一个进化的脉络。可以为了找到进化的主干,从而启发我们去选择那些靠近主干的语言。这样对当前的编程最有利。

语言的设计者们总是有意识地借鉴其他语言的设计思想。

基本运算符是一种语言能否长期存在的最关键因素。

到目前为止计算机智能并没有取得太大进展。

编程语言进化缓慢的原因在于它们并不是真正的技术语言只是一种书写法,而程序则是一种严格符合规则的描述,以书写形式记录计算机应该如何解决你的问题。

数学符号的进化是缓慢的,渐进式变化,而不是真正技术的那种跳跃式发展。
由于摩尔定律,现在被认为运算速度慢的语言及运行的效率不高的语言,将来会有很大的发展空间。

正确做法应该是将语言的语义与语言的实现予以分离。

每增加一个解释,从软件的运行速度就会慢一个数量级。

字节码是已经经过编译,但是需要进一步处理才能变成机器码的中间代码。它的好处是于硬件和软件环境无关。

面向对象编程使得你有变办法对面条式代码进行可持续性的开发。

作者的观点:
1、100年后的编程语言在理论上今天就能设计出来。
2、如果今天真能设计出这样一种语言,很可能现在就适合编程,并且能够产生更好的结果。

为什么不在现在就动手尝试写出100年后的编程语言呢?

当你设计语言时候,心里牢牢记住这个目标是有好处的,学习开车的时候一个需要记住的原则就是要把车开直,不是通过将车身对齐画在地上的分隔线,而是通过瞄准远方的某个点。即使你的目标只在几米开外,这样做也是正确的。

第十二章 拒绝平庸

小公司如果只能达到平均水平,结果就意味着只能关门倒闭。

从20世纪80年代开始,硬件的指令集都是针对编译器而不是针对程序员设计的。

人类天性变化的速度大大慢于计算机硬件变化的速度,所以编程语言的发展通常比CPU的发展落后一二十年。

如果你为创业公司工作,那么这里有一个评估竞争对手的群妙招:关注他们的招聘职位。

第十三章 书呆子的复仇

lisp语言

因为这种语言本质上不是一种技术,而是数学。数学是不会过时的。

第十四章 梦寐以求的编程语言

第十五章 设计与研究

设计与研究的区别在于前者追求好后者追求新。

肖像画就是比风景画更能引起观众的兴趣,文艺复兴时期的经典绘画作品都是画人的。

19世纪英国作家简奥斯汀的小说为何如此出色?
一个原因就是他把自己的作品大声读给大家听,所以他就不会陷入孤芳自赏难以自拔的境地。

贴近用户的设计思想被归纳为弱即是强模式。

任何时候代码都必须能运行。
大多数画家都是先画一个草图,然后再逐步加工。
有一句流传已久的谚语:画作永远没有完工的一天,你只是不在画下去而已。程序开发也是同样的道理。

优秀设计的前提是你必须喜欢这种产品。

你可能感兴趣的:(读书笔记)