原文:Books Programmers Don’t Really Read
作者:billthelizard 翻译:赖信涛 责编:仲培艺
马克吐温说过,经典的小说就是大多数人都想读,但是很少有人花时间去读的小说。对于编程类的书来说,差不多也是这样。
在StackOverflow以及其它一些编程论坛上,经常会有人问有哪些适合程序员的书。同样的问题经常会多次被人用不同的方式提出来。相同的书总是居于榜首,不如花些时间来看看大家一般都推荐什么书。
大多数程序员都会去读的书
- Code Complete(代码大全)
- The Pragmatic Programmer
- C Programming Language (2nd Edition)(C编程语言)
- Refactoring: Improving the Design of Existing Code(重构,改善既有代码的设计)
- The Mythical Man-Month(人月神话)
- Code: The Hidden Language of Computer Hardware and Software
- Head First Design Patterns(深入浅出设计模式)
- Programming Pearls(编程珠玑)
- Effective Java (2nd Edition) or Effective C++
- Test Driven Development: By Example
我自己已经读过了上面所有的书,所以我非常相信,很多中级程序员也都读过了。如果你对编程有兴趣,并且在读这篇博客,那么我相信这些书你也都已经读过了。我不会仔细地去解释上面的每一本,但是我想说,这些书都聚焦于某一个方面,并且是这个领域的佼佼者。出版者很清楚他们面向的读者——那些想要提高自身技能的程序员。
除了上面的这些之外,还有一些编程类的书是被反复推荐的,但是却很少有人花时间去读。我称这些书为“程序员们的读书计划”。我并不是说,推荐这些书的人都没有读过,我只是想说,表达出想读的意愿的人绝对要比真正读过的人多。
程序员们的读书计划
Introduction to Algorithms (CLRS,算法导论)
这本书的标题可能是有史以来最具有误导性的。此书被广泛地用于大学作为教材,以及本科生等级的算法课程。所以,几乎所有上过算法课的程序员都会有一本CLRS。然而,除非你是一个计算机科学专业的研究生(还得是算法领域的),我很怀疑你是不是读过了其中三个章节。
我说标题具有误导性是因为,“导论”一词让很多人相信,这本书是为初学者准备的。然而,并不是。这本书是对算法非常深入的书,请不要再推荐给初学者了。
Compilers: Principles, Techniques, and Tools (the Dragon Book,编译原理)
龙书涵盖了编译器的各个方面,包括词法分析、语法分析、类型检查、代码优化以及很多高级话题。请不要给只要处理一个包含了简单数学公式的字符串的初学者推荐这本书了。除非你真的需要实现一个编译器(或解释器),不然你可能并不需要神龙的力量。给想要做文本处理的人推荐这本书只能证明你根本没读过。
The Art of Computer Programming(TAOCP,计算机程序设计艺术)
我经常听人推荐说这本书是“程序员必读书目”。我认为这并不合适。在把我拉上绞刑架之前,请容我辩解。计算机程序设计艺术不是一本适合从头读到尾的书,而适合作为参考查阅。将它摆在自己的书架上,看起来会赏心悦目,但实际上你阅读它的频率会很低,通常会花很多年才读完。
但是,手头有一本TAOCP作为参考查阅的工具书还是不错的,我就有一本。当我没有头绪的时候,就会求救于TAOCP,它总是能带给我灵感。但是,一般我都将它作为最后的救命稻草,因为它晦涩难懂,非常学术,而且例子都是用汇编语言写的。从积极的方面讲,如果你想找一个问题的解决方案,但是在TAOCP中找不到(仅限于已经发布的章节),那么所谓的“解决方案”多半是不存在了。此书在所谈论的领域涉及的内容非常全面。
Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four,设计模式:可复用面向对象软件的基础)
《设计模式》这本书是这个列表里唯一我从头读到尾的书,所以把这本书放在哪个列表里,我纠结了很久。最后出现在这里,并不是说这本书很少有人读,我相信很多程序员读过,只是我相信,心里一直打算读的人肯定比真正读过的人要多得多。
这本书的主要问题是,它所谈论的问题基本上都很常见。初学者从维基百科上能轻松读到这本书的很多部分,然后就可以在面试中说他们读过这本书了。这就是为什么单例设计模式几乎成了全局变量。如果大家都去读Gang of Four原版,那么就不会有人再把所有17种设计模式塞到一个框架里。Gang of Four最好的部分是每一章节的最后,都会有一个扩充小结,总结使用此设计模式最恰当的地方。可惜的是,很多别的地方看到的有关设计模式的资源都将这部分遗漏了。
这本书是一本编程语言的参考手册,而不是新手的入门书。虽然有大量的证据可以表明,的确不少人读完了这本书——不然的话,今天我们就不会有这么多C++的编译器可供选择。
初学者(或者精通其他编程语言的专家)如果想要学习C++,不要直接读The C++ Programming Language,推荐他们读C++ Primer。