每个程序员应该读的最有影响力的书是什么?

如果您可以时光倒流,并告诉自己在成为开发人员的职业生涯初期要读一本书,那会是哪本书?

我希望这个列表会有所变化,并且涵盖范围广泛。

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

inquestion:this "Code Complete"

答案

  • 史蒂夫 · 麦康奈尔的《代码完成 (第二版)》
  • 实用程序员
  • 计算机程序的结构和解释
  • Kernighan 和 Ritchie 的 C 编程语言
  • Cormen,Leiserson,Rivest 和 Stein 的算法简介
  • 四人帮的设计模式
  • 重构:改进现有代码的设计
  • 神话人物月
  • 唐纳德 · 克努斯(Donald Knuth) 的计算机编程艺术
  • 编译器: Alfred V. Aho,Ravi Sethi 和 Jeffrey D. Ullman 的原理,技术和工具
  • 哥德尔,埃舍尔,巴赫 (Douglas Hofstadter)
  • 干净代码: Robert C. Martin 撰写的敏捷软件工艺手册
  • 有效的 C ++
  • 更有效的 C ++
  • 查尔斯 · 彼得佐德( CODE)
  • 乔恩 · 本特利的《 编程珍珠》
  • 由 Michael C. Feathers 有效处理遗留代码
  • Demarco 和 Lister 的Peopleware
  • Peter Seibel 工作中编码员
  • 一定是在开玩笑,费曼先生!
  • 有效的 Java第 2 版
  • Martin Fowler 的企业应用程序架构模式
  • 小计划者
  • 经验丰富的计划者
  • 为什么是(Poignant)Ruby 指南
  • 囚犯正在避难:高科技产品为何驱使我们疯狂以及如何恢复理智
  • Unix 编程的艺术
  • 测试驱动的开发:以肯特 · 贝克为例
  • 敏捷开发人员的实践
  • 不要让我想
  • Robert C. Martin 的敏捷软件开发,原理,模式和实践
  • Eric Evans 的域驱动设计
  • 唐纳德 · 诺曼(Donald Norman) 的日常用品设计
  • Andrei Alexandrescu 撰写的现代 C ++ 设计
  • Joel Spolsky 颁发的最佳软件写作 I
  • Kernighan 和 Pike 的编程实践
  • 务实的思维与学习:安迪 · 亨特(Andy Hunt) 重构您的垃圾软件
  • 软件评估:史蒂夫 · 麦康奈尔(Steve McConnel)对妖术进行神秘化
  • 热情的程序员(我的工作去了印度) ,乍得 · 福勒(Chad Fowler)
  • 黑客:计算机革命的英雄
  • 算法 + 数据结构 = 程序
  • 编写扎实的代码
  • JavaScript - 好零件
  • 通过 37 个信号实现真实
  • Karl Seguin 的编程基础
  • 计算机图形学:C 原理与实践 (第二版)
  • Bruce Eckel 用 Java 思考
  • 计算系统的要素
  • Joshua Kerievsky 对模式重构
  • 现代操作系统 ,作者:Andrew S. Tanenbaum
  • 带注释的图灵
  • 唐纳德 · 诺曼(Donald Norman) 使我们变得聪明事物
  • 克里斯托弗 · 亚历山大(Christopher Alexander) 的永恒建筑方式
  • 截止日期: Tom DeMarco 撰写的有关项目管理小说
  • Stroustrup 的 C ++ 编程语言(第 3 版)
  • 企业应用程序架构的模式
  • 计算机系统 - 程序员的观点
  • Robert C. Martin 的C#中敏捷原理,模式和实践
  • 不断增长的面向对象软件,以测试为指导
  • Brad Abrams 的框架设计指南
  • David West 博士的对象思考
  • W. Richard Stevens 在 UNIX 环境中进行高级编程
  • 黑客与画家:计算机时代的大创意
  • 特蕾西 · 基德(Tracy Kidder) 的新机器之魂
  • Jeffrey Richter 通过 C#进行CLR
  • 克里斯托弗 · 亚历山大(Christopher Alexander) 的永恒建筑方式
  • Steve Metsker 撰写的C#中设计模式
  • 爱丽丝梦游仙境 (Lewis Carol)
  • 禅与罗伯特 · 皮尔西格(Robert M.Pirsig) 的摩托车维修艺术
  • 关于面孔 - 交互设计的要点
  • 每个人都来了:没有组织的组织力量 Clay Shirky
  • 编程之道
  • 自然的计算之美
  • 史蒂夫 · 马奎尔(Steve Maguire) 编写坚实的代码
  • 菲利普和亚历克斯的网络出版指南
  • 面向对象的分析与设计,作者 Grady Booch
  • Joshua Bloch 撰写的有效 Java
  • NJ Cutland 的可计算性
  • 编程大师
  • 道德经
  • 生产程序员
  • 欺骗的艺术,凯文 · 米特尼克(Kevin Mitnick)
  • 职业程序员:克里斯托弗 · 邓肯(Christopher Duncan) 的《不完美世界游击战术》
  • 人工智能编程范例:Common Lisp 中的案例研究
  • 末日大师
  • Andy Hunt 和 Dave Thomas 与 Matt Hargett 一起使用 NUnit 在 C#中进行实用单元测试
  • 如何解决它 ,乔治 · 波利亚(George Polya)
  • Paulo Coelho 的炼金术士
  • Smalltalk-80:语言及其实现
  • 编写迈克尔 · 霍华德的安全代码 (第二版)
  • Philip Wadler 和 Richard Bird 的函数式编程简介
  • 没有错误!大卫 · 蒂伦(David Thielen)
  • Jason Freid 和 DHH 的返工
  • 行动中的 JUnit

