黑客与画家-读书简记

2015年04月13日

黑客行为必须包含三个特点:好玩、高智商、探索精神。

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

为什么书呆子不受欢迎


书呆子已经在思考的东西,正是真实世界看重的东西。他们与别人不一样,不把所有时间用来玩一种耗尽全力但又亳无意义的游戏。

要昂起头看世界。

黑客与画家


黑客搞懂“计算理论”(Theory of computation)的必要性,与画家搞懂颜料化学成分的必要性差不多大。

编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。

作家和画家没有“对数学家的妒忌”,他们认为自己在从事与数学完全不相关的事情。

黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性。

坚持一丝不苟,就能取得优秀的成果。

消灭Bug的过程就像解一道数学题,已知许许多多的约束条件,你只要根据条件对方程求解就可以了。

正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

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

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

不能说的话


找出不能说的真话

① 只有同时满足两个条件才行。第一个条件是,这些话不能说出口;第二个条件是,它们是正确的,或者看起来很可能正确,值得进一步讨论;

② 关注“异端邪说”,是找出“不能说的话”的第二种方法;

③ 时空差异。我们可以去找那些过去被认为理所当然,如今却被认为不可思议的事情,这是用来找出我们自己正在犯下的错误的第三种方法。找出“不能说的话”的第三种方法:将当代观念与不同时期的古代观念Diff^一下;

④ 道貌岸然。第四种寻找“不能说的话”的方法:寻找那些一本正经的卫道者,看看他们到底在捍卫着什么;

⑤ 我还想到了第五种方法,可以找出“不能说的话”,那就是去观察禁忌是如何产生的。

为什么这样做

① 首先,我这样做与小孩子翻石头是出于同样的原因:纯粹的好奇心;

② 其次,我这样做是因为我不喜欢犯错;

③ 再次,我这样做,是因为这是很好的脑力训练。

优秀的决策者根本不应该在乎这些标签,而是直接问自己、它们到底对不对?

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

守口如瓶。笨蛋辩论,你也会变成笨蛋。笑脸相迎。

对策

① 一种方法就是逐步把辩论提升到一个抽象的层次;

② 另一种反击的方法就是使用隐喻(Metaphor);

③ 所有反击方法之中,最好的一种可能就是幽默。

永远质疑

不管问谁,人们都会说同样的话:“我们心态很开放,愿意接受新思想。”但是实际上,人们脑子里有一根界线,早就认准了什么是对的,什么是错的。

如果你想要清晰地思考,就必须远离人群。

良好的坏习惯


Michael Rabin^遇到难题的时候,会把问题重新定义成一个较简单的形式,同时一定会假想一个对手正在与他比赛谁能更快地解决问题。

全身心投入:提高软件可靠性的关键在于开发时全神贯注,而不是降低开发速度。正是因为飞行员全神贯注,他才能在夜间让一架18吨重的飞机以225公里的时速平安降落在航空母舰的甲板上,做得比小孩子切面包还要安全。

目标客户:有钱的客户倾向于更贵的选择,即使便宜的选择更符合他们的需要,他们也不会买。这种现象普遍存在。

为什么不尝试一下?

如果你是一个黑客,并且梦想自己创业,可能会有两件事情令你望而却步,不敢真正开始采取行动。 一件是你不懂得管理企业;另一件是你害怕竞争。可是实际上,这两件事都是没有通电的电篱笆。

首先,管理企业其实很简单,只要记住两点就可以了:做出用户喜欢的产品,保证开支小于收入。只要做到这两点,你就会超过大多数创业公司。随着事业的发展,你自己就能琢磨出来其他的诀窍。

至于如何做出用户喜欢的产品,下面是一些通用规则。从制造简洁的产品开始着手,首先要保证你自己愿意使用。然后,迅速地做出1.0版,并且不断以改进,整个过程中密切倾听用户的反馈。

其次,让我们来看看竞争。

如何创造财富


如果你想致富,应该怎么做?我认为最好的办法就是自己创业,或者加入创业公司。几百年来,这一直是致富的可靠途径。

一个命题

