每个程序员都应该阅读哪本最有影响力的书?

1436

如果你可以回到过去,告诉自己在作为开发人员的职业生涯初期阅读某一本特定的书,那会是哪一本书呢?

我希望这个列表能够涵盖各种各样的内容。

搜索:使用右上角的搜索框。要搜索当前问题的答案,请使用inquestion:this。例如:

inquestion:this "Code Complete"

8
浏览这个帖子让我意识到大多数与编程有关的书籍是多么丑陋。不过,这个帖子很好! - Carl Bergquist
23
虽然标题写着“每个程序员都应该读哪本最有影响力的书?”,但是推荐的书籍中有很多涉及特定编程语言的主题。根据定义和问题的设置,这里建议的书籍应该涉及语言无关的主题,由此证明大多数程序员还没有学会如何阅读。 - Rook
19
如果我能回到过去,告诉自己读点什么,那最好是带在身边的报纸或者体育事实书。其他的都浪费了这个好好利用时光旅行的机会。 :-) - jmucchiello
32
要是我不担心会被大量踩,我就要恶意地建议《暮光之城》了。 “它也是关于皮肤苍白、避免阳光的人!” - Jacob Bellamy
3
有人可以通过删除重复条目来清理书籍答案吗?其中大部分已经被投下反对票。 - rao
显示剩余23条评论
214个回答

