每个程序员都应该读的最有影响力的一本书是啥? [关闭]

Posted

技术标签:

【中文标题】每个程序员都应该读的最有影响力的一本书是啥? [关闭]【英文标题】:What is the single most influential book every programmer should read? [closed]每个程序员都应该读的最有影响力的一本书是什么? [关闭] 【发布时间】:2010-09-05 09:53:32 【问题描述】:

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

我希望这份清单多种多样,涵盖范围广泛。

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

inquestion:this "Code Complete"

【问题讨论】:

浏览这个帖子让我意识到大多数与编程相关的书籍是多么丑陋。非常好的线程! 有趣的是,虽然标题是“每个程序员都应该读的最有影响力的一本书是什么?”,但有不少书建议处理特定于语言的问题话题。根据定义和提出的问题,这里推荐的书籍应该处理与语言无关的主题,这证明大多数程序员还没有学会如何阅读。 如果我能回到过去告诉自己要读点什么,最好是随身携带的报纸或体育实况书。其他任何事情都是浪费时间旅行。 :-) 你知道,如果我不担心会在很多人的选票中落败,我会疯狂地去推荐暮光之城。 “这也是关于那些脸色苍白并避开阳光的人!” 有人可以通过删除书籍上的重复条目来清理答案吗?他们中的大多数人已经投票反对。 【参考方案1】: 代码完成(第二版),作者:Steve McConnell 务实的程序员 计算机程序的结构和解释 The C Programming Language 作者:Kernighan 和 Ritchie 算法简介,Cormen、Leiserson、Rivest 和 Stein 设计模式 四人组 重构:改进现有代码的设计 神话人物月 计算机编程的艺术 by Donald Knuth 编译器:原理、技术和工具 作者:Alfred V. Aho、Ravi Sethi 和 Jeffrey D. Ullman 哥德尔、埃舍尔、巴赫道格拉斯·霍夫施塔特 干净的代码:敏捷软件工艺手册 作者:Robert C. Martin 有效的 C++ 更有效的 C++ 代码 作者:Charles Petzold 编程珍珠 by Jon Bentley 有效地使用遗留代码 作者:Michael C. Feathers Peopleware 由 Demarco 和 Lister 设计 工作中的程序员 作者:Peter Seibel 你肯定是在开玩笑,费曼先生! Effective Java第二版 企业应用架构模式 作者:Martin Fowler 小阴谋家 老谋深算 Ruby 的Why's (Poignant) 指南 犯人正在运行庇护:为什么高科技产品让我们发疯以及如何恢复理智 Unix 编程的艺术 测试驱动开发:示例 作者:Kent Beck 敏捷开发人员的实践 别让我思考 敏捷软件开发、原则、模式和实践 作者:Robert C. Martin 领域驱动设计 作者:Eric Evans Donald Norman 的日常用品设计 现代 C++ 设计,作者 Andrei Alexandrescu 最佳软件写作 I 作者:Joel Spolsky Kernighan 和 Pike 的编程实践 务实的思考与学习:重构您的湿件,作者:Andy Hunt 软件评估:揭开黑色艺术的神秘面纱 作者:Steve McConnel 热情的程序员(我的工作去了印度) by Chad Fowler 黑客:计算机革命的英雄 算法 + 数据结构 = 程序 编写可靠的代码 javascript - 好的部分 通过 37 个信号实现真实 编程基础 作者:Karl Seguin 计算机图形学:C 中的原理与实践(第 2 版) Thinking in Java 作者 Bruce Eckel 计算系统的元素 模式重构 作者:Joshua Kerievsky 现代操作系统 作者:Andrew S. Tanenbaum 带注释的图灵 让我们变得聪明的事物 作者:Donald Norman 永恒的建筑方式 by Christopher Alexander 截止日期:关于项目管理的小说 Tom DeMarco C++ 编程语言(第 3 版),Stroustrup 企业应用架构模式 计算机系统 - 程序员的视角 C# 中的敏捷原则、模式和实践 作者:Robert C. Martin 在测试的指导下发展面向对象的软件 框架设计指南,Brad Abrams Object Thinking David West 博士 UNIX 环境中的高级编程 作者:W. Richard Stevens 黑客和画家:计算机时代的大创意 新机器的灵魂 作者:Tracy Kidder 通过 C# 实现 CLR,作者:Jeffrey Richter 永恒的建筑方式 by Christopher Alexander C# 中的设计模式,作者 Steve Metsker 爱丽丝梦游仙境刘易斯卡罗尔 禅与摩托车维修艺术 Robert M. Pirsig 关于面子 - 交互设计的要点 每个人都来了:没有组织的组织的力量 Clay Shirky 编程之道 自然的计算之美 编写可靠的代码 作者:Steve Maguire Philip 和 Alex 的网络出版指南 带有应用程序的面向对象分析和设计,作者:Grady Booch Effective Java 作者:Joshua Bloch 可计算性 作者:N. J. Cutland 编程大师 道德经 高效程序员 欺骗的艺术,凯文·米特尼克(Kevin Mitnick) 职业程序员:不完美世界的游击战术 作者:Christopher Duncan 人工智能编程范式:Common Lisp 中的案例研究 末日大师 使用 NUnit 在 C# 中进行实用单元测试,作者:Andy Hunt 和 Dave Thomas 和 Matt Hargett 如何解决它 作者:George Polya 炼金术士 Paulo Coelho Smalltalk-80:语言及其实现 编写安全代码(第二版),作者:Michael Howard 函数式编程简介 Philip Wadler 和 Richard Bird 没有错误! David Thielen 返工 Jason Freid 和 DHH JUnit 在行动

