上一期荐书时,我说了有一个巧合,本来计划这期揭晓的,但是,现在有了这个插队的黑客,所以那个巧合就顺延到下期了。今期这本书,说起来也有巧合,我刚读完这本书,本计划下期荐书写写,但是,正好Rocky0429同学也在推荐,于是,我决定先推荐它了。
这本书的英文名为《Hackers and Painters》,出版于2004年,跟上期的《The Hitchhiker’s Guide to the Galaxy》一样,出自O’Reilly出版社。中文名《黑客与画家》,出版于2011年4月,二版于2013年。
出版年份有点久了,但是书的内容不仅一点不过时,甚至有些内容太超前了,现在的读者仍不能完全接受。这就是经典书籍的魅力吧,也是我为啥“墙裂推荐”给大家的原因。

作者与译者

作者保罗•格雷厄姆是哈佛大学计算机博士,是个著名的Lisp程序员,他和同伴开发了第一个互联网应用程序Viaweb(1995)。不过在我国,他最为人知的身份是Y Combinator的联合创始人,还因此有着“创业教父”的美称。
Y Combinator成立于2005年,是美国最著名的创业孵化器之一,已经投资超过1000家创业公司,其中的佼佼者有:Dropbox、Airbnb、Stripe 和 Reddit。2018年8月15日,Y Combinator宣布正式进入中国,而担任其中国创始人及首席执行官的正是百度的前明星CEO陆奇。相信不久,国人会看到这家公司给创投界带来的影响。
译者阮一峰是上海财经大学世界经济学博士,曾在上海金融学院执教,现在是支付宝的Node/JavaScript工程师。他是一个互联网老鸟,从2003年开始写“网志”,至今创作了1700+文章,是无数人的互联网启蒙领路人。
阮老师是格雷厄姆的大粉丝,他这样评价自己的偶像:

但是,在我眼里,除了程序员和创业导师,他更像一个思想家。网络技术将如何影响这个世界的未来,没有人说得比他更深刻。说实话,我在网上看了这么多人的文章,在思想方面,他的文章对我影响最大。

这本书评价如何?

阮一峰在译者序里这样推介这本书:

作者最大的目的就是,通过这本书让普通读者理解我们所处的这个计算机时代。…作者试图从许许多多不同的方面解释这个时代的内在脉络,揭示它的发展轨迹,帮助你看清我们现在的位置和将来的方向。…我们的时代是程序员主导的时代,而伟大的程序员就是黑客。本书就是帮助你了解黑客、从而理解这个时代的一把钥匙。

再版序里这样说:

他是怎么做到的,让一本技术类书籍吸引10年后的读者?后来,我总结出两个原因。第一,他写的不是技术,而是技术背后的思想。就像数学一样,正确的思想是不会过时的。第二,他的着眼点是长远的未来。文章内容主要不是分析现状,更不是总结过去,而是展望未来,以未来指导现在。举例来说,第11章《一百年后的编程语言》就是研究一百年后人们会怎么编程,从而推导到我们现在应该如何编程。除了他以外,我没见过其他人有这种视角。

书籍出版以来,一直好评如潮。下面摘录几则豆瓣书评:

单单“书呆子”那篇文章就值得你买下这本书。——@Hammer_

四月份读的最好的一本书是 Paul Graham 的大作 《黑客与画家》(中文版),这是一本能引发技术人思考的佳作,真正意义上的黑客精神、创业(Start-up)、编程语言,是这本技术散文集的三个主题。阮一峰的翻译很到位,很喜欢他的译文。——@Fenng

作者试图回答的问题:如何好奇地探索这个世界,做喜欢的事情,并阳光地获取财富? 作者回答得怎么样:非常棒 评价:创业的书,或讲究细节,比如如何撰写商务计划书;或摆资历,比如我的成功如何复制;或讲大道理,用一个术语串起整本书,你不服还不行,比如长尾比如蓝海比如紫牛;或写小说,比如如何从小秘到跨国公司CEO;或吹牛,比如全中国最穷小伙子如何发财。 有没有一本,心平气和,不讲细节不摆资历不讲大道理不写小说不吹牛的创业书呢? 有,这就是Paul Graham的文集——《黑客与画家》。——@阳志平

