每个软件工程师都需要阅读的12本书中最有影响力的书籍

这是我经常遇到的一个问题,特别是来自刚开始作为软件工匠的同事或朋友的问题。

我应该读什么书才能成为更好的开发人员? 我需要读书吗?

我认为这是一个很好的问题,在我成为软件工程师时,我问了很多导师。 问题在于,许多人针对不同主题提出了不同的建议。 他们所建议的所有书本都是伟大的,但是没有人能给我列出那些必不可少的必不可少基本书籍,任何希望成为伟大的工程师都应该阅读。

好吧,我从导师那里学到了很多东西,并且意识到我仍然可以从建议给我的许多不同书籍中学习很多东西。 我决定开发一个例程,以便在我的专业领域(软件工程)中每月阅读一本书。 多年来,我汇总了一份我认为必须阅读的清单 对于任何想成为顶级开发人员的人。

现在让我指出一个显而易见的事实–仅阅读清单上的所有这些书籍都不会使您成为一名出色的开发人员。 这将伴随多年的经验,并将这些书中的原理应用于实际实践中,并在现实世界中发展您的问题解决能力。

但是,阅读这些书将帮助您避免许多开发人员在职业生涯早期犯下的重大陷阱和错误。 我希望有人会刚开始就告诉我有关这些书的信息,但是我很幸运多年来找到并阅读了这些书。 您可能已经在大学里读过其中一些关于计算机科学或工程课程的书。 也许当时您并不认为它们很重要,但是我可以直接说出我已经使用和应用了这些书中每本的许多原理。

我还要指出,这不是一个详尽的清单。 每年都会出版许多好书。 这些只是对我自己和我的职业生涯影响最大的人。 而且,这些语言大多与语言无关,可以使用许多软件语言中的任何一种来应用。 (我将在另一篇文章中针对某些技术平台和堆栈提供最佳书籍)

好吧,那就开始吧! (请打鼓)

名单

(所有这些都是必不可少的,但我将它们按降序排列,对我影响最大。我还提供了链接(单击书名),如果有兴趣,可以在亚马逊上购买该书。阅读评论并自己决定!)

12.有效使用旧版代码

我喜欢这本书,因为几乎每个软件开发人员在其职业生涯的某个时候都必须支持并使用旧版系统。 在本书中,Michael Feathers提供了从头到尾的策略,可以更有效地使用未经测试的大型旧代码库。 本书借鉴了Michael在其著名的Object Mentor研讨会上创建的材料:Michael在指导中使用的技术可帮助数百名开发人员,技术经理和测试人员控制他们的旧系统。

11.神话般的人月

这本书是经典的,但最近经过修订和更正。 令人惊讶的是,本书仍然与软件产品开发有多么相关。 如果您涉及软件,那么这本书是必读的。 我认为,这本书最有价值的部分是“计划淘汰”原型章节。 尽管目标始终是做一个更大,更好,更快的东西,但这几乎是一个公理,您将要构建必须丢弃和重新加工的东西。 我可以从第一手经验告诉您,每次都会发生这种情况。 因此,计划进行淘汰至关重要,以便您可以将用户迁移到后续版本。 如果您梦想第一个产品是“一体的”,那么您将有可能将其抛弃在不可避免地会发展的产品上。 计划扔掉还可以通过设置可以获得的合理里程碑来帮助实现计划目标。

10.设计模式

如果您打算成为系统的架构师或设计师,则很可能需要阅读本书。 这本书被誉为有史以来最伟大的软件开发书籍之一,详细介绍了多年来为帮助软件工程师避免和处理行业面临的常见问题而开发的许多不同的设计模式。 遵循本书中的策略,您可以构建质量更高,更灵活且可维护的软件。 这本书在软件组中也被冠以“四人帮”的称号,因为它的四位著名作者将这本书合在一起。

9.编程珠(第二版)

这本书与清单上的其他书籍略有不同。 我想说这本书可以帮助一个人“像程序员一样思考”。 Programming Pearls是先前在ACM通讯中出版的15列的纲要。 这些专栏涵盖了与编程相关的广泛主题:从需求收集到性能调整。 重点主要放在编码技术和算法上。

每列都重新组织为一章。 本章通常从介绍实际问题开始。 然后提出了各种解决方案,并将其用作要学习的课程。 写作风格清晰有趣。

编程Pearls不是一本教授新的编程概念的常用书。 尽管本书包含一些好主意,有时还包括一些新颖的主意,但本书的目的不是教一些新知识,而是帮助您成为一个更好的解决问题的人。

8.代码:计算机硬件和软件的隐藏语言

这本书清除了创建和开发复杂系统的许多“魔术”。 如今,抽象太多了,以至于开发人员有时不了解底层细节。 尽管您可能找不到实践中使用这本书的24/7…我相信了解您在顶层编排的内容以及整个编排的工作原理是一个好主意。 当您需要打开“黑匣子”并深入研究软件或硬件以修复令人讨厌的错误时,它可能会派上用场。 Charles Petzold撰​​写的“代码:计算机硬件和软件的隐藏语言”介绍了许多从数字系统开始的编程概念-十进制,八进制,二进制到高级语言。 本书介绍了基于分组的通信协议和TCP。 许多章节涉及硬件概念,而五章专门介绍软件,并讲授操作系统,浮点算法和GUI。

7,计算机编程的艺术

这是另一个经典。 这是由著名的计算机科学家Donald Knuth教授撰写的,并受到了业内许多顶级程序员的高度评价。 甚至引用比尔·盖茨的话

如果您认为自己是一个非常优秀的程序员,请阅读[Knuth’s]的计算机编程艺术…如果您可以阅读全部内容,则绝对应该给我一份简历。”