【讨论】:

Code Complete 是一本不错的书,如果你在上大学的话。如果你有至少 1 年的编程经验,那就太无聊了。 Code Complete 中有很多有用的信息,但它被夸张、胡扯和重复所掩盖,这使得它难以阅读。 我读了 Code Complete 3 年的职业生涯。我没有上过软件工程课程,也没有上过编程语言结构课程,但上过一些 CS 入门课程。这是迄今为止我读过的关于成为更好的程序员的最好的一本书。它不会让你成为专家,但它会让你不仅仅是一个修补匠。 这本书的问题在于,对于初学者来说,它的概念有点高级,所以没有真正的意义。当您准备好阅读它时,您应该已经了解并练习了书中 99% 的概念。 这就是常识性建议的处理,就像本书中的那些。每隔一段时间,您就需要提醒他们重新排队。【参考方案2】:

K&R

@Juan:我知道 Juan,我知道 - 但有些东西只有通过真正投入手头的任务才能学到。整天讲抽象的理想只会让你成为一名学者。正是在摘要的应用中,我们才真正了解了它们存在的原因。 :P

@Keith:艾伦·库珀(Alan Cooper)对“The Inmates are Running the Asylum”的大力提及——无疑让我大开眼界,自从我阅读这本书以来,任何与我合作过的开发人员都听到我提到过它所支持的想法。 +1

【讨论】:

【参考方案3】:

Discrete Mathematics For Computer Scientists http://ecx.images-amazon.com/images/I/51HCJ5R42KL._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU02_.jpg

Discrete Mathematics For Computer Scientists J.K.桁架。

虽然这不会教您编程,但它会教您每个程序员都应该知道的基础数学。您可能还记得大学时的这些东西,但实际上,做谓词逻辑会提高您的编程技能,如果您想使用集合进行编程,则需要学习集合论。

这里确实有很多有趣的信息可以让你以不同的方式思考问题。拥有它很方便,只是偶尔拿起它来学习新东西。

【讨论】:

【参考方案4】:

Systemantics: How Systems Work and Especially How They Fail。便宜用就行。但是,在您完成一些失败的项目之前,您可能无法获得幽默感。

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

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

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

这个想法是在任何给定的软件中都有失败的部分被其他部分的失败或其他部分的验证所掩盖。请参阅Therac-25 radiation machine 上的真实示例,其软件缺陷被硬件故障保护所掩盖。当硬件故障保护被移除时,多年来一直未被发现的软件竞争状况导致机器杀死了 3 人。

