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

StackOverflow https://stackoverflow.com/questions/1711

  •  08-06-2019
  •  | 
  •  

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

我希望这份清单能够多样化并涵盖广泛的内容。

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

inquestion:this "Code Complete"

没有正确的解决方案

其他提示

  • 代码完成 (第二版)史蒂夫·麦康奈尔
  • 务实的程序员
  • 计算机程序的结构和解释
  • C 编程语言 作者:克尼根和里奇
  • 算法简介 作者:Cormen、Leiserson、Rivest 和 Stein
  • 设计模式 由四人帮
  • 重构:改进现有代码的设计
  • 神话般的人月
  • 计算机编程的艺术 作者:唐纳德·高德纳
  • 编译器:原理、技术和工具 作者:阿尔弗雷德·V.阿霍、拉维·塞西和杰弗里·D.厄尔曼
  • 哥德尔、埃舍尔、巴赫 作者:道格拉斯·霍夫施塔特
  • 干净的代码:敏捷软件工艺手册 作者:罗伯特·C.马丁
  • 有效的C++
  • 更有效的 C++
  • 代码 作者:查尔斯·佩措尔德
  • 编程珍珠 通过乔恩·本特利
  • 有效地处理遗留代码 作者:迈克尔·C.羽毛
  • 人件 作者:德马科和李斯特
  • 工作中的编码员 作者:彼得·塞贝尔
  • 你肯定是在开玩笑吧,先生。费曼!
  • 有效的Java 第二版
  • 企业应用架构模式 马丁·福勒
  • 小阴谋家
  • 老练的阴谋家
  • Why(令人心酸的)Ruby 指南
  • 囚犯们正在管理收容所:为什么高科技产品让我们疯狂以及如何恢复理智
  • Unix 编程的艺术
  • 测试驱动开发:举例说明 作者:肯特·贝克
  • 敏捷开发者的实践
  • 别让我思考
  • 敏捷软件开发、原则、模式和实践 作者:罗伯特·C.马丁
  • 领域驱动设计 作者:埃里克·埃文斯
  • 日常事物的设计 唐纳德·诺曼
  • 现代 C++ 设计 安德烈·亚历山德雷斯库
  • 最佳软件编写 I 作者:乔尔·斯波尔斯基
  • 编程实践 作者:克尼根和派克
  • 务实的思考和学习:重构你的湿软件 通过安迪·亨特
  • 软件估算:揭秘黑色艺术 史蒂夫·麦康奈尔
  • 热情的程序员(我的工作去了印度) 查德·福勒
  • 黑客:计算机革命的英雄
  • 算法+数据结构=程序
  • 编写可靠的代码
  • JavaScript - 好的部分
  • 变得真实 通过 37 个信号
  • 编程基础 作者:卡尔·塞甘
  • 电脑图像:C 原理与实践 (第二版)
  • 用Java思考 布鲁斯·埃克尔
  • 计算系统的要素
  • 重构模式 约书亚·克里耶夫斯基
  • 现代操作系统 作者:安德鲁·S.塔南鲍姆
  • 带注释的图灵
  • 让我们变得聪明的事情 唐纳德·诺曼
  • 永恒的建造方式 克里斯托弗·亚历山大
  • 最后期限:一本关于项目管理的小说 汤姆·德马科
  • C++ 编程语言(第三版) 通过斯特鲁斯特鲁普
  • 企业应用架构模式
  • 计算机系统 - 程序员的视角
  • C# 中的敏捷原则、模式和实践 作者:罗伯特·C.马丁
  • 不断发展的面向对象软件,有指导 通过测试
  • 框架设计指南 布拉德·艾布拉姆斯
  • 对象思维 由博士。大卫·韦斯特
  • UNIX 环境中的高级编程 由 W.理查德·史蒂文斯
  • 黑客和画家:计算机时代的伟大想法
  • 新机器的灵魂 通过特雷西·基德
  • 通过 C# 进行 CLR 作者:杰弗里·里克特
  • 永恒的建造方式 克里斯托弗·亚历山大
  • C# 中的设计模式 作者:史蒂夫·梅茨克
  • 爱丽丝漫游仙境 通过刘易斯·卡罗尔
  • 禅宗与摩托车维修艺术 作者:罗伯特·M.皮尔西格
  • 关于人脸——交互设计精要
  • 大家都来了:无组织组织的力量 作者:克莱·舍基
  • 编程之道
  • 自然的计算之美
  • 编写可靠的代码 史蒂夫·马奎尔
  • 菲利普和亚历克斯的网络出版指南
  • 面向对象的分析和设计及其应用 作者:格雷迪·布奇
  • 有效的Java 约书亚·布洛赫
  • 可计算性 由 N.J。卡特兰
  • 编程大师
  • 道德经
  • 高效的程序员
  • 欺骗的艺术 凯文·米特尼克
  • 职业程序员:不完美世界的游击策略 作者:克里斯托弗·邓肯
  • 人工智能编程范式:Common Lisp 案例研究
  • 末日大师
  • 使用 NUnit 在 C# 中进行实用的单元测试 作者:安迪·亨特、戴夫·托马斯和马特·哈吉特
  • 如何解决 作者:乔治·波利亚
  • 炼金术士 作者:保罗·科埃略
  • Smalltalk-80:语言及其实现
  • 编写安全代码 (第二版)迈克尔·霍华德
  • 函数式编程简介 作者:菲利普·瓦德勒和理查德·伯德
  • 没有错误! 作者:大卫·蒂伦
  • 重工 作者:Jason Freid 和 DHH
  • JUnit 的实际应用