从经济学观点看,你可以把创业想象成一个压缩过程,你的所有工作年份被压缩成了短短几年。你不再是低强度地工作四十年,而是以极限强度工作四年。在高技术领域,这种压缩的回报尤其丰厚,工作效率越高,额外报酬就越高。

如果你全神贯注,每小时的产出可以提高3倍。

许多大公司的内部,平均主义泛滥。如果采用自由市场制度那样的机制,你的公司就可以变成一个很有效率的地方。

这里有一个守恒定律:如果你想赚100万美元,就不得不忍受相当于100万美元的痛苦。

创业公司将你所有的压力压缩到三四年。承受较大的压力通常会为你带来额外的报酬,但是你还是无法逃避基本的守恒定律。

致富的方法有许多种,本文只谈论其中的一种,也就是通过创造有价值的东西在市场上得到回报,从而致富。

金钱不等于财富

创造有价值的东西就是创造财富。

如果你想要创造财富(这里指的是狭义的财富,也就是使你免于饥饿的东西),那么你应该抱着特别怀疑的态度,去思考那些着眼于你自己感兴趣的东西的商业计划。对于自己感兴趣的东西,你会觉得它们很有价值,伹是它们恰恰最不可能与他人眼中有价值的东西发生重合。

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

可测量性和可放大性

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

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

如果你有一个令你感到安全的工作,你是不会致富的,因为没有危险,就几乎等于没有可放大性。

小团体=可测量性

大公司就像巨型的古罗马战舰,一千个划船手共同划桨,推动它前进。但是,两个因素使得它快不起来。一个因素是,每个划船手看不到自己更努力划桨有何不同;另一个因素是,一千人的团队使得任何个人的努力都被大大地平均化了。

乔布斯曾经说过,创业的成败取决于最早加入公司的那十个人。

高科技=可放大性

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

用户数量

大多数时候,促成买方掏钱的最好办法不是让买家看到有获利的可能,而是让他们感到失去机会的恐惧。对于买家来说,最强的收购动机就是看到竞争对手可能收购你。我们发现这会使得CEO们连夜行动。次强的动机则是让他们担心如果现在不买你,你的高速成长将使得未来的收购耗资巨大,甚至你本身可能变成一个他们的竞争对手。

用户数量也许不是最好的测量指标,但应该也相差不远了。买家关心它,收入依赖它,竞争对手恐惧它,记者和潜在用户则是被它打动。无论你的技术水平有多高,用户数量都比你自己的判断更能准确反映哪些问题应该优先解决。

贫富分化


财富的老爹模式

每个人的技能不同,导致收入不同,这才是贫富分化的主要原因,正如逻辑学的“奥卡姆剃刀”原则所说,简单的解释就是最好的解释。

技术的杠杆效应。

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

设计者的品味


优秀设计的原则是许多学科的共同原则,一再反复地出现。

① 好设计是简单的设计

② 好设计是永不过时的设计

③如果一件东西长盛不衰,那么它的吸引力一定来自本身的魅力,而不是来自风潮的影响

④ 好设计是解决主要问题的设计

⑤ 好设计是启发性的设计

⑥ 好设计通常是有点趣味性的设计。这条原则可能不是所有情况下都成立

⑦ 幽默感是强壮的一种表现,始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。所以,强壮的标志(或者至少是特点)就是轻松面对自己的人生。充满自信的人常常像燕子一样,以一种居高临下的姿态轻盈地看待周围的一切

⑧ 好设计是艰苦的设计

⑨ 好设计是看似容易的设计

人们有时会说自己有了“状态”,我的理解是,他们这时可以控制自己的脊髓。脊髓是更本能的反应,面对难题时,它能释放你的直觉。

⑩ 好设计是对称的设计

⑪ 好设计是模仿大自然的设计

不是说模仿大自然这种行为本身有多么好,而是说大自然在长期的演化中已经解决了很多设计问题。

⑫ 好设计是一种再设计

这想法很危险。你应该培养对自己的不满。达·芬奇为了把一根线画对,经常要画五六次。

犯错误是很正常的事情。你不要把犯错看成灾难,要勇于承认、勇于改正。