【讨论】:

还可以查看同一作者 (John Gall) 的《系统圣经》。这是Systemantics的第三版,他只是改变了标题。这是你从学校偷的书。这是成年人在手电筒的毯子下阅读的书。【参考方案5】:

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

希望第二版快点出!

【讨论】:

Henry S. Warren Jr 的“Hacker's Delight”+1 - 这不是流行意义上的黑客攻击,而是低级比特旋转和其他真正和原始意义上的黑客攻击这个单词。不适合所有人,但如果您涉及代码优化、编译器等,或者只是对低级内容感兴趣的普通书呆子,那么这是一本很棒的书。【参考方案6】:

Concepts, Techniques, and Models of Computer Programming.

alt text http://ecx.images-amazon.com/images/I/51YZ50ZR13L._SL500_AA240_.jpg

【讨论】:

精彩,书的封面展示了“圣家堂”,这是一座在西班牙加泰罗尼亚巴塞罗那正在建设中的大型罗马天主教教堂。将于 2026 年完成(仅剩 17 年)。像大多数程序一样,即使有最好的书,它们也从未完成......【参考方案7】:

Extreme Programming Explained: Embrace Change 由肯特贝克。虽然我不提倡在软件开发方面硬核 XP 或高速公路,但我希望我在职业生涯的早期就已经了解了本书中的原则。单元测试、重构、简单性、持续集成、成本/时间/质量/范围——这些改变了我看待开发的方式。在敏捷之前,一切都是关于调试器和对变更请求的恐惧。在敏捷之后,那些恶魔就没有那么大了。

【讨论】:

【参考方案8】:

Types and Programming Languages by Benjamin C Pierce 对编程语言基础的透彻理解。

【讨论】:

【参考方案9】:

alt text http://ecx.images-amazon.com/images/I/51E0Ojkz8iL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg

【讨论】:

【参考方案10】:

Database System Concepts 是您可以阅读的关于理解良好数据库设计原则的最佳书籍之一。

【讨论】:

【参考方案11】:

编程实践。作者:Brian W. Kernighan、Rob Pike。

这里展示的风格非常好——代码不言自明,整本书都遵循了 KISS 原则。就个人而言,不是我选择的语言,但对我仍然有影响。

【讨论】:

-1 与***.com/questions/1711/… 重复【参考方案12】:

Programming from the ground up. 在互联网上免费。这本书教会了我 AT&T asm。它很容易阅读。

【讨论】:

【参考方案13】:

Paradigms of Artificial Intelligence Programming:Peter Norvig 的 Common Lisp 案例研究

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

【讨论】:

【参考方案14】:

绝对的软件工艺

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

这本书解释了很多关于软件工程、系统开发的东西。了解不同类型的产品开发之间的区别也非常有用:web VS shrinkwrap VS IBM 框架。人们在构思瀑布模型时的想法是什么?阅读本文,我们将变得清晰(希望如此)

【讨论】:

这本书需要从头开始重写。这个主题很有趣,但是这本书很疯狂。 克里斯,我很难理解你的评论......你能解释更多吗?为什么“疯了”? 首先它充满了印刷错误。艾迪生·韦斯利 (Addison Wesley) 通常一流的编辑之手在这本书中却出奇地缺席。 ...继续,这里没有足够的空间,但是:2.在文本中,作者在事实和观点,轶事和基本原理等之间切换的地方一直不清楚。3.软件工艺是一个隐喻和处理软件开发的几个困难方面的策略。与替代品相比,它具有特定的优势,并且可能存在劣势。我相信这是理智的做法。说软件本质上是一门手艺是没有意义的。读起来很烦人,但公平地说,这是不久前的事了,很多细节我都忘记了。然而,我的厌恶依然存在。【参考方案15】:

@Peter Coulton -- 你不读 Knuth,你研究它。

对我和我的工作来说......纯函数式数据结构非常适合考虑到函数式语言的思考和开发。

【讨论】:

【参考方案16】:

托马斯弗里德曼的“世界是平的”。