凯瑞

@胡安:我了解胡安,我知道——但有些东西只有通过实际认真完成手头的任务才能学到。整天谈论抽象的理想只会让你变成一个学者。正是在抽象的应用中,我们才真正理解了它们存在的原因。:P

@基思:艾伦·库珀 (Alan Cooper) 很好地提到了《囚犯正在管理疯人院》——这确实让人大开眼界,自从我读过这本书以来,任何与我合作过的开发人员都听我提到过它所支持的想法。+1

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

计算机科学家的离散数学 作者:J.K.桁架。

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

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

系统学:系统如何工作,特别是它们如何失败. 。便宜拿来用吧。但除非你参与过一些失败的项目,否则你可能不会领会其中的幽默。

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

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

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

这个想法是,任何给定的软件中都存在失败的部分,这些部分被其他部分的失败或其他部分的验证所掩盖。请参阅以下位置的真实示例 Therac-25辐射机, ,其软件缺陷被硬件故障保护所掩盖。当硬件故障保护被移除后,多年来未被发现的软件竞争状况导致机器死亡 3 人。

我个人最喜欢的之一是 黑客的喜悦, ,因为它读起来既有趣又具有教育意义。

希望第二版尽快发布!

极限编程解释:迎接改变 作者:肯特·贝克。虽然我不提倡在软件开发中采用硬核 XP 或高速公路,但我希望在我职业生涯的早期就已经了解了本书中的原则。单元测试、重构、简单性、持续集成、成本/时间/质量/范围——这些改变了我看待开发的方式。在敏捷之前,一切都与调试器和对变更请求的恐惧有关。敏捷之后,那些恶魔不再那么庞大了。

类型和编程语言 作者:Benjamin C Pierce,对编程语言的基础有透彻的理解。

数据库系统概念 是您可以阅读的了解良好数据库设计原理的最佳书籍之一。

alt text

编程实践。作者:布莱恩·W.克尼根,罗布·派克。

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

从头开始编程。 它在互联网上是免费的。这本书教会了我 AT&T asm。它非常容易阅读。

alt text

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

enter image description here

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

绝对的软件工艺

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

这本书解释了很多关于软件工程、系统开发的事情。了解不同类型产品开发之间的差异也非常有用:Web VS Shrinkwrap VS IBM 框架。人们在构思瀑布模型时想到了什么?读完这篇文章,我们就会明白(希望如此)

@Peter Coulton——你不是读高德纳的书,而是研究它。

