本文翻译自国外论坛 medium,原文地址:https://irina-seng.medium.com/top-20-books-a-software-developer-must-read-updated-b24bcc9ee3d
持续学习的心态是软件开发人员想要保持专业相关性并增长自身价值的关键品质。
在这篇博文中,我将推荐 20 本最受欢迎的软件工程书籍清单,以帮助你实现这一目标。
面向软件开发人员的书籍
对于想要了解最新趋势并敞开心扉的开发者来说,这份清单是必不可少的。
1.《流畅的Python》
流畅的Python
描述:Python 的简单性让你可以快速提高工作效率,但这通常意味着你不会使用它所提供的全部功能。通过本书,你将学习如何利用其最佳创意编写高效、现代的 Python 3 代码。
作者 Luciano Ramalho 将指导你了解 Python 的核心语言特性和库,并教你如何使代码更短、更快和更具可读性。
《流畅的Python》第二版对整本书进行了重大更新,包括:
-
特殊方法:Python 对象行为一致的关键
-
数据结构:序列、字典、集合、Unicode 和数据类
-
函数作为对象:函数声明中的一流函数、相关设计模式和类型提示
-
面向对象的习语:组合、继承、混合、接口、运算符重载、静态类型和协议
-
控制流:上下文管理器、生成器、协程、异步/等待和线程/进程池
-
元编程:属性、属性描述符、类装饰器和比元类更简单的新类元编程挂钩。
2.《学习 Go 语言》
学习 Go 语言
描述:Go 正迅速成为构建 Web 服务的首选语言。虽然有很多教程可以向具有其他编程语言经验的开发人员教授 Go 的语法,但教程是不够的。他们不教授 Go 的习惯用法,因此开发人员最终会重新创建在 Go 上下文中没有意义的模式。本书提供了编写清晰且地道的 Go 所需的基本背景。
无论你的经验水平如何,你都将学习如何像 Go 开发人员一样思考。作者 Jon Bodner 介绍了经验丰富的 Go 开发人员采用的设计模式,并探讨了使用它们的基本原理。你还将预览 Go 即将推出的泛型支持以及它如何融入该语言。
-
学习如何在 Go 中编写地道的代码并设计一个 Go 项目
-
了解 Go 中设计决策的原因
-
为独立开发者或团队设置 Go 开发环境
-
了解如何以及何时使用反射、不安全和 cgo
-
探索 Go 的特性如何让语言高效运行
-
知道哪些 Go 特性你应该少用或根本不用
3.《软件架构:架构模式、特征及实践指南》
软件架构:架构模式、特征及实践指南
描述:全球薪酬调查定期将软件架构师列为前 10 名最佳工作,但没有真正的指南可以帮助开发人员成为架构师。到目前为止。本书首次全面概述了软件架构的许多方面。有抱负的和现有的架构师都将研究架构特征、架构模式、组件确定、图表和呈现架构、演化架构和许多其他主题。
Mark Richards 和 Neal Ford 是多年来专业教授软件架构课程的实践从业者 —— 专注于适用于所有技术栈的架构原则。考虑到过去十年的所有创新,你将以现代的眼光探索软件架构。
本书考察:
-
架构模式:许多架构决策的技术基础
-
组件:标识、耦合、内聚、分区和粒度
-
软技能:有效的团队管理、会议、谈判、演示等
-
现代性:在过去几年中发生根本变化的工程实践和操作方法
-
架构作为一门工程学科:可重复的结果、指标和具体的评估,增加了软件架构的严谨性
4.《Python编程:从入门到实践》
Python编程:从入门到实践
描述:这是世界上最畅销的 Python 书籍的第二版。 Python 速成课程,第 2 版简单介绍了 Python 编程的核心。作者埃里克·马修斯 (Eric Matthes) 摒弃了可能妨碍学习如何编程的那种乏味、不必要的信息,而是选择提供一般编程概念、Python 基础知识和问题解决方面的基础。本书第二部分中的三个真实世界的项目允许读者以有用的方式应用他们的知识。
读者将学习如何创建简单的视频游戏,使用数据可视化技术制作图形和图表,以及构建和部署交互式 Web 应用程序。《Python编程:从入门到实践》第 2 版向初学者快速教授 Python 的基本知识,以便他们可以构建实用的程序并开发强大的编程技术。
5.《深入浅出设计模式》
深入浅出设计模式
描述:
你将从这本书中学到什么?
你知道你不想重新发明轮子,所以你看看设计模式:那些遇到过相同软件设计问题的人的经验教训。使用设计模式,你可以利用其他人的最佳实践和经验,这样你就可以将时间花在更具挑战性的事情上以及更有趣的东西。本书向你展示了重要的模式、何时使用它们以及为什么使用它们、如何将它们应用到你自己的设计中,以及它们所基于的面向对象设计原则。加入成千上万通过《深入浅出设计模式》提高了面向对象设计技能的开发人员。
这本书有什么特别之处?
如果你读过《深入浅出设计模式》一书,你就会知道会发生什么:一种视觉丰富的格式,专为你的大脑工作方式而设计。借助 《深入浅出设计模式》你将以一种不会让你入睡的方式学习设计原则和模式,因此你可以走出去解决软件设计问题并与团队中的其他人交流模式语言。
6.《代码整洁之道》
代码整洁之道
描述:即使是糟糕的代码也能正常运行。但如果代码不干净,它可能会让开发组织崩溃。每年,由于编写不当的代码,都会损失无数的时间和大量的资源。
你会从事什么样的工作?你会阅读代码 — 很多代码。你将面临思考该代码的正确之处和错误之处的挑战。更重要的是,你将面临重新评估你的专业价值观和对你的技术承诺的挑战。
读者能够从本书学到:
-
如何区分好代码和坏代码
-
如何编写好的代码以及如何将糟糕的代码转化为好的代码
-
如何创建好的名称、好的函数、好的对象和好的类
-
如何格式化代码以获得最大的可读性
-
如何在不混淆代码逻辑的情况下实现完整的错误处理
-
如何进行单元测试和实践测试驱动开发
本书是任何有兴趣编写更好代码的开发人员、软件工程师、项目经理、团队负责人或系统分析师的必备书籍。
7.《RUST程序设计:第二版》
RUST程序设计:第二版
描述:系统编程为世界的计算提供了基础。编写对性能敏感的代码需要一种编程语言,使程序员能够控制内存、处理器时间和其他系统资源的使用方式。 Rust 系统编程语言将这种控制与现代类型系统结合起来,现代类型系统可以捕获广泛的常见错误,从内存管理错误到线程之间的数据竞争。
通过这本书,经验丰富的系统程序员将学习如何使用 Rust 成功地弥合性能和安全性之间的差距。 Jim Blandy、Jason Orendorff 和 Leonora Tindall 展示了 Rust 的特性如何通过将可预测的性能与内存安全和可信赖的并发性相结合,让程序员控制内存消耗和处理器的使用。
你会学到:
-
Rust 的基本数据类型以及所有权和借用的核心概念
-
如何编写具有特征和泛型的灵活、高效的代码
-
如何编写没有数据竞争的快速多线程代码
-
Rust 的关键强大工具:闭包、迭代器和异步编程
-
集合、字符串和文本、输入和输出、宏、不安全代码和外部函数接口
8.《OCP ORACLE CERTIFIED PROFESSIONAL JAVA SE 11 DEVELOPER COMPLETE STUDY GUIDE》
OCP ORACLE CERTIFIED PROFESSIONAL JAVA SE 11 DEVELOPER COMPLETE STUDY GUIDE
截至目前,本书还没有中文版。
描述:本书 OCP Oracle Certified Professional Java SE 11 Developer 认证最全面的准备指南 — 它涵盖了考试 1Z0–819 和升级考试 1Z0–817(以及退休的程序员 I 考试 1Z0–815 和程序员 II考试 1Z0–816)!
Java 广泛用于后端云应用程序、软件即服务应用程序 (SAAS),并且是用于开发 Android 应用程序的主要语言。这种面向对象的编程语言旨在在所有支持 Java 的平台上运行而无需重新编译。 Oracle Java Programmer 认证受到整个技术行业雇主的高度重视。
本书能学到:
-
帮助你掌握最新OCP考试深度、难度、新模块题目的变化
-
涵盖所有考试目标,例如 Java 数组、原始数据类型、字符串 API、对象和类、运算符和决策结构,以及应用封装
-
允许开发人员了解所有最新的 Java 材料,如 lambda 表达式、流、并发、注释、泛型和模块
-
提供构建 Java 应用程序、处理异常、通过接口编程、Java SE 中的安全编码等实用方法
-
使你能够获得通过 OCP 考试所需的信息、理解和练习
9.《软件架构难点解惑》
软件架构难点解惑
描述:在软件架构中没有简单的决定。相反,有许多困难的部分 — 困难的问题或没有最佳实践的问题 — 迫使你在各种妥协中做出选择。通过本书,你将学习如何批判性地思考分布式架构所涉及的权衡。
架构资深人士和执业顾问 Neal Ford、Mark Richards、Pramod Sadalage 和 Zhamak Dehghani 讨论了选择合适架构的策略。通过交织一个虚构的技术专家组(Sysop Squad)的故事,他们研究了从如何确定服务粒度、管理工作流和编排、管理和解耦合同、管理分布式事务到如何优化操作特性(例如可扩展性)的所有内容、弹性和性能。
通过关注常见问题,本书提供的技术可帮助你在面对作为架构师所面临的问题时发现和权衡取舍。
-
分析权衡并有效地记录你的决定
-
就服务粒度做出更好的决策
-
了解拆分单体应用程序的复杂性
-
管理和解耦服务之间的契约
-
在高度分布式架构中处理数据
-
学习在分解应用程序时管理工作流和事务的模式
10.《Google软件工程》
Google软件工程
描述:今天软件工程师不仅需要知道如何有效地编程,还需要知道如何开发适当的工程实践来使他们的代码库可持续和健康。本书强调了普通编程者和软件工程之间的这种区别。
软件工程师如何管理一个动态代码库,该代码库会在其整个生命周期内不断发展并响应不断变化的需求和要求?根据他们在 Google 的经验,软件工程师 Titus Winters 和 Hyrum Wright 以及技术作家 Tom Manshreck 对一些世界领先的从业者如何构建和维护软件提出了坦诚而有见地的看法。本书涵盖了 Google 独特的工程文化、流程和工具,以及这些方面如何提高工程组织的效率。
你将探索软件组织在设计、架构、编写和维护代码时应牢记的三个基本原则:
-
时间如何影响软件的可持续性以及如何使你的代码随着时间的推移具有弹性
-
规模如何影响工程组织内软件实践的可行性
-
典型工程师在评估设计和开发决策时需要做出哪些权衡
11.《利用 Python 进行数据分析》
利用 Python 进行数据分析
描述:获取有关在 Python 中操作、处理、清理和处理数据集的完整说明。本书的第二版针对 Python 3.6 进行了更新,其中包含实用案例研究,向你展示如何有效解决广泛的数据分析问题。你将在此过程中学习最新版本的 pandas、NumPy、IPython 和 Jupyter。
本书由 Python pandas 项目的创建者韦斯·麦金尼 (Wes McKinney) 撰写,是对 Python 数据科学工具的现代实用介绍。它非常适合刚接触 Python 的分析师和刚接触数据科学和科学计算的 Python 程序员。 GitHub 上提供了数据文件和相关材料。
-
使用 IPython shell 和 Jupyter notebook 进行探索性计算 学习 NumPy(数值 Python)中的基本和高级功能
-
开始使用pandas库中的数据分析工具
-
使用灵活的工具加载、清理、转换、合并和重塑数据
-
使用 matplotlib 创建信息可视化
-
应用 pandas groupby 工具对数据集进行切片、切块和汇总
-
分析和操作规则和不规则的时间序列数据
-
学习如何通过全面、详细的示例解决现实世界的数据分析问题
12.《Effective JAVA》
Effective JAVA
描述:自从上一版 Effective Java 在 Java 6 发布后不久发布以来,Java 发生了翻天覆地的变化。这个 Jolt 获奖经典现在已经彻底更新,以充分利用最新的语言和库功能。现代 Java 对多种范例的支持增加了对特定最佳实践建议的需求,本书提供了这些建议。
与以前的版本一样,第三版 Effective Java 的每一章都由几个“项目”组成,每个项目都以一篇简短的独立文章的形式呈现,提供具体建议、对 Java 平台微妙之处的洞察以及更新的代码示例。对每个项目的全面描述和解释阐明了该做什么、不该做什么以及为什么。
本书涵盖:
-
功能接口、lambda 表达式、方法引用和流
-
接口中的默认和静态方法
-
类型推断,包括通用类型的菱形运算符
-
@SafeVarargs 注释
-
try-with-resources 语句
-
新的库特性,例如 Optional 接口、java.time 和集合的便捷工厂方法
13.《Python入门》
Python入门
描述:易于理解和有趣的阅读,这个更新版本的《Python入门》是初级程序员和语言新手的理想选择。作者 Bill Lubanovic 将带你从基础知识到更复杂、更多样化的主题,将教程与菜谱式代码食谱相结合,以解释 Python 3 中的概念。章末练习可帮助你练习所学内容。
你将打下坚实的语言基础,包括测试、调试、代码重用和其他开发技巧的最佳实践。本书还向你展示了如何使用各种 Python 工具和开源包将 Python 用于商业、科学和艺术领域的应用程序。
14.《每个程序员都应该知道的40个算法》
每个程序员都应该知道的40个算法
描述:算法一直在计算科学和实践中发挥着重要作用。除了传统计算之外,使用算法解决现实世界问题的能力是任何开发人员或程序员都必须具备的一项重要技能。本书不仅会帮助你培养选择和使用算法来解决现实问题的技能,还会帮助你理解它的工作原理。
你将学到什么:
-
探索 Python 库中的现有数据结构和算法
-
使用网络分析实施用于欺诈检测的图形算法
-
使用机器学习算法对相似的推文进行聚类并实时处理 Twitter 数据
-
使用监督学习算法预测天气
-
使用神经网络进行物体检测
-
创建一个向订阅者推荐相关电影的推荐引擎
-
在谷歌云平台 (GCP) 上使用对称和非对称加密实现万无一失的安全
本书适合谁:
本书适用于想要了解使用算法解决问题和编写高效代码的程序员或开发人员。无论你是希望以清晰简洁的方式学习最常用算法的初学者,还是希望探索数据科学、机器学习和密码学领域前沿算法的经验丰富的程序员,你都会发现这本书很有用。虽然 Python 编程经验是必须的,但数据科学知识会有所帮助,但不是必需的。
15. 《程序员修炼之道——从小工到专家》
程序员修炼之道——从小工到专家
描述:《程序员修炼之道》是你多年来阅读、重读和再次阅读的稀有技术书籍之一。无论你是该领域的新手还是经验丰富的从业者,每次都会获得新的见解。
主题范围从个人责任和职业发展到使你的代码保持灵活性并易于适应和重用的架构技术。阅读本书,你将学习如何:
-
对抗软件腐烂
-
不断学习
-
避免重复知识的陷阱
-
编写灵活、动态和适应性强的代码
-
利用基本工具的力量
-
避免巧合编程
-
了解真实需求
-
解决并发代码底层问题
-
防范安全漏洞
-
建立务实的程序员团队
-
对你的工作和事业负责
-
无情且有效地进行测试,包括基于属性的测试
-
实施实用入门工具包
-
取悦你的用户
16.《整洁架构之道》
整洁架构之道
描述:本书针对你将面临的真正挑战提供了直接、严肃的解决方案 — 这些挑战将成就或破坏你的项目。
-
了解软件架构师需要实现什么——以及实现它的核心原则和实践
-
掌握解决功能、组件分离和数据管理的基本软件设计原则
-
了解编程范式如何通过限制开发人员可以做什么来强加纪律
-
了解什么是至关重要的,什么只是“细节”
-
为网络、数据库、胖客户端、控制台和嵌入式应用程序实施最佳的高级结构
-
定义适当的边界和层,并组织组件和服务
-
查看为什么设计和架构会出错,以及如何防止(或修复)这些故障
《整洁架构之道》是每一位当前或有抱负的软件架构师、系统分析师、系统设计师和软件经理的必备读物,也是每一位必须执行他人设计的程序员的必备读物。
17. 《领域驱动设计学习手册》
领域驱动设计学习手册
描述:构建软件比以往任何时候都更难。作为开发人员,你不仅要追逐不断变化的技术趋势,还需要了解软件背后的业务领域。这本实用的书为你提供了一组核心模式、原则和实践,用于分析业务领域、理解业务战略,最重要的是,使软件设计与其业务需求保持一致。
作者 Vlad Khononov 向你展示了这些实践如何导致业务逻辑的稳健实施并有助于面向未来的软件设计和架构。你将检查领域驱动设计 (DDD) 与其他方法之间的关系,以确保你做出满足业务需求的架构决策。你还将探索在初创公司中实施 DDD 的真实故事。
通过本书,你将学习如何:
-
分析公司的业务领域以了解你正在构建的系统如何符合其竞争战略
-
使用 DDD 的战略和战术工具来构建满足业务需求的有效软件解决方案
-
建立对你遇到的业务领域的共同理解
-
将系统分解为有界上下文
-
协调多个团队的工作
-
逐步将 DDD 引入棕地项目
18.《算法图解》
算法图解
描述:Grokking Algorithms 是对这一核心计算机科学主题的友好解读。在其中,你将学习如何将常用算法应用于你每天面临的实际编程问题。你将从排序和搜索等任务开始。随着技能的积累,你将解决更复杂的问题,例如数据压缩和人工智能。每个精心呈现的示例都包含有用的图表和完整注释的 Python 代码示例。到本书结束时,你将掌握广泛适用的算法以及如何以及何时使用它们。
19.《C# 9.0 in a Nutshell: The Definitive Reference》
C# 9.0 in a Nutshell: The Definitive Reference
描述:当你对 C# 9.0 或 .NET 5 有疑问时,这本畅销指南将为你提供所需的答案。 C# 是一种具有不同寻常的灵活性和广度的语言,但随着它的不断发展,还有很多东西需要学习。按照 O'Reilly 的 Nutshell 指南的传统,这个彻底更新的版本简直就是当今可用的 C# 语言的最佳单卷参考。
《C# 9.0 in a Nutshell》 围绕概念和用例进行组织,为中级和高级程序员提供了 C# 和 .NET 的简明地图,该地图还探索了重要的深度。
-
快速掌握 C#,从语法和变量到指针、记录、闭包和模式等高级主题
-
通过专门针对该主题的三章深入挖掘 LINQ
-
探索并发和异步、高级线程和并行编程
-
使用 .NET 功能,包括正则表达式、网络、跨度、反射和密码学
20.《微服务架构设计模式》
微服务架构设计模式
描述:《微服务架构设计模式》教你如何开发和部署基于生产质量的微服务应用程序。这套无价的设计模式建立在几十年的分布式系统经验之上,添加了新的模式来编写服务并将它们组合成在现实世界条件下可扩展和可靠运行的系统。本书不仅仅是一个模式目录,还提供了以经验为导向的建议,以帮助你设计、实施、测试和部署基于微服务的应用程序。
总结
至此本文所讲地二十本书就全部介绍完了,希望能对大家有所帮助。
关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,你的关注将是我的更新动力!