本书从基本的编程概念和技术开始,然后更着重于信息结构-计算机内部信息的表示,数据元素之间的结构关系以及如何有效地处理它们。 基本应用程序包括仿真,数值方法,符号计算,软件和系统设计。

6.重新加工

Martin Fowler的“重构”是关于改进现有代码的设计。 这是一种更改软件系统的过程,它不会改变代码的外部行为,但会改善其内部结构。 通过重构,您甚至可以采用不良的设计并将其重新设计为好的设计。 本书对重构的原理进行了详尽的讨论,包括在哪里发现重构的机会以及如何设置所需的测试。 还有一个目录,其中包含40多种经过验证的重构,其中包含有关何时以及为何使用重构的详细信息,实现它的逐步说明以及说明其工作原理的示例。本书以Java作为主要语言编写,但是这些想法适用于任何OO语言。

5.清洁代码

罗伯特·C·马丁(Robert C. Martin)撰写的“清洁代码”, 分为三个部分。 第一个描述了编写干净代码的原理,模式和实践。 第二部分包括一些案例,这些案例越来越复杂。 每个案例研究都是清理代码的一种练习-将有问题的代码库转换为合理且有效的代码库。 第三部分是收益:一章包含创建案例研究时收集的启发式和“臭味”列表。 结果是一个知识库,描述了我们在编写,阅读和清理代码时的思维方式。

4.算法简介

这必须是理解和使用算法的一本最佳书(您将在软件开发中做很多事情)。 一些有关算法的书很严格,但并不完整。 其他人则覆盖大量的材料,但缺乏严格性。 算法简介独特地将严谨和全面结合在一起。 本书深入地介绍了各种算法,但使各级读者都可以使用它们的设计和分析。 每章都是相对独立的,可以作为学习单元。 这些算法以英语进行描述,并以伪代码进行描述,伪代码旨在使任何经过一点编程的人都可以阅读。 在不影响深度和数学严谨性的前提下,对这些解释进行了基本介绍。第一版成为全球大学中广泛使用的教科书以及专业人士的标准参考书。 第二版以新的章节为特色,介绍了算法的作用,概率分析,随机算法和线性规划。

3.计算机程序的结构和解释

本书采用分析和严格的方法来解决问题和编程技术,着眼于工程学。 计算机程序的结构和解释强调了在计算模型中处理时间的不同方法所起的核心作用。 它的独特方法使其适合于介绍计算机科学课程以及编程语言和程序设计。 该书进一步解释了四种最著名的编程语言范例-命令式,面向对象,基于逻辑和应用程序编程。

2.实用程序

这是我阅读的第一本编程书籍之一。 我有一个朋友在我的第一份专业工作中向我推荐它。 我很高兴他做到了。 尽管该书写于1999年(我相信),但这些概念是我们如何以实用的方式开发复杂系统的基础。 程序员是经过培训的技术人员,可以使用一组特定的工具(编辑器,对象管理器,版本跟踪器)来生成将在某些环境(硬件组件上的操作系统)中运行的某种产品(程序)。 像任何其他工艺一样,计算机编程也催生了智慧,其中大多数是大学或认证课程中没有教授的。 随着时间的流逝,大多数程序员通过独立的实验得出所谓的交易技巧。 在The Pragmatic Programmer中 ,Andrew Hunt和David Thomas整理了他们在各自职业生涯中作为软件设计师和代码编写者发现的许多真相。

一些作者的实用主义观点是具体的,实现它们的途径很明确。 他们建议读者例如学习一个文本编辑器,并将其用于所有内容。 他们还建议甚至在最小的项目中都使用版本跟踪软件,并宣传学习正则表达式语法和文本操作语言的优点。 书中其他(也许更有价值)的建议比较轻松。 在调试部分中,请注意:“如果您看到蹄印,则认为是马,而不是斑马。”也就是说,怀疑一切,但要在最突出的地方开始寻找问题。 有一些建议可以估算时间和费用,并将测试集成到开发过程中。 您将需要一份The Pragmatic Programmer的副本, 原因有二:它比您费心地说清楚地显示了您自己积累的智慧,并且向您介绍了您可能尚未考虑的工作方法。

1.代码完成2

就是这样! 如果您要成为一名出色的软件工程师,则需要阅读第一本书(IMHO)。 史蒂夫·麦康奈尔(Steve McConnell)的原始《代码完成》(CODE COMPLETE)被广泛认为是编程的最佳实用指南之一,已经十多年来一直帮助开发人员编写更好的软件。 现在,这本经典书籍已经通过领先的实践和数百个新的代码示例进行了全面的更新和修订,从而说明了软件构建的艺术和科学。 麦康奈尔捕获了研究,学术界和日常商业实践中可用的知识,将最有效的技术和必须了解的原理综合为清晰实用的指导。 无论您的经验水平,开发环境或项目规模如何,本书都将为您提供启发和启发,并帮助您构建最高质量的代码。

探索永恒的技术和策略来帮助您:

  • 设计以最小的复杂度和最大的创造力
  • 收获合作发展的好处
  • 应用防御性编程技术来减少和清除错误
  • 利用机会重构或演化代码,并安全地进行
  • 使用适合您项目的施工实践
  • 快速有效地调试问题
  • 尽早正确解决关键施工问题
  • 在项目的开始,中间和结尾建立质量

好吧,仅此而已!

如果您已阅读其中的任何内容或对软件开发人员有其他必读内容,请在评论中让我知道!

如果您喜欢这篇文章,那么您最大的赞美就是与您认为会喜欢的人分享!

此外,如果您不想错过任何帖子,请单击右下角的关注按钮订阅此博客! 感谢您的阅读,祝您有美好的一天,永远都不要停止学习!