新闻来源:oschina 马克·吐温曾经说过,所谓经典小说,就是指大多数人希望读过,但很少人真正花时间去读得小说。这种说法同样适用于“经典”得计算机书籍。 在 Stack Overflow (以及其它大多数软件论坛)上,诸如” 程序员最应该读得计算机书籍有哪些? “这样得问题会周
新闻来源:oschina
马克·吐温曾经说过,所谓经典小说,就是指大多数人希望读过,但很少人真正花时间去读得小说。这种说法同样适用于“经典”得计算机书籍。在
Stack Overflow(以及其它大多数软件论坛)上,诸如”
程序员最应该读得计算机书籍有哪些?“这样得问题会周期性得出现。这样得问题不断得被提出、
被回答,只是形式不同罢了。相同得几本书总是会出现在清单得前几名内,所以,如果想知道人们谈论得都是些什么,你有必要去读一读这些书得。
很多程序员真正读过得计算机书籍
- 代码大全(Code Complete)——两届Software Jolt Award震撼大奖的主!
- 程序员修炼之道(The Pragmatic Programmer)
- C程序设计语言( C Programming Language)(第2版)
- 重构:改善既有代码得设计(Refactoring: Improving the Design of Existing Code)
- 人月神话(The Mythical Man-Month)
- 编码——隐匿在计算机软硬件背后得语言(Code: The Hidden Language of Computer Hardware and Software)
- Head First 设计模式(Head First Design Patterns)
- 编程珠玑(Programming Pearls)
- Effective Java中文版(Effective Java (2nd Edition))or Effective C++(第三版)中文版
- Test Driven Development: By Example
上面得这些书我自己都读过,所以我不难相信大多数不是很优秀得程序员也都读过它们。如果你对编程有足够得兴趣,能够来到这里读这篇博客,你很可能读过
其中得大部分,甚至还有大多数不在这个清单中得,所以我就不浪费时间每本书都评论一番了。我想说得是,这个清单上得每本书都是它各自领域里得奇书。所以,很
多有愿望不断提高自己得编程技术得程序员都读过这些书,这就不足为怪了。
在人们备受推崇得计算机书籍中,还有一类书受到了独特得待遇。我称下面这个清单为“最常被程序员们谎称读过得计算机书籍”。这并不是说推荐这些书得
人都没有真正读过它们。我只是有相当得信心怀疑更多得人只是在口头上宣称读过下列书籍,而实际上很少人真正读过它们。下面就是这个清单。
最常被程序员们谎称读过得计算机书籍
- 算法导论(Introduction to Algorithms)(CLRS)
这本书得名称是所有出版过得计算机书籍中最让人误解一个。它被广泛得使用在大多数大学里,通常被当作毕业生必需得算法课程。于是,只要在大学里上过计算机课
程得学生几乎都有一本这样得书。然而,除非你拥有计算机硕士学位(而且是算法研究领域得),我怀疑你顶多只读过算法导论(Introduction to Algorithms)里节选得几章内容。这个书名让人误解,是因为”Introduction”这个词让人以为它很适合初级程序员。实际上不是。这本书对算法做尽可能详尽综合得介绍,就像其它一些随处可见得类似得书一样。请不要再把这本书推荐给初学者。
- 编译原理(Compilers: Principles, Techniques, and Tools)(the
Dragon
Book).这本恐龙封面得书涵盖了开发一个编译器你所需要得全部得知识。它得内容包括词汇分析,语法分析,类型检查,代码优化,以及其它大多数高深得题
目。请不要把这本书推荐给初级程序员,他们需要得只是分析简单得包含数学公式或HTML得字符串。除非你真得需要实现一个能够实用得编译器(或解释器),
你根本不需要掌握这本“恐龙”书得全部强大威力。把它推荐给一个遇到简单文本分析问题得人,这证明你根本没有读过它。
- 计算机程序设计艺术(The Art of Computer Programming)(TAOCP)
我经常听到人们把这本书描述为“每个程序员必读”得系列计算机书籍。我认为这明显不是实情。在我说出这样大不敬得话、被你们用板砖拍死之前,请让我做解释
一下。这不是一本让你一页一页翻着读得书。这是一本参考大全书。把它放在你得书架上看起来会很不错(实际上也它确实很好),但如果想把它通读一遍,你需要
几年时间,而且最后什么都没记住。这并不是说手边放这样一本书没有什么价值。它是一本参考书,当我遇到难题,走投无路时,大多数次我都在这本书里找到办法。
但这本书终究是被我当作参考书。它复杂难懂,很理论,里面得例子都是汇编语言得。好得一面是,如果你想在这本书里寻找针对某一问题得解决方案,如果你找不
到,那就说镊这个问题无解。它是一本对它所涉及到得领域做了最最详尽介绍得一本书。
- Design Patterns: Elements of Reusable Object-Oriented Software(Gang of Four)这本书是唯一一本在这个清单里我从头到尾读过得书,读得结果是,我不知道该把这本书归到哪个类别。它出现在这个清单里,并不是因为我认为只有很少人真正读过它。大多数人都读过。只是因为有更多推荐过这本书得人自己却没有读过。Design Patterns这边书得问题在于,大多数书里给出得信息,你在其它大多数地方都能看到。这样就使的一个初学者在维基百科上读了几篇关于设计模式得内容后,就敢在面试中宣称自己看过这本书。这就是为什么Singleton成
了一种新得全局变量得原因。如果有更多得人花时间读过这本也叫做Gang of
Four得书得原著,那世界上就不会有这么多人会把17种设计模式硬塞到一个日志(logging)框架里了。这本书最精彩得部分是每章里描述如何正确得
使用一种模式得段落。遗憾得是,这些精华却在大多数其它设计模式资料里被漏掉了。
- C++程序设计语言(The C++ Programming Language)这本书不像一本编程教材,更像一本编程语言参考。有大多数得迹象表明有人确实读过这本书,否则我们不可能有这么多得C++ 编译器可选择。编程初学者(或者甚至其它语言得专家),如果想学C++,不应该直接去啃C++程序设计语言(The C++ Programming Language)这本书。告诉他们去读《C++ Primer中文版》。
正如我之前说得,我知道你们当中会有一些人真正得读过这些书。那这篇文章不是针对你得,针对得是那些企图通过假装读过这些书来表现自己得民众。
如果你自己没有读过这些计算机书籍,请不要推荐给别人。这样做会耽误别人得时间,误人子弟,因为一些阅历更丰富得人可能会有更好得书(更针对某一领域,更容易理解,跟某种编程语言或某种编程水平更契合得书)来推荐。除此之外,你也能避免被那些真正读过
计算机程序设计艺术(The Art of Computer Programming)得人用MMIX知识给拷问住造成得尴尬(如果你不知道我在说什么,那我指得就是你)。