马克·吐温曾经说过,经典小说是那种“众人都想读却少有人真正花时间去读”的书籍。“经典”的编程书也是如此。
在Stack Overflow(以及许多其他编程论坛)上,时不时有人讨论“哪些书籍值得程序员一读”。这个问题不断被提出、被回答,形式不尽相同。有这么一组书籍似乎总是跻身榜首,那么就让我们来一探究竟。
- 大多数程序员真正读过的书籍 :
- 1. 《代码大全》(Code Complete)
- 2. 《程序员修炼之道》(The Pragmatic Programmer)
- 3. 《C程序设计语言(第二版)》(C Programming Language (2nd Edition)
- 4. 《重构:改善既有代码的设计》(Refactoring: Improving the Design of Existing Code)
- 5. 《人月神话:软件项目管理之道》(The Mythical Man-Month)
- 6. 《编码:隐匿在计算机软硬件背后的语言》(Code: The Hidden Language of Computer Hardware and Software Head First Design Patterns)
- 7. 《Head First设计模式》(Head First Design Patterns)
- 8. 《编程珠玑》(Programming Pearls)
- 9. 《Effective Java (第二版)》或《Effective C++》
- 10. 《测试驱动开发》(Test Driven Development: By Example)
这些书我都读过,我相信很多水平还不错的程序员也都读过了。如果你对此博客的编程内容有兴趣,那么这份书单里的大部分(如果不是全部)你可能都已经读过了,所以我就不花时间逐个单独探讨了。
我觉得上述每一本都是各自领域的佳作。很多有志于提高个人技能的软件开发人员都会阅读这些书籍。
在最常推荐的编程书籍中,有另一组值得特别关注。我把这书单称为“程序员声称自己读过的书”。我可不是说所有推荐这些书的人都没读过;我只不过是怀疑有很多人声称自己读过而实际上并非如此。以下是书单:
程序员声称自己读过的书
1. 《算法导论》(Introduction to Algorithms)
本书可能是所有已出版的编程书中标题***误导性的一本。它在许多大学中广泛使用,通常出现于研究生水平的算法课程中。因此,在大学修过算法课程的程序员手里可能都有一本《算法导论》。
但是,除非你有计算机科学(特别是在算法方向)硕士学位及其以上的水平,我怀疑你可能就没读几章。这个标题具有误导性,因为“导论”这个词让人误以为这本书对编程初学者比较友好,而事实并非如此。这本书详尽地介绍了算法,就跟市面上其他类似书籍一样。所以还是别推荐给新手了。
2. 《编译原理技术与工具》(龙书) (Compilers: Principles, Techniques, and Tools (the Dragon Book))。
这本书里涵盖了编写编译器时所需要了解的所有内容。其中包括词法分析(lexical analysis),语法分析(syntactic analysis),类型检查(type checking),代码优化(code optimization)和许多其他更高深的主题。
请不要把这本书推荐给新手,他们只需要解析含有数学公式或HTML的简单字符串;
除非你真的需要实现一个有效的编译器(或解释器),否则你没必要承受来自这本书的全部功力。要是有人只是需要做简单的文本解析,你还向人家推荐这本书,那就说明你自己没读过。
3.《计算机程序设计艺术》(The Art of Computer Programming)
我经常听到这本书被列为“每个程序员都应该阅读的”系列编程书籍,但这是在胡说八道。
在被你们拍砖之前,请允许我解释一下。《计算机程序设计艺术》并不适合从头读到尾。这是一本参考大全。
它立在你的书架上,看着就令人印象深刻(事实也的确如此),但是要看完它得花上几年时间,你也记不住什么实质性内容。
这并不是说留一本这样的书毫无价值,这套书多次救我于水火之中,始终是我的杀手锏,真的走投无路了我就去找它。
它的信息密集,学术性强,并且示例都是用汇编语言写的。从积极的方面来说,如果你在这本书里找解决方案(在相应部分已经出版的前提下)却无功而返,那解决方案八成是不存在的。它在所涵盖的主题领域方面几乎面面俱到。
4.《设计模式:可复用的面向对象软件元素》(四人帮)(Design Patterns: Elements of Reusable Object-Oriented Software (Gang of Four))
《设计模式》是这个书单中唯一一本我亲自从头读到尾的,因此我很难决定它该归到哪个列表。它在这个书单上并不是因为我觉得很少有人读过这本书。
许多人读过,只是有更多的人声称自己读过而实际上并没有。《设计模式》的问题在于:书中的大部分信息(但并非所有的信息)可以在其他地方找到。这使得初学者能在维基百科上读了一些模式方面的内容之后,就敢在求职面试中声称他们读过这本书。
如果有更多人花时间阅读这本书的原版,就能少些人试图将17种模式硬塞入日志框架了。书中最精彩的是每章中解释何时适合使用模式的部分,但很遗憾的是,很多其他与设计模式相关的资料中没能体现这种智慧的光芒。
5.《C++程序设计语言》(The C++ Programming Language)
本书更像是一本编程语言参考书而非编程指南。肯定有很多证据表明有人读过这本书,否则我们就不会有这么多的C ++编译器可供选择。但是,我们不应该把这本书介绍给想要学习C ++的初级程序员(甚至其他编程语言的专家),让他们去看《C++ Primer》会比较合适。
正如我之前所说,我知道有一些人真的读过这些书。这篇文章不是针对你的,它针对的是那些谎称读过的吹牛人士。 如果你没读过,就不要推荐给别人, 这只会起到反效果。
通常阅历丰富的人可能会推荐一本更好的书(更专注于特定的问题领域,更容易理解,更适合特定的编程语言或编程技能水平)。除此之外,当你被真的读过《计算机程序设计艺术》的人用MMIX知识难倒的时,你就很尴尬了(如果你不知道我在说什么,那么我就是在说你)。
【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】