对于我和我的工作... 纯函数式数据结构 非常适合用函数式语言进行思考和开发。

托马斯·弗里德曼的《世界是平的》。

与医学或法律专业相比,卓越的编程需要精神能量的投入和持续学习的奉献精神。它支付的工资只是这些职业的一小部分,更不用说支付给进入金融领域的精通数学的人的工资了。以及工资为 构建代码 正在被侵蚀,因为这是一个职业 相对地 大多数经济体中聪明且自律的人很容易进入。

编程已经被侵蚀到比管道等支付的费用还低的程度。管道不能“分离”。您无需支付$ 2395即可每隔一年就参加专业水管工的会议,以获得一套全新的水暖技术,这些技术将花费您一年的时间才能学习。

如果你住在北美或欧洲,很年轻,而且很聪明,那么编程就不是一个理性的职业选择。企业 涉及 编程,绝对。学习商业,了解足够的编程知识来完善你的 BS 探测器:杰出的。但是将大部分精力投入到掌握库、数据结构和算法上呢?只有当编程对你来说不仅仅是一种经济选择时,这才有意义。

如果你 编程,并且出于这个原因打算将其作为你的职业,那么你有必要对现在并将继续使其成为一个越来越难谋生的职业的力量有一个冷眼的理解。《世界是平的》不会教你如何命名变量,但它会让你沉浸在 6 到 8 个小时的经济现实中, 已经 到达的。如果你能读懂它并且不害怕, 然后 出去买《Code Complete》。

alt text

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

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

每本书都很棒,但克莱顿·克里斯滕森 (Clayton Christensen) 的《创新者的困境》(1997 年!!!)确实是一本很棒的书,它让我真正思考现代软件世界。所面临的挑战是颠覆性技术,以及磁盘驱动器公司和非技术公司如何总是被新的、改变游戏规则的技术所颠覆。它为人们思考谷歌(可能是最大的“网络”公司)提供了一种新的视角。为什么他们什么事都插手?这是因为他们不想拥有自己的位置 被扰乱的 通过一些新的东西。谷歌上的预览足以让你明白这个想法。阅读!

黑客,作者:史蒂文·利维。

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

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

alt text alt text

新图灵综合 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!=编程,但这对每个程序员仍然有用。

弗雷德·布鲁克斯的《人月神话》http://en.wikipedia.org/wiki/The_Mythical_Man-Month

我认为《Unix 编程的艺术》是一本优秀的书,作者是一位出色的黑客/聪明的头脑,如 Eric S.Raymond,他试图让我们理解软件设计的一些原则(主要是简单性)。本书是每个即将在Unix平台下启动项目的编程人员的必读之书。

虽然我同意上面的许多书都是必读的(立即想到《实用程序员》、《人月神话》、《计算机编程艺术》和《SICP》),但我想朝稍微不同的方向发展并推荐 编程的一门学科 埃兹格·迪杰斯特拉 (Edsger Dijkstra) 着。尽管它已有 32 年的历史,但对“可验证性设计”的强调仍然高度相关(即使“可验证性”意味着“证明”而不是“单元测试”)。

马丁·福勒的 重构:改进现有代码的设计 已经被列出来了。但我会详细说明为什么它对我产生影响。

整本书的本质是关于构建代码,以便更容易阅读和理解 人类. 。它强烈地告诉我,我编写的代码是供我的同事和继任者使用并可能学习一些东西的 好的 出来了。它激励我有意识地 节目的方式让人们赞美我的名字,而不是永远诅咒我.

替代文本 http://ecx.images-amazon.com/images/I/61dECNkdnTL._SL500_AA240_.jpg

C++ 如何编程 这对初学者很有好处。这是一本优秀的书,完整的1500页。

这是一本优秀的书,虽然没有受到广泛的好评,但充满了深刻的见解: 敏捷软件开发:合作博弈, ,作者:阿利斯泰尔·科伯恩。

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

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

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

厄运大师。 就对你的职业的动力和热爱而言:没有比这本书中所描述的更好的了,真实鼓舞人心的故事!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top