马克·吐温曾经说过,经典小说是那种“众人都想读却少有人真正花时间去读”的书籍。“经典”的编程书也是如此。

在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知识难倒的时,你就很尴尬了(如果你不知道我在说什么,那么我就是在说你)。

没有读过的书,就不要瞎推荐了!相关推荐

  1. 大叔手记(17):大叔2011年读过的书及2012年即将要读的书

    前言 2011年是大叔最累的一年(基本上都是晚上12点以后睡觉,早上6点30分起),读得书也是异常的多,一方面要保持自己的技术在最前列,另外方面技术管理和项目管理方面的东西也要进一步进阶,2011年读 ...

  2. 读再多书都没觉得自己变强?试试我这“5年陈”的方法

    这里是Z哥的个人公众号 每周五早8点 按时送达 当然了,也会时不时加个餐- 我的第「76」篇原创敬上 4800字巨献奉上 hi,大家好.三周过去了,上次教你的几个「速读」技巧练习的怎么样了? 上周,已 ...

  3. capslock键英语怎么读_刚开始读英文原版书该怎么做?商务英语专业有前途吗?...

      是的,看我的朋友圈也能学英文#26从最近的朋友圈和微博中选了一些内容,分享给大家.1. 如何开始读英文原版书?关于读英文原版书,我给出一个简单粗暴的开始和进阶方案.启动方案:首先找一本你特别感兴趣 ...

  4. 未来两年我们即将要读的Python书!

    学好Python,能让你成为一个更好的程序员.那么我们为什么要学Python呢? 跟C/C++/Java相比: Python能让你用少的多的多的代码写出相同的程序. 跟VB/PHP比较:跟PHP/VB ...

  5. 读遍装修书,我们帮你选出了最有用的10本

    4月23日是世界读书日,前几天我们在好好住APP发起了一个话题「推荐一本你最喜欢的家居类图书」,想知道大家到底是看了哪些书,才能把家布置得这么好看.住友们列出了一长串书单,还分享了许多自己的读书心得. ...

  6. 程序员 你读过的书,藏着自己的命运 | 技术类(一)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 分享一位老师的人工智能教程.零基础!通俗易懂!风趣幽默! 大家可以看看是否对自己有帮助,点击这里查看[人工智能教程].接下 ...

  7. 获奖公布|@程序员,你读过的书,藏着自己的命运

    高尔基说,书籍是人类进步的阶梯:莎士比亚说,书籍是人类知识的总统:列夫·托尔斯泰说,理想的书籍是智慧的钥匙-- 4月读书节,有没有哪一本书让你终身难忘,有没有哪一本书让你想起,都会发出:哎呀,再翻一遍 ...

  8. 一个合格程序员应该读过的书

    很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同 ...

  9. 的确,你读过的书藏着自己的命运

    又是平凡的一天,一天的工作结束,习惯的打开了CSDN闲逛.一个推送映入眼帘,"征文|@程序员,你读过的书,藏着自己的命运".看着这个主题,莫名有些感慨. em...看了看下边的奖品 ...

最新文章

  1. 人才管理是什么意思_你还不懂人才梯队建设,哪有机会升职加薪?
  2. C# 中的常用正则表达式总结
  3. 子屏幕selection-screen
  4. [转载]C#中各种计时器
  5. matlab cdf,Matlab 简单计算PDF和CDF | 学步园
  6. 一些很有意思的JS现象
  7. ShadeGraph教程之节点详解2:Channel Nodes
  8. 什么叫做项目孵化_什么叫创业孵化服务?
  9. linux_network
  10. weblogic 12c 安装与下载
  11. 推荐几款php探针,PHP探针推荐:检测服务器环境好帮手
  12. Mysql 常用函数(30)- month 函数
  13. uniapp实现设备对接wifi功能
  14. 全连接网络实现Fashion数据集学习/预测
  15. 【我的世界原理分析】1.光照原理
  16. 腾讯音乐、网易云音乐殊途同归?
  17. 03-元素定位-基本
  18. python perl lisp_巴别塔-编程语言之旅【转】——C、C++、Lisp、Java、Perl、Ruby、Python核心比较...
  19. 世纪互联与华为联手打造云数据中心是一步好旗!
  20. 杂项-Grunt:grunt build 打包和常见错误

热门文章

  1. 常用sql-----DDL语句
  2. DG备库磁盘空间满导致无法创建归档
  3. 9.java.lang.ClassCastException
  4. 扩展方法where方法查询不到数据,不会抛异常,也不是返回的null
  5. 路由器简介与IOS介绍
  6. 菜鸟学习笔记2,$(document).ready()使用讨论
  7. Java使用PDFBox开发包实现对PDF文档内容编辑与保存
  8. 【深度学习】我的第一个基于TensorFlow的卷积神经网络
  9. OpenCV中6种访问Mat元素的方法
  10. 明明白白你的Linux服务器——日志篇