哪本书是对程序员最有影响、每个程序员都该阅读的书?

国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响、每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书《Code Complete》被顶了1306次。如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天才,但我相信大多数人都知道,你在学校里根本学不到什么真正的工作中需要的知识,我们毕业后能帮助我们在公司中胜任工作的老师就是这些优秀的书籍,一本好书可以改变一个人的一生。

下面是这个调查中排名靠前的书的一个简单的清单:

  1. 第一名:1306票《Code Complete (2nd Ed) by Steve McConnell》,中文版《代码大全(第二版)》,两届Software Jolt Award震撼大奖得主!
    cover
  2. 第二名:1161票 《The Pragmatic Programmer》,中文版《程序员修炼之道
    The Pragmatic Programmer
  3. 第三名:689票 《Structure and Interpretation of Computer Programs》,中文版《计算机程序的构造和解释》
    Structure and Interpretation of Computer Programs - 2nd Edition (MIT Electrical Engineering and Computer Science)
  4. 第四名:557票 《The C Programming Language》,中文版《C程序设计语言
    The C Programming Language Book
  5. 第五名:472票 《Refactoring: Improving the Design of Existing Code》,中文版《重构:改善既有代码的设计
    Refactoring: Improving the Design of Existing Code
  6. 第六名:472票 《Introduction to algorithms》,中文版《算法导论
    Introduction to algorithms cover image
  7. 第七名:430票 《The Mythical Man-Month》,中文版《人月神话
    The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)
  8. 第八名:426票 《Design Patterns》,中文版《设计模式
  9. 第九名:386票 《The Art of Computer Programming(First Volume Hardcover)》,中文版《计算机程序设计艺术第 (第一卷)
    http://www.aqee.net/wordpress/wp-content/uploads/2011/03/75dd9_programming_41T1XCAEE1L.jpg
  10. 第10名:353票 《Compilers: Principles, Techniques, and Tools 》,中文版《编译原理
    Compilers: Principles, Techniques, and Tools (2nd Edition)
  11. 第11名:329票 《Head-First Design Patterns》,中文版《Head First 设计模式

