軟件開發(fā)人員必須閱讀的20本書

本文翻譯自國外論壇 medium,原文地址:https://irina-seng.medium.com/top-20-books-a-software-developer-must-read-updated-b24bcc9ee3d
持續(xù)學習的心態(tài)是軟件開發(fā)人員想要保持專業(yè)相關性并增長自身價值的關鍵品質。
在這篇博文中,我將推薦 20 本最受歡迎的軟件工程書籍清單,以幫助你實現(xiàn)這一目標。
面向軟件開發(fā)人員的書籍
對于想要了解最新趨勢并敞開心扉的開發(fā)者來說,這份清單是必不可少的。
1.《流暢的Python》

流暢的Python
描述:Python 的簡單性讓你可以快速提高工作效率,但這通常意味著你不會使用它所提供的全部功能。通過本書,你將學習如何利用其最佳創(chuàng)意編寫高效、現(xiàn)代的 Python 3 代碼。
作者 Luciano Ramalho 將指導你了解 Python 的核心語言特性和庫,并教你如何使代碼更短、更快和更具可讀性。
《流暢的Python》第二版對整本書進行了重大更新,包括:
特殊方法:Python 對象行為一致的關鍵
數據結構:序列、字典、集合、Unicode 和數據類
函數作為對象:函數聲明中的一流函數、相關設計模式和類型提示
面向對象的習語:組合、繼承、混合、接口、運算符重載、靜態(tài)類型和協(xié)議
控制流:上下文管理器、生成器、協(xié)程、異步/等待和線程/進程池
元編程:屬性、屬性描述符、類裝飾器和比元類更簡單的新類元編程掛鉤。
2.《學習 Go 語言》

學習 Go 語言
描述:Go 正迅速成為構建 Web 服務的首選語言。雖然有很多教程可以向具有其他編程語言經驗的開發(fā)人員教授 Go 的語法,但教程是不夠的。他們不教授 Go 的習慣用法,因此開發(fā)人員最終會重新創(chuàng)建在 Go 上下文中沒有意義的模式。本書提供了編寫清晰且地道的 Go 所需的基本背景。
無論你的經驗水平如何,你都將學習如何像 Go 開發(fā)人員一樣思考。作者 Jon Bodner 介紹了經驗豐富的 Go 開發(fā)人員采用的設計模式,并探討了使用它們的基本原理。你還將預覽 Go 即將推出的泛型支持以及它如何融入該語言。
學習如何在 Go 中編寫地道的代碼并設計一個 Go 項目
了解 Go 中設計決策的原因
為獨立開發(fā)者或團隊設置 Go 開發(fā)環(huán)境
了解如何以及何時使用反射、不安全和 cgo
探索 Go 的特性如何讓語言高效運行
知道哪些 Go 特性你應該少用或根本不用
3.《軟件架構:架構模式、特征及實踐指南》

軟件架構:架構模式、特征及實踐指南
描述:全球薪酬調查定期將軟件架構師列為前 10 名最佳工作,但沒有真正的指南可以幫助開發(fā)人員成為架構師。到目前為止。本書首次全面概述了軟件架構的許多方面。有抱負的和現(xiàn)有的架構師都將研究架構特征、架構模式、組件確定、圖表和呈現(xiàn)架構、演化架構和許多其他主題。
Mark Richards 和 Neal Ford 是多年來專業(yè)教授軟件架構課程的實踐從業(yè)者 —— 專注于適用于所有技術棧的架構原則??紤]到過去十年的所有創(chuàng)新,你將以現(xiàn)代的眼光探索軟件架構。
本書考察:
架構模式:許多架構決策的技術基礎
組件:標識、耦合、內聚、分區(qū)和粒度
軟技能:有效的團隊管理、會議、談判、演示等
現(xiàn)代性:在過去幾年中發(fā)生根本變化的工程實踐和操作方法
架構作為一門工程學科:可重復的結果、指標和具體的評估,增加了軟件架構的嚴謹性
4.《Python編程:從入門到實踐》