⑬ 好设计是能够复制的设计

等到你逐渐对一件事产生热情的时候,就不会满足于模仿了。你的品味就进入了第二阶段,开始自觉地进行原创。

⑭ 好设计常常是奇特的设计

唯一达到“奇特”的方法,就是追求做出好作品,完成之后再回过头看。

⑮ 好设计是成批出现的

在历史的任何时刻都有一些热点项目,一些团体在这些项目上做出伟大的成绩。如果你远离这些中心,几乎不可能单靠自己就取得伟大成果。某种程度上,你个人最多可以对趋势产生一定的影响,但是你不可能决定趋势,实际上是趋势决定了你。

⑯ 好设计常常是大胆的设计

优秀作品的秘块就是:非常严格的品味,再加上实现这种品味的能力。

所谓“编译器”,本身就是一个程序,作用是将简便方式书写的程序(就像上面这一行命令)转变为硬件可以理解的语言。

百年后的编程语言


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

一百年后的程序员最需要的编程语言就是可以让你毫不费力地写出程序第一版的编程语言,哪怕它的效率低下得惊人(至少按我们今天的眼光来看是如此)。

不妨把眼光放得远一点,想一想如果时间变量t趋向无限会怎么样。一百年是一个很好的参考指标,如果你觉得某个想法在一百年后仍然可能是难以令人接受,那么也许一千年后它也依然难以令人接受。

秘密武器

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

大公司可以互相模仿,但是创业公司就不行。我觉得很多人没有意识到这一点,尤其是一些创业者。

Blub困境

它没有得到广泛使用的原因就是因为编程语言不仅仅是技术,也是一种习惯性思维,非常难于改变。

如果在开发的程序必须与另一个程序紧密配合,那么可能最好还是使用后者的开发语言。

合气道(Aikido)是一种日本的武术,主要特点是“以柔克刚”、“借劲使力”、“不主动攻击”。

编程语言不一样,与其说它是技术,还不如说是程序员的思考模式。编程语言是技术和宗教的混合物

一个诀窍

所以,我们就有了两点结论,我认为它们非常有价值。事实上,这是我用自己的经历换来的。第一,不同语言的编程能力不一样。第二,大多数经理故意忽视第一点。你把这两点事实结合起来,其实就得到了赚钱的诀窍。

再设计

为了写出优秀软件,你必须同时具备两种互相冲突的信念。一方面,你要像初生牛犊一样,对自己的能力信心万丈;另一方面,你又要像历经沧桑的老人一样,对自己的能力抱着怀疑态度。在你的大脑中,有一个声音说“千难万险只等闲”,还有一个声音却说“早岁哪知世事艰”。

实际上这两种信念并不矛盾。你的乐观主义和怀疑倾向分别针对两个不同的对象。你必须对解决难题的可能性保持乐观,同时对当前解法的合理性保持怀疑。

梦寐以求的编程语言

试着描述黑客心目中梦寐以求的语言来为以上内容做个小结。这种语言干净简练,具有最高层次的抽象和互动性,而且很容易装备,可以只用很少的代码就解决常见的问题。不管是什么程序,你真正要写的代码几乎都与你自己的特定设置有关,其他具有普遍性的问题都有现成的函数库可以调用。

设计与研究


设计与研究的区别看来就在于,前者追求“好”(Good),后者追求“新”(New)。优秀的设计不一定很“新”,但必须是“好”的;优秀的研究不一定很“好”,但必须是“新”的。我认为这两条道路最后会发生交叉:只有应用“新”的创意和理论,才会诞生超越前人的最佳设计;只有解决那些值得解决的难题(也就是“好”的难题),才会诞生最佳研究。所以,最终来说,设计和研究都通向同一个地方,只是前进的路线不同罢了。

如果目标用户群体涵盖了设计师本人,那么最有可能诞生优秀设计。

如果你正在设计某种新东西,就应该尽快拿出原型,听取用户的意见。

士气是设计的关键因素。


版权声明:本文为博主原创文章,转载请注明出处 本文总阅读量    次