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


1439

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

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

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

inquestion:this "Code Complete"

8
浏览此线程使我意识到大多数与编程相关的书多么丑陋。很好的线程!
卡尔·伯格奎斯特

23
有趣的是,书名显示为“ 每个程序员应该读的最有影响力的书是什么?”,但有很多书建议处理有关语言的特定主题。根据定义和提出的问题,此处建议的书应处理与语言无关的主题,这证明大多数程序员尚未学习如何阅读。
Rook

19
如果我能回到过去并告诉自己阅读一些东西,最好是随身携带的报纸或体育事实书。其他任何事情都浪费了时间旅行。:-)
jmucchiello

32
你知道的,如果我不担心被选为全票,我会顽固地去建议暮光之城。“这还涉及苍白,避开阳光的人!”
Jacob Bellamy 2010年

3
有人可以通过删除书籍上的重复条目来清理答案吗?其中大多数地区已经被否决。

Answers:


1746
  • 史蒂夫·麦康奈尔的《代码完成(第二版)》
  • 实用程序员
  • 计算机程序的结构和解释
  • 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)重构您的垃圾软件
  • 软件估算:揭开史蒂夫·麦康奈尔的妖术神秘面纱
  • 热情的程序员(我的工作去了印度),乍得·福勒(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:语言及其实现
  • 编写安全代码(第二版),作者:Michael Howard
  • Philip Wadler和Richard Bird的函数式编程简介
  • 没有错误!大卫·蒂伦(David Thielen)
  • Jason Freid和DHH的返工
  • 行动中的JUnit

16
如果您正在上大学,Code Complete是一本不错的书。如果您至少有1年的编程经验,那就太无聊了。
Bogdan Gavril MSFT

19
Code Complete中包含许多有用的信息,但是它被埋在夸张,华夫格和重复中,难以阅读。
Jeff Yates

76
我在职业生涯的三年中读过Code Complete。我没有上过软件工程课程,也没有上过编程语言构造课程,但是我上过一些CS入门课程。这是迄今为止我成为更好的程序员所读过的最好的一本书。它不会使您成为专家,但可以使您不仅仅是修补匠。
乳木果

119
本书的问题在于,对于初学者来说,由于概念有些高级,所以这实际上没有任何意义。到准备阅读时,您应该已经知道并练习了本书中99%的概念。
esac

57
这就是处理常识性建议的方法,例如本书中的建议。每隔一段时间,您都需要提醒他们重新排队。
JohnFx

9

K&R

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

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


9

面向计算机科学家的离散数学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。

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


9

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

这本书的美在于版权年。

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

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

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


1
另请参阅同一作者(John Gall)的《系统圣经》。这是Systemantics的第三版,他只是更改了标题。这是您从学校偷的书。这是成年人在手电筒的毯子下阅读的书。
克里斯·文纳姆

9

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

希望第二版能尽快发布!


亨利·S·沃伦·小(Henry S. Warren Jr)的《骇客的喜悦》 +1 –并不是说通俗地说是骇客,而是真正意义上的“低级比特”和其他“骇客”。并非适合每个人,但是如果您参与代码优化,编译器等工作,或者只是对低级知识感兴趣的普通书呆子,那么这本书就是一本好书。
Paul R 2010年


9

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








9

绝对的软件工艺

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

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


这本书需要从头开始重写。这个主题很有趣,但是这本书太疯狂了。
克里斯·芒特福德

克里斯,我很难理解您的评论...您能解释更多吗?为什么是“疯子”?
dario minonne 2011年

首先,它充满印刷错误。在本册中,通常缺席Addison Wesley的一流编辑手。
克里斯·芒特福德

...继续,这里没有足够的空间,但是:2.在文本中,作者在事实和观点,轶事和基本原理等之间切换的位置永远都不清楚。3.软件工艺是一种隐喻和一种应对多种策略的策略。软件开发的困难方面。它具有相对于替代方案的特定优势,并且可能具有劣势。我相信这是理智的方法。毫无疑问,软件本身就是一种工艺。读起来很烦人,但说句公道话,前一阵子我忘记了许多细节。但是,我仍然感到厌恶。
克里斯·芒特福德

8

@彼得·库尔顿(Peter Coulton)-您不会读Knuth,您会学习它。

对我和我的工作来说... 纯粹的功能数据结构非常适合考虑和考虑功能语言的情况。


8

托马斯·弗里德曼(Thomas Friedman)的《世界是平坦的》。

卓越的程序设计需要投入精力和与医学或法律专业相当的持续学习。它所支付的费用仅为这些专业的一小部分,远远少于支付给精通数学的精通金融行业的人员的工资。而且,构建代码的工资正在下降,因为在大多数经济体中,这一行业对于聪明和自律的人来说相对容易进入。

编程已经侵蚀到支付的费用少于管道支付的程度。管道不能“离岸”。您不需要每隔两年就参加专业水暖工会议就需支付2395美元,而获得了一套全新的管道技术的特权,这将使您花费一年的时间来学习。

如果您生活在北美或欧洲,年轻且聪明,那么编程并不是一个合理的职业选择。绝对涉及编程的业务。学习业务,对编程有足够的了解以完善您的BS检测器:精采。但是,将您最大的精神精力投入到对库,数据结构和算法的掌握上吗?仅当编程对您而言比经济选择更重要时,才有意义。

如果您热爱编程,并且因此而打算将其发展为职业,那么您就应该对这些力量产生冷淡的理解,而这些力量将并且将继续使之成为越来越难的职业。“世界是平坦的”不会教您如何命名变量,但是它将使您沉迷于已经到达的经济现实中6到8个小时。如果您可以阅读但又不怕它,那就出去买“代码完成”。


这是一个很好的答案!
2012年

8

替代文字

去年,我参加了许多课程。我读

创新者的困境(颠覆性技术)
神话人月(管理软件)
跨越鸿沟(启动)
数据库管理系统,COW
编程C#书籍,OSTRICH书籍开始iPhone开发,GRAPEFRUIT
书籍

每本书都很了不起,但克莱顿·克里斯滕森(Clayton Christensen)的《创新者的困境》(Innovator's Dilemma)(1997 !!!)确实是一本奇妙的书,它使我真正地思考了现代软件世界。解决的挑战是颠覆性技术,以及磁盘驱动器公司和非技术公司如何总是被新的,改变游戏规则的技术所破坏。在考虑可能是最大的“网络”公司的Google时,它提供了一种新的视角。他们为什么要全力以赴?这是因为他们不希望自己的职位受到新事物的干扰。谷歌上的预览有很多想法。阅读!


我认为这本书相当重复。我建议阅读前1/4。
本·海利

8

黑客,史蒂文·利维(Steven Levy)。

个性和生活方式必须首先。其他一切都可以学到。



8

Python语言对我很有影响力,我希望几年前能读过这些书。Python语言的美观和简单性确实影响了我用其他语言编写代码的方式。

替代文字 替代文字


2
我认为使用Python启动新程序员会减少世界上丑陋的代码量。我与一个随机缩进行的人一起工作-如果他们使用Python已有几个月的经验,那么他不会这样做。
xnine 2010年

6
我认为使用Python启动新程序员会减少其他语言的数量。
Marco Mariani

2
那是巧合吗?
凯利·法国




7

我认为“ Unix编程的艺术”是一本非常出色的书,由埃里克·雷蒙德(Eric S. Raymond)这样的杰出黑客/精明的头脑所著,他试图使我们理解软件设计的一些原理(主要是简单性)。对于即将在Unix平台下启动项目的所有编程人员来说,这本书都是必不可少的。


6
这是重复的。
Christopher Mahan,2009年

7

尽管我同意上面的许多书都是必读的书(实用程序员,神话般的月刊,计算机编程艺术和SICP​​马上浮现在脑海),但我还是想朝一个略有不同的方向推荐《纪律》 Edsger Dijkstra撰写的《编程》。即使已经32岁了,但对“可验证性设计”的强调还是高度相关的(即使“可验证性”意味着“证明”而不是“单元测试”)。





7

这是一本很好的书,没有得到广泛的赞誉,但是充满了深刻的见解:《敏捷软件开发:合作游戏》,作者:Alistair Cockburn。

有什么特别之处?好吧,显然每个人都听说过“敏捷”一词,而如今似乎大多数人都是信徒。但是,不管您是否相信,敏捷运动存在的背后都有一些深层的原则。本书以精确,科学的方式揭示并阐明了这些原理。一些原则是(顺便说一句,这些是我的话,不是阿利斯泰尔的话):

  1. 团队软件开发最困难的事情是让每个人的大脑都有相同的理解。我们正在建立庞大,复杂,复杂的系统,这些系统在有形世界中是看不见的。您越能吸引更多人的大脑来分享更深刻的理解,您的团队就越能有效地进行软件开发。这是配对编程有意义的根本原因。大多数人都忽略了它(我一开始也这样做),但是考虑到这一原则,我强烈建议您再试一次。您结识了两个非常了解您刚刚构建的子系统的人...没有太多其他方法可以这么快地进行如此深入的信息传输。就像一个瓦肯人的心灵融合体。
  2. 您不一定总需要用言语来快速传达深刻的理解。结果是:太多的单词,而您超出了听者/阅读者的能力,这意味着您尝试的理解转移不会发生。考虑到孩子通过“沉浸”和“吸收”来学习如何说语言。不仅是语言……他还举了一些孩子在地板上玩火车的例子。走来从来没有谁甚至另一个孩子SEEN前...但通过观看其他孩子一列火车,他拿起游戏的要点和右边沿播放。这种情况一直在人类之间发生。这与太多单词的推论一起可以帮助您了解在过去的“瀑布”时代尝试编写700页详细的需求规格说明有多么误导。

那里还有更多。我现在闭嘴,但我强烈推荐这本书!


2
一个独特的贡献,您花了时间清楚地解释了为什么值得一读。+1独具匠心!我期待不久后阅读...
艾利·佩恩

好。我认为您不会失望的。
查理·

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.