当然了,这里的排名并不具有什么权威性,但绝对可以说都是好书,这11本外还有很多书虽然票数不是那么多,但大家估计都耳熟能详,比如《Effective C++》(中文版《Effective C++:改善程序与设计的55个具体做法》),《Clean Code》(中文版《代码整洁之道》),《Effective Java》(中文版《Effective Java中文版(第2版)》等 。

记得有位先哲曾说过:一种编程语言的重要性并不在于语言本身,而是在于这种语言来体现出来的编程思维模式。所以说,并不是你用到的书才去读,读书是一种习惯。

[英文原文:What is the single most influential book every programmer should read? ]
分享这篇文章:

63 Responses to 哪本书是对程序员最有影响、每个程序员都该阅读的书?

  1. zoujia says:

    “读书是一种习惯”!找时间好好读读这些书籍\(^o^)/~

  2. Weibin Yao says:

    惭愧,排名第一的没有看过,先去下个电子版来看看。

  3. LiaWind says:

    说说我看过的几本吧:
    3. SICP,觉得是本比较难定位的书。当初是找lamba演算的资料时找到的。我的感觉主要讲了三个部分:程序的构造(以LISP为例)、lamba演算、LISP解释器及变种。关于程序构造的部分在其他书中没看到过,但若单独取出来讲应该没多少内容;同样关于lamba演算的部分也不多(网上找的专门讲lambda演算的讲义一般也不长);最多的就是解释器的部分。感觉对比较有经验的程序员,内容有些冗长;而如评论中所说作为程序设计的引导课程(the introductory programming course),它恐怕又难了些(或许对于MIT的学生不难):因为它主要不是教“怎么”去写程序的。
    4. 其实没看过,不过评论中有一句话很有趣:“If you invent a new language and the manual is longer than K+R, you have done something wrong.” 话说C++肯定符合这个条件啊 🙂
    5. 这是本需要和实践相结合的书。其实这个列表中有好几本都有这个特点,比如《Code Complete》的评论里就有“for a beginner, it doesn’t really make sense as the concepts are a little advanced. By the time you are ready to be able to read it, you should already know and practice 99% of the concepts in the book.”,以及对《Design Patterns》的评论:“This book is for people who’ve already made factories and singletons and visitors and never knew what to call them.”这些书看过后,可以了解一些概念,但或许只有实际遇到问题、解决过问题之后,才能真正的理解这些概念。

    (待续)

    • admin says:

      待续?不会是都看了?或是都将看??强

    • LiaWind says:

      今天没什么事,补全吧 🙂

      6. 上学时的课本,经典书。但是为毛学期结束后只记得NP之类懂也不懂的概念?循环不变量、复杂度分析之类的虽然会用,但完全不记得上课时讲过?
      7. 看过,讲管理的,印象不深。
      8. 见我对第5本的看法。另外补充一点我的前leader对此书的评价:“整本设计模式就讲了一个问题:那就是依赖。”
      9. 无缘拜读。当年看了看目录,见主要是讲算法的,就觉得不够“艺术”。诚然“程序=数据结构+算法”,但是“开发软件≠写程序”。无论如何,算法是基石。
      10. 幸好去看了原文,我还奇怪入围的编译书怎么会不是大名鼎鼎的“红龙书”呢:)也是上学时的课本,都学会了你就可以自己写编译器了——课程的大作业就是这个!不过个人觉得,除非是要写编译器,否则不一定要学编译原理。当然学了编译原理可以对程序设计有更深入的理解,但其实多数时候只需要知道一段代码编出来是“什么样”的以及“为什么”是这样,而不需要知道编译器是“怎么”生成这段代码的。编译原理关注的是后者,前者的话,可以学习一些程序设计语言原理。
      不过话说回来,我看过的最好的程序设计语言原理的书是连着编译一块讲的(《程序设计语言:实践之路》),而随着DSL的发展,需要写编译器的程序员恐怕也会增多。
      12. 终于到这本了!原文排名第12,恰好被博主排除在外——再次庆幸去看了原文。
      哥德尔·艾舍尔·巴赫——集异璧之大成
      最初还是中学的时候,去外地参加比赛,队友从旧书摊上淘了本此书的缩译本,翻阅之下爱不释手。后来在各大书店却遍寻不着。进了大学,在学校图书馆见到全本时,可想而知我有多高兴了。
      不过要我评论,也只说得出“这是本奇书”了。当初看时有些囫囵吞枣,只记得结构之精妙了。
      看到此文后又去当当查过,才发现此书在10年8月重印了。但是坑爹的商务印书馆,你这次是不是又只印了几千册!居然又脱销了 T_T 淘宝上都卖到85了,还不知道是不是正版!

      PS:12本书我只看过7本,3本没写,另两本是一些联想到的感想。

  4. iGooodman says:

    4,11这两本我有.

  5. nothing@null.com says:

    看排名可以想像得出投票人的构成

  6. 阿蒙 says:

    《颈椎病康复指南》

  7. Hugo says:

    很惭愧, 都没看过

  8. zxding says:

    正在阅读《代码大全》

  9. cinque says:

    推荐programming pearl和concrete mathematics. CLRS其实没有那么经典了, 不过比较新比较全讲的很具体, The Design and Analysis of Computer Algorithms是值得一读的好书, 就是老了点

  10. 大部分的书都有,但是没有仔细看过,惭愧呀!

  11. jaco says:

    惭愧,一本都没有看,觉得开发软件如果是一般系统,对算法没有太大的要求,毕竟一个好的架构比一个好的算法重要,但是好的算法对局部功能的效率提高还是有帮助的,最终本人还是比较崇尚好的系统架构

  12. randomblbl says:

    以后少看没用的新闻,多看书。

  13. CC霜 says:

    都不是基础的书

  14. haiyang says:

    看过1,2,4。 都是好书,保存下来。

  15. Lazymonkey says:

    除了《The C Programming Language》是纸质书,其他都是电子书。。。惭愧啊!

  16. 静水 says:

    The Mythical Man-Month,人月神话,看过感觉真的不一样,强烈推荐

  17. qianfahui says:

    不上QQ啦,多吃吃书

  18. Wendy says:

    绝对同意!!!

  19. 杨军 says:

    基本没读过,不过倒是挺有兴趣的,有时间读读。

  20. Leo says:

    惭愧惭愧,到底是读中文版还是英文版呢?

  21. Sweet says:

    工作之前,买过一些技术方面的书,比如Thinking in Java之类的,不过发现看这些书没有在实际编码中用Google学起来快。
    工作了几年后,就只买了三本,放在床头,代码大全第二版,算法导论,浪潮之巅。

    • Ralph says:

      边写边学是必须的,不过这样学会有一些方面没涉及到。所以写了一些代码之后回去读一下书,会有更全面的了解。

  22. vincent says:

    遗憾,都没看过,先买第一个瞧瞧。

  23. 聂华明 says:

    中文书箱链接点击无效

  24. vingstar says:

    在看《代码大全》,感觉还不错,但稍微有点老了,真如作者给出的不会再出第三版的原因一样,现在书中的好多知识都已经是常识了,这算是基础教育的小小进步吧。当然这书还是很好的,仍然有价值。

  25. blanke says:

    建议 java 程序员可以看看《重构:改善既有代码的设计》,里面的各种模式,语法都是以java 写的。

  26. 徐彬 says:

    我也来推荐一本,《颈椎病的预防与治疗》

  27. SSY says:

    知道这份榜单为什么不权威吗?
    因为没有<>

  28. 算法 says:

    +1 for code complete

  29. 请叫我eleven says:

    这里提到的每一本书我全都读过,除了kunth的taocp vol 1 没读完,太费劲了。当时为了读这本书还特地看了 concreate mathmatics。得花很多时间再上面, 真心想说能读完并完成里面的一些推荐的习题是相当了不起的。 说说别的书,因为这个书单很久以前就看到过,非常的庆幸。所以读研究生的三年期间把这些书全部都读了,而且很多书 比如 code complete,refactor读了很多遍。 第一次读印象不深,特别是在实习过程中,可以把里面的很多观点进行实践。收获非常棒。《人月神话》从第一版到现在30几年了,里面的很多观点到现在还是通用的,这是本可怕的书。其实中国的程序员很多人忽略了编译这方面的知识。比如大学的时候编译这门课学的应该都不怎么样(绝大多数)。其实,编译这东西真的很重要,当你懂了编译之后,学习任何一门编程语言好轻松啊。所以,龙书,sicp有时间,特别是在校的学生还是建议好好的啃,如果这两本能啃下来,真心厉害,sicp记得做习题~。关于gof的design pattern,太抽象了,不过等看完了别的设计模式的书回来之后才发现,这书还是很牛逼的!head first 设计模式非常棒的书,没有曲解设计模式,不像中国人写的一些书,追求所谓的趣味性掩盖掉了模式的本来面目。其实还有一本书,unix编程艺术,非常棒。。。改天再写。关于算法的书,clrs是我们算法课的教材,刚开始真的读不懂,等看完 robert sedgewick的algorithm(红皮的),红黑树我是看这本书才理解的。和 《算法引论:一种。。。》归纳法是看这本书才算会灵活的运用。《算法概论》动态规划是这本书才让我学会的。回头来看clrs,果然牛逼!看懂了才好。。。

  30. mlroom says:

    第一名不应该是《代码大全(第二版)》,无论是深度还是广度都比不了之后几本。

  31. 石文靖 对这篇文章的反应是俺的神呀
  32. Wind Frank  这篇文章
  33. code枫  这篇文章
  34. lp5800n95 对这篇文章的反应是俺的神呀
  35. 李北龙  这篇文章
  36. Aiden  这篇文章
  37. oscar 对这篇文章的反应是赞一个
  38. xiaofeixia  这篇文章, 并对这篇文章的反应是赞一个
  39. L-Dragonborn  这篇文章
  40. 惠雪龙  这篇文章
  41. lu 对这篇文章的反应是敬佩
  42. keethebest says:

    代码大全没看完 有时间去补补。。。。

  43. keethebest  这篇文章
  44. One Meal /*Nan*/  这篇文章, 并对这篇文章的反应是赞一个俺的神呀
  45. 一点爱的寂寞 对这篇文章的反应是俺的神呀
  46. 一点爱的寂寞  这篇文章
  47. birg  这篇文章, 并对这篇文章的反应是俺的神呀赞一个
  48. wei says:

    读过 1,2,5,6,8,11。3读了一半。

    2. 《程序员修炼之道》,这本书名气很大,内容却很一般,里面没多少代码,大部分都是心灵鸡汤之类的寓言故事,要讲的东西和代码大全重叠,算是于丹版代码大全吧。看过代码大全的完全没必要读这本书。

    3. 《计算机程序的构造和解释》,这本书写的非常晦涩,而且MIT早就停了这门课,改成python了。

  49. 胡智超  这篇文章, 并对这篇文章的反应是赞一个

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据