Python編程:從入門到實踐
描述:這是世界上最暢銷的 Python 書籍的第二版。 Python 速成課程,第 2 版簡單介紹了 Python 編程的核心。作者埃里克·馬修斯 (Eric Matthes) 摒棄了可能妨礙學習如何編程的那種乏味、不必要的信息,而是選擇提供一般編程概念、Python 基礎知識和問題解決方面的基礎。本書第二部分中的三個真實世界的項目允許讀者以有用的方式應用他們的知識。
讀者將學習如何創(chuàng)建簡單的視頻游戲,使用數據可視化技術制作圖形和圖表,以及構建和部署交互式 Web 應用程序?!禤ython編程:從入門到實踐》第 2 版向初學者快速教授 Python 的基本知識,以便他們可以構建實用的程序并開發(fā)強大的編程技術。
5.《深入淺出設計模式》

深入淺出設計模式
描述:
你將從這本書中學到什么?
你知道你不想重新發(fā)明輪子,所以你看看設計模式:那些遇到過相同軟件設計問題的人的經驗教訓。使用設計模式,你可以利用其他人的最佳實踐和經驗,這樣你就可以將時間花在更具挑戰(zhàn)性的事情上以及更有趣的東西。本書向你展示了重要的模式、何時使用它們以及為什么使用它們、如何將它們應用到你自己的設計中,以及它們所基于的面向對象設計原則。加入成千上萬通過《深入淺出設計模式》提高了面向對象設計技能的開發(fā)人員。
這本書有什么特別之處?
如果你讀過《深入淺出設計模式》一書,你就會知道會發(fā)生什么:一種視覺豐富的格式,專為你的大腦工作方式而設計。借助 《深入淺出設計模式》你將以一種不會讓你入睡的方式學習設計原則和模式,因此你可以走出去解決軟件設計問題并與團隊中的其他人交流模式語言。
6.《代碼整潔之道》

代碼整潔之道
描述:即使是糟糕的代碼也能正常運行。但如果代碼不干凈,它可能會讓開發(fā)組織崩潰。每年,由于編寫不當的代碼,都會損失無數的時間和大量的資源。
你會從事什么樣的工作?你會閱讀代碼 — 很多代碼。你將面臨思考該代碼的正確之處和錯誤之處的挑戰(zhàn)。更重要的是,你將面臨重新評估你的專業(yè)價值觀和對你的技術承諾的挑戰(zhàn)。
讀者能夠從本書學到:
如何區(qū)分好代碼和壞代碼
如何編寫好的代碼以及如何將糟糕的代碼轉化為好的代碼
如何創(chuàng)建好的名稱、好的函數、好的對象和好的類
如何格式化代碼以獲得最大的可讀性
如何在不混淆代碼邏輯的情況下實現(xiàn)完整的錯誤處理
如何進行單元測試和實踐測試驅動開發(fā)
本書是任何有興趣編寫更好代碼的開發(fā)人員、軟件工程師、項目經理、團隊負責人或系統(tǒng)分析師的必備書籍。
7.《RUST程序設計:第二版》

RUST程序設計:第二版
描述:系統(tǒng)編程為世界的計算提供了基礎。編寫對性能敏感的代碼需要一種編程語言,使程序員能夠控制內存、處理器時間和其他系統(tǒng)資源的使用方式。 Rust 系統(tǒng)編程語言將這種控制與現(xiàn)代類型系統(tǒng)結合起來,現(xiàn)代類型系統(tǒng)可以捕獲廣泛的常見錯誤,從內存管理錯誤到線程之間的數據競爭。
通過這本書,經驗豐富的系統(tǒng)程序員將學習如何使用 Rust 成功地彌合性能和安全性之間的差距。 Jim Blandy、Jason Orendorff 和 Leonora Tindall 展示了 Rust 的特性如何通過將可預測的性能與內存安全和可信賴的并發(fā)性相結合,讓程序員控制內存消耗和處理器的使用。
你會學到:
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),并且是用于開發(fā) Android 應用程序的主要語言。這種面向對象的編程語言旨在在所有支持 Java 的平臺上運行而無需重新編譯。 Oracle Java Programmer 認證受到整個技術行業(yè)雇主的高度重視。
本書能學到:
幫助你掌握最新OCP考試深度、難度、新模塊題目的變化
涵蓋所有考試目標,例如 Java 數組、原始數據類型、字符串 API、對象和類、運算符和決策結構,以及應用封裝
允許開發(fā)人員了解所有最新的 Java 材料,如 lambda 表達式、流、并發(fā)、注釋、泛型和模塊
提供構建 Java 應用程序、處理異常、通過接口編程、Java SE 中的安全編碼等實用方法
使你能夠獲得通過 OCP 考試所需的信息、理解和練習
9.《軟件架構難點解惑》