我做笔记和划重点的地方大概占到书的30%。每个段落里忽闪忽闪的思维火花,都在告诉我们什么叫「远见卓识」。在被说服后常常惊讶他是怎么想到那个角度和比喻的。不要被书中大量IT案例阻隔,事实上它适合所有人阅读,让你重新思考要过什么样的生活,或如何尽快过上你想有的生活。——@大头绿豆

本来以为是一本编程书,没想到竟然是一本方方面面的哲学书。不要被书名的黑客两字吓到,放下偏见来听一个知识渊博的老牌黑客对教育、社会、公司等不同领域的深入探讨,受益匪浅。当然,对于计算机编程思维与编程语言的哲学也有独到的见解,不明觉厉……——@莱斯基

我读到了什么?

全书15章,可以粗略地划分为三部分。第一部分(1-4),解释黑客是什么、黑客与画家、黑客的成长与世界观;第二部分(5-9),讲到黑客创业、财富观、什么是好设计;第三部分(10-15)是对编程语言的思考。
对某些读者来说,最触动的也许是“黑客”部分、或者是“创业与财富”的话题,而对我而言,最醍醐灌顶的就是讲编程语言的这几章了。比如,上一篇推文《详解Python拼接字符串的七种方式》里,就提到了作者的“预言”:要取消字符串和整数这两种基础的数据类型。
格雷厄姆认为,编程语言就像生物物种一样,存在进化的脉络,有些进化的分支是死胡同。当时,正是JAVA如日中天的时候(现在仍霸占各类榜单首位),他却说了个“未必正确”的猜测:JAVA进化之路已经走到了尽头。
作者最主要的洞见就在于,通过设想100年后的编程语言,来思考今天如何设计、使用编程语言。

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

在作者眼里,某些尽力提升计算机运行效率的行为是过早优化、并不可取,相反地,他提倡要尽力消耗硬件性能。他提倡“好的浪费”,相信未来的硬件基础足够我们浪费。

随着技术的发展,每一代人都在做上一代人觉得很浪费的事情。30年前的人要是看到我们今天如此随意地使用长途电话,一定会感到震惊。100年前的人要是看到一个普通的包裹竟然也能享受一天内从波士顿发件、途经孟菲斯、抵达纽约的待遇,恐怕就要更震惊了。

这种大格局的视野,令我叹服!作者的眼界还不至于此,他说:

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

计算机程序在本质上是一种描述性语言,“以书面形式记录计算机应该如何解决你的问题”。那么,很明显它进化的方向就应该是,用越少、越简单的描述来解决越多、越复杂的问题。
一百年前,打字是一门专业的技能,打字员是一种职业;今天,任何人都可以轻松在移动端打字、甚至语音转文字,人人都是“打字员”。
今天,编程是一门专业的技能,程序员是一种职业,那么一百年后呢,大概率是任何人都可以随时编程、或者只是表达然后由智能AI去完成编程工作,人人都是程序员!
人们常说一个梗——“我有个好点子,就差一个程序员了”。读完这本书,我有一个大胆的猜测,一百年后,这个梗会变成——“我是一个程序员,就差一个好点子了”。

金句摘录

我在阅读时划了很多笔记,随便分享几条给大家感受一下(这是一个技术类公众号,我就放和编程相关的了,其它话题的内容,请你阅读书籍探索):
“计算机程序只是文本而已。你选择什么语言,决定了你能说什么话。编程语言就是程序员的思维方式。因此很自然,编程语言对程序员的思想有巨大的影响。”
“编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。”
“黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性。”
“一种好的编程语言,应该像油画颜料一样,能够使得我们很从容地改变想法。”
“源代码也应该可以自己解释自己。如果我只能让别人记住一句关于编程的名言,那么这句名言就是《计算机程序的结构与解释》一书的卷首语:程序写出来是给人看的,附带能在机器上运行。”
“允许你做某事的语言肯定不差于强迫你做某事的语言。所以,至少在这方面我们可以得到明确的结论:你应该使用允许你面向对象编程的语言。至于你最后到底用不用则是另外一个问题了。”
往期荐书回顾:
第二期:《Python最佳实践指南
相关链接:
阮老师曾经为这本书做了一个专题网页,不过现已无法访问,我收集了几篇文章,方便大家做关联阅读。