K&R

@胡安:我知道胡安,我知道 - 但是有些事情只有实际完成手头的工作才能学到。整日用抽象的理想说话只会使你成为一名学者。在摘要的应用中,我们真正了解了它们存在的原因。 :P

@基思:艾伦 · 库珀(Alan Cooper)提到 “囚犯正在逃避庇护所” 时,提到得很多,这肯定使人大开眼界,自从我读过这本书以来与我合作的任何开发人员都听过我提到了它所拥护的想法。 +1

人工智能编程范例 :Peter Norvig 的 Lisp 案例研究

在此处输入图片说明

我开始阅读它是因为我想学习 Common Lisp。中途学习时,我意识到这是迄今为止我读过的最伟大的编程书籍。

面向计算机科学家的离散数学 http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg

JK Truss 为计算机科学家设计离散数学

尽管这不会教您编程,但它会教您每个程序员都应该知道的基本数学。您可能还记得大学里的这些知识,但实际上,执行谓词逻辑将提高您的编程技能,如果您想使用集合进行编程,则需要学习 Set Theory。

这里确实有很多有趣的信息,可以使您以不同的方式思考问题。拥有它很方便,只是偶尔去学习一些新东西。

系统技术:系统如何工作,尤其是系统如何发生故障 。便宜地得到它。但是,除非您从事了一些失败的项目,否则您可能不会幽默。

这本书的美在于版权年。

这本书中可能是最深刻的外卖 “法律”:

基本故障模式定理(FFT):复杂系统通常以故障模式运行。

这种想法是,在任何给定的软件中都存在故障部件,这些故障部件被其他部件的故障或其他部件的验证所掩盖。请参阅Therac-25 辐射机上的实际示例,该软件的缺陷已被硬件故障保护所掩盖。移除硬件故障保护装置后,这些年来一直未被发现的软件竞争状况导致机器杀死 3 人。

绝对的软件工艺

替代文字 http://ecx.images-amazon.com/images/I/5186JKTDVWL._SL500_AA240_.jpg

本书解释了有关软件工程,系统开发的许多内容。了解不同类型的产品开发之间的区别也非常有用:Web VSrinkwrap VS IBM 框架。人们在构思瀑布模型时会想到什么?阅读本文,我们将变得更加清晰(希望如此)

我个人最喜欢的游戏之一是Hacker's Delight ,因为它既有趣又具有教育意义。

希望第二版很快发布!

解释极端编程:拥抱变更 (Kent Beck)。尽管我不主张采用硬性 XP 或高速公路软件开发方法,但我希望我在职业生涯的早期就已经对本书的原理进行了介绍。单元测试,重构,简单性,持续集成,成本 / 时间 / 质量 / 范围 - 这些改变了我看待开发的方式。在敏捷开发之前,一切都与调试器和对变更请求的担心有关。敏捷之后,那些恶魔并没有那么大。

编程实践。布莱恩 ·W· 克尼根(Brian W.

此处显示的样式非常好 - 代码本身就说明了问题,整本书都遵循 KISS 原则。我个人不是我选择的语言,但仍然对我有影响。