軟件架構難點解惑
描述:在軟件架構中沒有簡單的決定。相反,有許多困難的部分 — 困難的問題或沒有最佳實踐的問題 — 迫使你在各種妥協(xié)中做出選擇。通過本書,你將學習如何批判性地思考分布式架構所涉及的權衡。
架構資深人士和執(zhí)業(yè)顧問 Neal Ford、Mark Richards、Pramod Sadalage 和 Zhamak Dehghani 討論了選擇合適架構的策略。通過交織一個虛構的技術專家組(Sysop Squad)的故事,他們研究了從如何確定服務粒度、管理工作流和編排、管理和解耦合同、管理分布式事務到如何優(yōu)化操作特性(例如可擴展性)的所有內容、彈性和性能。
通過關注常見問題,本書提供的技術可幫助你在面對作為架構師所面臨的問題時發(fā)現(xiàn)和權衡取舍。
分析權衡并有效地記錄你的決定
就服務粒度做出更好的決策
了解拆分單體應用程序的復雜性
管理和解耦服務之間的契約
在高度分布式架構中處理數據
學習在分解應用程序時管理工作流和事務的模式
10.《Google軟件工程》

Google軟件工程
描述:今天軟件工程師不僅需要知道如何有效地編程,還需要知道如何開發(fā)適當的工程實踐來使他們的代碼庫可持續(xù)和健康。本書強調了普通編程者和軟件工程之間的這種區(qū)別。
軟件工程師如何管理一個動態(tài)代碼庫,該代碼庫會在其整個生命周期內不斷發(fā)展并響應不斷變化的需求和要求?根據他們在 Google 的經驗,軟件工程師 Titus Winters 和 Hyrum Wright 以及技術作家 Tom Manshreck 對一些世界領先的從業(yè)者如何構建和維護軟件提出了坦誠而有見地的看法。本書涵蓋了 Google 獨特的工程文化、流程和工具,以及這些方面如何提高工程組織的效率。
你將探索軟件組織在設計、架構、編寫和維護代碼時應牢記的三個基本原則:
時間如何影響軟件的可持續(xù)性以及如何使你的代碼隨著時間的推移具有彈性
規(guī)模如何影響工程組織內軟件實踐的可行性
典型工程師在評估設計和開發(fā)決策時需要做出哪些權衡
11.《利用 Python 進行數據分析》

利用 Python 進行數據分析
描述:獲取有關在 Python 中操作、處理、清理和處理數據集的完整說明。本書的第二版針對 Python 3.6 進行了更新,其中包含實用案例研究,向你展示如何有效解決廣泛的數據分析問題。你將在此過程中學習最新版本的 pandas、NumPy、IPython 和 Jupyter。
本書由 Python pandas 項目的創(chuàng)建者韋斯·麥金尼 (Wes McKinney) 撰寫,是對 Python 數據科學工具的現(xiàn)代實用介紹。它非常適合剛接觸 Python 的分析師和剛接觸數據科學和科學計算的 Python 程序員。 GitHub 上提供了數據文件和相關材料。
使用 IPython shell 和 Jupyter notebook 進行探索性計算 學習 NumPy(數值 Python)中的基本和高級功能
開始使用pandas庫中的數據分析工具
使用靈活的工具加載、清理、轉換、合并和重塑數據
使用 matplotlib 創(chuàng)建信息可視化
應用 pandas groupby 工具對數據集進行切片、切塊和匯總
分析和操作規(guī)則和不規(guī)則的時間序列數據
學習如何通過全面、詳細的示例解決現(xiàn)實世界的數據分析問題
12.《Effective JAVA》