1743
  • 代码大全(第二版)作者:Steve McConnell
  • 程序员修炼之道
  • 计算机程序的构造和解释
  • C 程序设计语言 作者:Kernighan 和 Ritchie
  • 算法导论 作者:Cormen, Leiserson, Rivest & Stein
  • 设计模式 四人帮原著
  • 重构: 改善既有代码的设计
  • 人月神话
  • 计算机程序设计艺术 作者:Donald Knuth
  • 编译原理 作者:Alfred V. Aho、Ravi Sethi 和 Jeffrey D. Ullman
  • 哥德尔、艾舍尔、巴赫——集异壤者的奇幻漂流 作者:Douglas Hofstadter
  • 代码整洁之道 作者:Robert C. Martin
  • Effective C++
  • More Effective C++
  • 编码——隐藏在计算机软硬件背后的语言 作者:Charles Petzold
  • 编程珠玑 作者:Jon Bentley
  • 修改代码的艺术 作者:Michael C. Feathers
  • 人件 作者:Demarco 和 Lister
  • 编程人生 作者:Peter Seibel
  • 费恩曼物语
  • Effective Java(第二版)
  • 企业应用架构模式 作者:Martin Fowler
  • The Little Schemer
  • The Seasoned Schemer
  • 为什么(幽默)Ruby指南
  • 疯狂软件开发:软件开发者如何“改”世界
  • Unix编程艺术
  • 测试驱动开发:实例与范例 by Kent Beck
  • 敏捷开发者的实践
  • 不让我思考
  • 敏捷软件开发:原则、模式和实践 by Robert C. Martin
  • 领域驱动设计 by Eric Evans
  • 日常物品的设计 by Donald Norman
  • C++现代设计 by Andrei Alexandrescu
  • 最佳软件写作I by Joel Spolsky
  • 程序设计实践 by Kernighan and Pike
  • 务实的思考与学习:重构您的“湿件” by Andy Hunt
  • 软件估算:神秘的黑科技 by Steve McConnel
  • 充满激情的程序员(我的工作被印度取代) by Chad Fowler
  • 黑客:计算机革命的英雄们
  • 算法与数据结构 = 程序
  • 编写可靠代码
  • JavaScript精粹
  • 实现真实 by 37 Signals
  • 编程基础 by Karl Seguin
  • C语言计算机图形学原理与实践(第2版)
  • Java编程思想 by Bruce Eckel
  • 计算系统的基石
  • 重构到模式 by Joshua Kerievsky
  • 现代操作系统 by Andrew S. Tanenbaum
  • 注释图灵
  • 让我们变聪明的东西 by Donald Norman
  • 建筑的永恒方式 by Christopher Alexander
  • The Deadline: A Novel About Project Management by Tom DeMarco
  • 《Deadline:关于项目管理的小说》Tom DeMarco 著
  • The C++ Programming Language (3rd edition) by Stroustrup
  • 《C++程序设计语言(第三版)》Stroustrup 著
  • Patterns of Enterprise Application Architecture
  • 《企业应用体系结构模式》
  • Computer Systems - A Programmer's Perspective
  • 《深入理解计算机系统》
  • Agile Principles, Patterns, and Practices in C# by Robert C. Martin
  • 《敏捷原则、模式与实践(使用C#)》Robert C. Martin 著
  • Growing Object-Oriented Software, Guided by Tests
  • 《通过测试驱动的对象设计》
  • Framework Design Guidelines by Brad Abrams
  • 《框架设计指南》Brad Abrams 著
  • Object Thinking by Dr. David West
  • 《对象思考》Dr. David West 著
  • Advanced Programming in the UNIX Environment by W. Richard Stevens
  • 《UNIX环境高级编程》W. Richard Stevens 著
  • Hackers and Painters: Big Ideas from the Computer Age
  • 《黑客与画家:计算机时代的伟大创意》
  • The Soul of a New Machine by Tracy Kidder
  • 《新机器的灵魂》Tracy Kidder 著
  • CLR via C# by Jeffrey Richter
  • 《CLR via C#》Jeffrey Richter 著
  • The Timeless Way of Building by Christopher Alexander
  • 《永恒的建筑之路》Christopher Alexander 著
  • Design Patterns in C# by Steve Metsker
  • 《C#设计模式》Steve Metsker 著
  • Alice in Wonderland by Lewis Carol
  • 《爱丽丝漫游奇境记》Lewis Carol 著
  • Zen and the Art of Motorcycle Maintenance by Robert M. Pirsig
  • 《禅与摩托车维修艺术》Robert M. Pirsig 著
  • About Face - The Essentials of Interaction Design
  • 《About Face:交互设计精髓》
  • Here Comes Everybody: The Power of Organizing Without Organizations by Clay Shirky
  • 《众来一体:没有组织的组织力量》Clay Shirky 著
  • The Tao of Programming
  • 《编程之道》
  • Computational Beauty of Nature
  • 《自然之美的计算》
  • Writing Solid Code by Steve Maguire
  • 《编写高质量代码》Steve Maguire 著
  • Philip and Alex's Guide to Web Publishing
  • 《Philip 和 Alex 的 Web 发布指南》
  • Object-Oriented Analysis and Design with Applications by Grady Booch
  • 《面向对象分析与设计(应用程序)》Grady Booch 著
  • Effective Java by Joshua Bloch
  • 《Effective Java》Joshua Bloch 著
  • Computability by N. J. Cutland
  • 《可计算性》N. J. Cutland 著
  • Masterminds of Programming
  • 《编程大师》
  • The Tao Te Ching
  • 《道德经》
  • The Productive Programmer(高效程序员)
  • The Art of Deception(欺骗艺术) by Kevin Mitnick
  • The Career Programmer: Guerilla Tactics for an Imperfect World(职业程序员:不完美世界的游击战术) by Christopher Duncan
  • Paradigms of Artificial Intelligence Programming: Case studies in Common Lisp(人工智能编程范例:通用Lisp案例研究)
  • Masters of Doom(毁灭大师)
  • Pragmatic Unit Testing in C# with NUnit(使用NUnit进行C#实用单元测试) by Andy Hunt和Dave Thomas,Matt Hargett合著
  • How To Solve It(如何解决它) by George Polya
  • The Alchemist(炼金术士) by Paulo Coelho
  • Smalltalk-80: The Language and its Implementation(Smalltalk-80:语言及其实现)
  • Writing Secure Code(第二版) by Michael Howard(编写安全代码)
  • Introduction to Functional Programming(函数式编程简介) by Philip Wadler和Richard Bird
  • No Bugs!(没有Bug!) by David Thielen
  • Rework(重做) by Jason Freid和DHH
  • JUnit in Action(JUnit实战)

  • 16
    如果你还在上大学,那么《代码大全》是一本不错的书。但如果你已经有至少1年的编程经验,它就会变得非常乏味。 - Bogdan Gavril MSFT
    19
    《代码大全》这本书包含了很多有用的信息,但是它被夸张、废话和重复所淹没,导致阅读起来很困难。 - Jeff Yates
    76
    我在从事软件开发3年后读了《代码大全》。当时我没有学过软件工程课程或编程语言构造课程,但学过一些计算机科学入门课程。这是我读过的最好的提高编程技能的单一书籍。它无法让你成为专家,但可以让你比一个折腾者更有技术水平。 - Shea
    119
    这本书的问题在于对于初学者来说,由于概念有些高级,所以他们无法理解。而当你已经准备好阅读它时,你应该已经了解和实践了书中99%的概念。 - esac
    57
    这就是常识建议的作用,就像在这本书中所发现的那些建议一样。偶尔需要被提醒它们,以便重新回到正确的轨道上。 - JohnFx
    显示剩余18条评论

    9


    9

    9

    9

    《系统论:系统的运作方式及其失效原因》。可以购买二手书便宜些,但你可能需要在经历几个失败的项目后才能理解其中的幽默。

    这本书的美妙之处在于它的版权年份。

    本书中最深刻的“定律”可能是:

    基本失效模态定理(F.F.T.):复杂系统通常在失效模式下运行。

    其意思是,在任何给定的软件中都存在故障部件,这些部件被其他部件的故障或其他部分的验证所掩盖。在Therac-25放射治疗机上看到一个现实世界的例子,该机器的软件缺陷被硬件故障保护掩盖。当硬件故障保护被移除时,多年来未被发现的软件竞争条件导致该机器造成了3人死亡。


    1
    还要看看同一作者(约翰·高尔)的《系统圣经》。这是《系统论》的第三版,他只是改了标题。这是你从学校偷走的书。这是成年人在被子里用手电筒读的书。 - Chris Wenham

    9

    绝对的软件工艺

    alt text http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

    本书介绍了很多关于软件工程和系统开发的事情。它也非常有用,可以理解不同类型的产品开发之间的区别:Web VS缩小包装VS IBM框架。当人们构思瀑布模型时,他们心中所想的是什么?阅读本书,我们会了解一切(希望如此)。


    这本书需要从头开始重写。主题非常有趣但是这本书相当糟糕。 - Chris Mountford
    Chris,我很难理解你的评论...你能再解释一下吗?为什么用“疯狂”这个词? - Salvatore Dario Minonne
    首先,这本书充满了排版错误。Addison Wesley通常出色的编辑手法在这本书中不知为何消失了。 - Chris Mountford
    1. 在文本中,作者何时在事实和观点、轶事和基本原则之间切换并不清晰。
    2. 软件工艺是处理软件开发中多个困难方面的一种隐喻和策略。它具有与替代方法相比的特定优势和可能的缺点。我认为这是理性的方法。说软件本质上是一门手艺是没有意义的。
    这篇文章很恼人,但公平地说,它是一段时间以前的事情,许多具体细节我已经忘记了。然而,我的厌恶仍然存在。
    - Chris Mountford

    9

    《极限编程:拥抱变化》是肯特·贝克所著。虽然我不赞成在软件开发中采用强硬的XP或高速公路,但我希望更早地了解本书中的原则,如单元测试、重构、简洁性、持续集成、成本/时间/质量/范围-这些改变了我对开发的看法。敏捷开发出现之前,一切都是关于调试器和变更请求的恐惧。而在敏捷开发之后,这些妖魔不再如此可怕。


    9

    编程实践。作者:布赖恩·W·柯林汉,罗布·派克。

    这里展示的风格非常出色-代码本身就能说明问题,整本书都遵循KISS原则。虽然不是我首选的语言,但对我仍有影响。


    1
    -1 重复问题,原链接为https://dev59.com/v3VD5IYBdhLWcg3wXaed#13085。 - Ruben Bartelink

    9
    我的个人最爱之一是《黑客秘笈》,因为它既有趣又富有教育意义。
    希望第二版能尽快发布!

    对Henry S. Warren Jr的《黑客的乐趣》点赞+1——它并不是关于流行意义上的黑客,而是指低级位操作和其他“黑客”在词语真正和最初的意义上的技巧。这本书并非适合所有人,但如果你从事代码优化、编译器等工作,或者只是一个对低级别内容感兴趣的极客,那么这是一本很棒的书。 - Paul R

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接