Seibel:有什么书是所有程序员都应该看看的?
Bloch:《设计模式》无疑是一本,虽然我对它的感情有点复杂,但是我还是认为每个人都应该读一下。书中列出了通用的词汇,也提出了很多好的创意。另一方面,这本书有点儿像方法和语言的大杂烩,内容也有些过时了。但是我认为它绝对值得一读。
另外一本书是《Elements of Style》,它甚至不是一本编程书。为什么要看这本书呢?理由有两条。首先,每个软件工程师工作中很大一部分是写文档。如果你无法写出精确、统一、易读的说明书,那么没人会去用你的产品。所以说可以改善你写作风格的东西都值得借鉴。其次,该书里面的大部分思想都适用于编程。
我的荒岛列表有点古怪。例如,最重要的书是Herry Warren写的《高效程序的奥秘》(Hacker’s Delight)。
Seibel:这是一本位操作(bit-twiddling)书?
Bloch:是的。我爱位操作,这跟我的工作有关联。如果你写库、编译器、底层图形代码或者加密代码,这本书是不可或缺的。Warren把曾经口口相传的东西放在一起,用严谨的数学去进行验证。这本书出版的时候,我被震惊了。
当然还有Knuth的《计算机程序设计艺术》。事实上,我从来没有读完这一套书,至少没有从头到尾看过。但当我研究某个具体算法的时候,我就去看他会怎么说。往往可以得到我想要的东西,这套书太全面了。
但是我没有能力、也没有时间去读完整套书,所以如果我告诉你我读完了,那么我就是在说谎。我觉得还有一本非常好的老书,是Kernighan和Plauger写的The Elements of Programming Style。书里面的例子都是用Fortran IV和PL/I写的,所以有点过时。不过,虽然这本书这么老,但里面的思想却从未过时。
另外一本老书是Frederick Brooks的《人月神话》。这本书都出版40年了,里面的思想仍旧同出版时一样有影响力。阅读它是一种快乐,每个人都应该读一下。这本书的主要信息是“给一个延期的项目加人,会让它延期得更加厉害”,今天这一点仍旧是正确的。里面还有其他很多重要的观点。有些细节虽然过时了,但仍值得一读。
现在每个人都必须要学习并发编程。所以应该看看《Java并发编程实践》这本书。虽然标题中有Java,但是很多内容并不限于任何具体的编程语言。
Seibel:这就是你和Brian Goetz合著的那本书?
Bloch:我的名字是印在封面上的,但是我提到它的原因恰恰是因为这不是我写的书。第一作者是Brian,第二作者是Tim Peierls,制定Java并发标准JSR-166的每一个人也都是这本书的作者。把我的名字印在了封面上仅仅是出于礼貌,我贡献了些材料,但是没有正式参与编写此书。
噢,还有一本:《韦氏学院词典(第11版)》。我去哪里都带着它。这倒不是你实际上要读的东西,但是我说过,写程序的时候,必须能命名好变量。你的文笔必须好。没有好的字典,我就会觉得少了点儿什么。