Effective JAVA
描述:自從上一版 Effective Java 在 Java 6 發(fā)布后不久發(fā)布以來,Java 發(fā)生了翻天覆地的變化。這個 Jolt 獲獎經典現(xiàn)在已經徹底更新,以充分利用最新的語言和庫功能?,F(xiàn)代 Java 對多種范例的支持增加了對特定最佳實踐建議的需求,本書提供了這些建議。
與以前的版本一樣,第三版 Effective Java 的每一章都由幾個“項目”組成,每個項目都以一篇簡短的獨立文章的形式呈現(xiàn),提供具體建議、對 Java 平臺微妙之處的洞察以及更新的代碼示例。對每個項目的全面描述和解釋闡明了該做什么、不該做什么以及為什么。
本書涵蓋:
功能接口、lambda 表達式、方法引用和流
接口中的默認和靜態(tài)方法
類型推斷,包括通用類型的菱形運算符
@SafeVarargs 注釋
try-with-resources 語句
新的庫特性,例如 Optional 接口、java.time 和集合的便捷工廠方法
13.《Python入門》

Python入門
描述:易于理解和有趣的閱讀,這個更新版本的《Python入門》是初級程序員和語言新手的理想選擇。作者 Bill Lubanovic 將帶你從基礎知識到更復雜、更多樣化的主題,將教程與菜譜式代碼食譜相結合,以解釋 Python 3 中的概念。章末練習可幫助你練習所學內容。
你將打下堅實的語言基礎,包括測試、調試、代碼重用和其他開發(fā)技巧的最佳實踐。本書還向你展示了如何使用各種 Python 工具和開源包將 Python 用于商業(yè)、科學和藝術領域的應用程序。
14.《每個程序員都應該知道的40個算法》

每個程序員都應該知道的40個算法
描述:算法一直在計算科學和實踐中發(fā)揮著重要作用。除了傳統(tǒng)計算之外,使用算法解決現(xiàn)實世界問題的能力是任何開發(fā)人員或程序員都必須具備的一項重要技能。本書不僅會幫助你培養(yǎng)選擇和使用算法來解決現(xiàn)實問題的技能,還會幫助你理解它的工作原理。
你將學到什么:
探索 Python 庫中的現(xiàn)有數據結構和算法
使用網絡分析實施用于欺詐檢測的圖形算法
使用機器學習算法對相似的推文進行聚類并實時處理 Twitter 數據
使用監(jiān)督學習算法預測天氣
使用神經網絡進行物體檢測
創(chuàng)建一個向訂閱者推薦相關電影的推薦引擎
在谷歌云平臺 (GCP) 上使用對稱和非對稱加密實現(xiàn)萬無一失的安全
本書適合誰:
本書適用于想要了解使用算法解決問題和編寫高效代碼的程序員或開發(fā)人員。無論你是希望以清晰簡潔的方式學習最常用算法的初學者,還是希望探索數據科學、機器學習和密碼學領域前沿算法的經驗豐富的程序員,你都會發(fā)現(xiàn)這本書很有用。雖然 Python 編程經驗是必須的,但數據科學知識會有所幫助,但不是必需的。
15. 《程序員修煉之道——從小工到專家》

程序員修煉之道——從小工到專家
描述:《程序員修煉之道》是你多年來閱讀、重讀和再次閱讀的稀有技術書籍之一。無論你是該領域的新手還是經驗豐富的從業(yè)者,每次都會獲得新的見解。
主題范圍從個人責任和職業(yè)發(fā)展到使你的代碼保持靈活性并易于適應和重用的架構技術。閱讀本書,你將學習如何:
對抗軟件腐爛
不斷學習
避免重復知識的陷阱
編寫靈活、動態(tài)和適應性強的代碼
利用基本工具的力量
避免巧合編程
了解真實需求
解決并發(fā)代碼底層問題
防范安全漏洞
建立務實的程序員團隊
對你的工作和事業(yè)負責
無情且有效地進行測試,包括基于屬性的測試
實施實用入門工具包
取悅你的用戶
16.《整潔架構之道》