要想在编程方面表现出色,需要投入脑力和对持续学习的奉献精神,这与医学或法律专业相媲美。它支付的只是这些职业的一小部分,更不用说支付给那些进入金融领域的精通数学的人的工资了。 构建代码的工资正在下降,因为在大多数经济体中,对于聪明和自律的人来说,这是一个相对容易进入的职业。

编程已经被侵蚀到支付比管道费更少的地步。管道不能“离岸”。您无需支付 2395 美元就可以每隔一年参加一次专业管道工会议,即可获得一套全新的管道技术,这将花费您一年的时间来学习。

如果您居住在北美或欧洲,年轻且聪明,那么编程不是一个理性的职业选择。绝对涉及编程的企业。学习商业,对编程有足够的了解来改进你的 BS 探测器:太棒了。但是将大部分精力用于掌握库、数据结构和算法?仅当编程对您而言比经济选择更重要时,这才有意义。

如果您热爱编程并因此打算将其作为您的职业,那么您有必要对正在并将继续将其变为谋生的职业越来越难。 “世界是平的”不会教您如何命名变量,但它会让您沉浸在已经到来的经济现实中 6 或 8 个小时。如果您可以阅读它并且不害怕,然后出去购买“代码完整”。

【讨论】:

这是一个很好的答案!【参考方案17】:

去年我参加了一些课程。我读了

The Innovator's Dilemma (disruptive tech)The Mythical Man Month (managing software)Crossing the Chasm (startup)Database Management Systems, The COW BookProgramming C#, The OSTRICH BookBeginning iPhone Developmen, The GRAPEFRUIT Book

每本书都很棒,但 Clayton Christensen 的《创新者的困境》(1997 年!!!)确实是一本很棒的书,它让我真正思考了现代软件世界。解决的挑战是颠覆性技术,以及磁盘驱动器公司和非技术公司如何总是被新的、改变游戏规则的技术所破坏。在考虑可能是最大的“网络”公司 Google 时,它​​提供了一个新的视角。为什么他们在所有事情中都掌握了主动权?这是因为他们不希望自己的位置被新事物打乱。谷歌上的预览足以让您了解这个想法。阅读吧!

【讨论】:

我认为这本书是相当重复的。我建议阅读前 1/4。【参考方案18】:

黑客,作者:Steven Levy。

个性和生活方式必须是第一位的。其他一切都可以学习。

【讨论】:

【参考方案19】:

编程实践

如何用电脑解决

alt text http://img.infibeam.com/img/7101e0ee/496b1/05/629/P-M-B-9788131705629.jpg?hei=200&wid=160&op_sharpen=1

【讨论】:

【参考方案20】:

Python 语言对我影响很大,我希望我早在几年前就读过这本书。 Python 语言的优美和简洁确实影响了我用其他语言编写代码的方式。

【讨论】:

我认为用 Python 开始新程序员会减少世界上丑陋代码的数量。我与一个随机缩进行的人一起工作 - 如果他们使用 Python 工作了几个月,这个人就不会这样做。 我认为用 Python 开始新程序员会减少其他语言的数量。 这些封面是巧合吗?【参考方案21】:

The New Turing Omnibus http://ecx.images-amazon.com/images/I/51HlYd-%2BRwL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg

真是好书。对计算机科学最重要的领域有高水平的品味。是的,CS != 编程,但这对每个程序员仍然有用。

【讨论】:

【参考方案22】:

Object Oriented Analysis and Design with Applications by Brady Booch

【讨论】:

【参考方案23】:

Fred ***s 的神话人物月 http://en.wikipedia.org/wiki/The_Mythical_Man-Month

【讨论】:

【参考方案24】:

我认为“Unix 编程的艺术”是一本优秀的书,作者是 Eric S. Raymond 的优秀黑客/聪明才智,他试图让我们理解软件设计的一些原则(主要是简单性)。这本书是每个即将在 Unix 平台下开始项目的编程人员的必备之书。

【讨论】:

这是重复的。【参考方案25】:

虽然我同意上面的许多书籍都是必读书籍(Pragmatic Programmer、Mythical Man-Month、Art of Computer Programming 和 SICP),但我想朝着稍微不同的方向前进,并且由 Edsger Dijkstra 推荐 A Discipline of Programming。尽管它已有 32 年的历史,但对“可验证性设计”的强调是高度相关的(即使“可验证性”意味着“证明”而不是“单元测试”)。

【讨论】:

【参考方案26】:

Pete Goodliffe 的Code Craft 是一本好书!

Code Craft http://ecx.images-amazon.com/images/I/51WZ9AEC3GL._SL500_BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg

【讨论】:

我对这本书寄予厚望,但它不适合我。我认为这是显而易见的。这可能对那些刚接触编程的人有好处。【参考方案27】:

Martin Fowler 的 Refactoring: Improving the Design of Existing Code 已经列出。但我会详细说明它影响我的原因。

整本书的精髓在于结构化代码,以便人类更容易阅读和理解。它强烈地告诉我,我编写的代码是为了让我的同事和继任者使用并可能从中学到一些的东西。它激励我有意识地program in a manner that leaves people praising my name, and not cursing me to damnation for all eternity。

【讨论】:

【参考方案28】:

alt text http://ecx.images-amazon.com/images/I/61dECNkdnTL._SL500_AA240_.jpg

C++ How to Program这本书适合初学者。这是一本完整的好书,有1500页。

【讨论】:

我完全同意。 Deitel 学习编程语言的方法令人惊叹。我认为 Java 如何编程是我的编程圣经!【参考方案29】:

这是一本没有受到广泛赞誉但充满深刻见解的优秀书籍:Agile Software Development: The Cooperative Game,作者是 Alistair Cockburn。

它有什么特别之处?好吧,显然每个人都听说过“敏捷”这个词,而且现在似乎大多数人都是信徒。不过,不管你是否相信,敏捷运动的存在背后都有一些深刻的原则。本书以精确、科学的方式揭示并阐明了这些原则。其中一些原则是(顺便说一句,这是我的话,不是 Alistair 的):

    团队软件开发中最难的事情是让每个人的大脑都有相同的理解。我们正在构建庞大、精细、复杂的系统,这些系统在有形世界中是不可见的。您越善于让更多人的大脑分享更深入的理解,您的团队在软件开发方面的效率就越高。 这是结对编程有意义的根本原因。大多数人都忽略了它(我一开始也是如此),但考虑到这一原则,我强烈建议你再试一次。你最终会遇到两个深入了解你刚刚构建的子系统的人......没有很多其他方法可以如此快速地进行如此深入的信息传输。这就像瓦肯人的心灵融合。 您并不总是需要语言来快速传达深刻的理解。还有一个推论:单词太多,你超出了听众/读者的能力,这意味着你尝试的理解转移不会发生。考虑到孩子们通过“沉浸”和“吸收”来学习如何说语言。不仅仅是语言……他举了一些孩子在地板上玩火车的例子。随之而来的是另一个从未见过火车的孩子……但通过观察其他孩子,他掌握了游戏的要点并继续玩下去。这在人与人之间一直发生。这与字数过多的必然结果一起帮助您了解在过去的“瀑布”时代尝试编写 700 页的详细需求规范是多么错误。

里面还有很多东西。我现在就闭嘴,但我强烈推荐这本书!

【讨论】:

一个独特的贡献,你花时间清楚地解释了为什么它值得一读。 +1 创意和努力!我期待着尽快阅读这篇文章...... 好。我想你不会失望的。【参考方案30】:

Masters of doom.就你的职业的动力和热爱而言:它不会比这本书中描述的更好,真实鼓舞人心的故事!

【讨论】:

+1 以获得准确的一行评论

以上是关于每个程序员都应该读的最有影响力的一本书是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

程序员读物推荐

一个合格的程序员应该读过哪些书

一个合格的程序员应该读过哪些书

荐书丨Node.js:来一打 C++ 扩展

每个程序员应该阅读的10本书籍

影响中国历史的一百位名人这本书的体裁是啥