整潔架構之道
描述:本書針對你將面臨的真正挑戰(zhàn)提供了直接、嚴肅的解決方案 — 這些挑戰(zhàn)將成就或破壞你的項目。
了解軟件架構師需要實現(xiàn)什么——以及實現(xiàn)它的核心原則和實踐
掌握解決功能、組件分離和數據管理的基本軟件設計原則
了解編程范式如何通過限制開發(fā)人員可以做什么來強加紀律
了解什么是至關重要的,什么只是“細節(jié)”
為網絡、數據庫、胖客戶端、控制臺和嵌入式應用程序實施最佳的高級結構
定義適當的邊界和層,并組織組件和服務
查看為什么設計和架構會出錯,以及如何防止(或修復)這些故障
《整潔架構之道》是每一位當前或有抱負的軟件架構師、系統(tǒng)分析師、系統(tǒng)設計師和軟件經理的必備讀物,也是每一位必須執(zhí)行他人設計的程序員的必備讀物。
17. 《領域驅動設計學習手冊》

領域驅動設計學習手冊
描述:構建軟件比以往任何時候都更難。作為開發(fā)人員,你不僅要追逐不斷變化的技術趨勢,還需要了解軟件背后的業(yè)務領域。這本實用的書為你提供了一組核心模式、原則和實踐,用于分析業(yè)務領域、理解業(yè)務戰(zhàn)略,最重要的是,使軟件設計與其業(yè)務需求保持一致。
作者 Vlad Khononov 向你展示了這些實踐如何導致業(yè)務邏輯的穩(wěn)健實施并有助于面向未來的軟件設計和架構。你將檢查領域驅動設計 (DDD) 與其他方法之間的關系,以確保你做出滿足業(yè)務需求的架構決策。你還將探索在初創(chuàng)公司中實施 DDD 的真實故事。
通過本書,你將學習如何:
分析公司的業(yè)務領域以了解你正在構建的系統(tǒng)如何符合其競爭戰(zhàn)略
使用 DDD 的戰(zhàn)略和戰(zhàn)術工具來構建滿足業(yè)務需求的有效軟件解決方案
建立對你遇到的業(yè)務領域的共同理解
將系統(tǒng)分解為有界上下文
協(xié)調多個團隊的工作
逐步將 DDD 引入棕地項目
18.《算法圖解》

算法圖解
描述:Grokking Algorithms 是對這一核心計算機科學主題的友好解讀。在其中,你將學習如何將常用算法應用于你每天面臨的實際編程問題。你將從排序和搜索等任務開始。隨著技能的積累,你將解決更復雜的問題,例如數據壓縮和人工智能。每個精心呈現(xiàn)的示例都包含有用的圖表和完整注釋的 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# 是一種具有不同尋常的靈活性和廣度的語言,但隨著它的不斷發(fā)展,還有很多東西需要學習。按照 O'Reilly 的 Nutshell 指南的傳統(tǒng),這個徹底更新的版本簡直就是當今可用的 C# 語言的最佳單卷參考。
《C# 9.0 in a Nutshell》 圍繞概念和用例進行組織,為中級和高級程序員提供了 C# 和 .NET 的簡明地圖,該地圖還探索了重要的深度。
快速掌握 C#,從語法和變量到指針、記錄、閉包和模式等高級主題
通過專門針對該主題的三章深入挖掘 LINQ
探索并發(fā)和異步、高級線程和并行編程
使用 .NET 功能,包括正則表達式、網絡、跨度、反射和密碼學
20.《微服務架構設計模式》

微服務架構設計模式
描述:《微服務架構設計模式》教你如何開發(fā)和部署基于生產質量的微服務應用程序。這套無價的設計模式建立在幾十年的分布式系統(tǒng)經驗之上,添加了新的模式來編寫服務并將它們組合成在現(xiàn)實世界條件下可擴展和可靠運行的系統(tǒng)。本書不僅僅是一個模式目錄,還提供了以經驗為導向的建議,以幫助你設計、實施、測試和部署基于微服務的應用程序。
總結
至此本文所講地二十本書就全部介紹完了,希望能對大家有所幫助。
關注公眾號【waynblog】每周分享技術干貨、開源項目、實戰(zhàn)經驗、高效開發(fā)工具等,你的關注將是我的更新動力!