每個程序員必讀的經典書籍

作爲程序員,面對日新月異的技術,我們必須不斷的堅持學習來拓展知識面,加深技術理解,提高自身競爭力。但是技術相關的書籍浩如煙海,如何選擇成爲擺在我們眼前的問題?今天我從編程語言、算法與數據結構、數據庫、網絡編程、軟件開發等5個方面聊下有哪些經典書籍值得我們仔細閱讀。在最後我也總結了所有書籍的pdf版本,大家可以直接下載閱讀。

1. 編程語言

C和C++

《C程序設計語言》

7lzcwQ

C語言的設計者之一DennisM.Ritchie 和著名的計算機科學家 BrianW.Kernighan 合著的一本介紹C語言的經典著作。這本書在短小的篇幅的範圍做到真正的深入淺出,如果你以前對 C 語言或者大部頭的書有些恐懼,看完這本書讓你發現 C 語言是那麼簡單。

《 C和指針》

yMHuqp

學習過C語言的都知道,C語言裏最難的概念就是指針,初學者一不小心可能就會陷入各類指針異常中,本書通過對指針的基礎知識和高級特性的探討,幫助程序員把指針的強大功能融入到自己的程序中去。

《C++ Primer中文版》

LEAU1k

這本書可以說是最詳盡的C++書籍,無論是初學者入門,或是中、高級程序員提升,本書均爲不容置疑的首選。另外書中的例子均採用C++ 11的標準進行了改寫,方便大家在閱讀的過程中熟悉C++的新特性。

《Effective C++》

uV46Lx

這本書可以看成上面C++ Primer的補充,更加側重於實戰技巧的分享,通過裏面講述的一些實際套路和原理,會讓你看完有一種恍然大悟的感覺,非常推薦。

《STL源碼剖析》

LyXkno

學習編程的人都知道,閱讀、剖析名家代碼乃是提高水平的捷徑。這本書詳細介紹了vector、list、heap、deque、Red Black tree、hash table、set/map等常見數據結構的實現;以及各種算法(排序、查找、排列組合、數據移動與複製技術)的實現。認真研究理解,有助於加深對C++的理解,提升編程的內功。

Java

《Java核心技術·卷I》

mxYa1c

這本書非常適合新手入門,一步步學習Java基礎知識,Java類庫,同時也提供了很多Java高級特性,包括面向對象程序設計、反射與代理、接口與內部類、異常處理、泛型程序設計、集合框架、事件監聽器模型、圖形用戶界面設計和併發。

《Effective Java中文版》

dT7yld

經典之作,側重實戰,如果在學完Java基礎之後,想進一步提升自己的實力,這本書絕對不要錯過。作者是Java API的設計者,考慮得不僅僅是如何才能夠使Java API實現效率更高,還包括如何讓客戶端更具靈活性、如何從架構的設計上,減少客戶端犯錯誤的機會。它包含大量的優秀Java編程實踐,並對泛型和併發這兩個充滿陷阱的 Java 特性給出了充滿洞察力的建議,學習理解這本書介紹的例子,會讓你深刻掌握Java的設計理念。

《深入理解Java虛擬機(第2版)》

1chw3I

優秀且難得的國產佳作,系統的介紹了 Java 虛擬機和相關工具,並給出了一些調優建議。整本書圍繞內存管理、執行子系統、程序編譯與優化、高效併發等核心主題對JVM進行了全面而深入的分析,深刻揭示了JVM的工作原理。

Python

《Python基礎教程(第2版)》

1wqYoA

這本書偏重基礎,跟着一章章學習下來,就能掌握Python開發的所有基本技能。

《流暢的Python》

lKHGST

這本書是給入門Python語言之後,想進一步學習Python的同學準備的。難能可貴的是,本書花了大量篇幅,通過許多例子深入講解了文本編碼、迭代器與生成器,協程,併發程序設計,元編程等諸多實用且對新人有難度的知識點,需要讀者反覆閱讀理解相關章節。

2. 算法與數據結構

《算法》

ZDD5BD

普林斯頓的算法教材,算法領域的經典參考書,內容相對簡單。使用更爲容易的Java語言作爲教學語言;覆蓋所有常用的數據結構和算法,並均給出其完整實現;包含大量的圖示用於可視化算法——事實上這是我讀過的圖示最爲豐富形象的書籍,這也是我稱其爲最好的算法入門書籍的原因。

《數據結構與算法分析》

wMH0u3

和上面的《算法》互爲補充,主要側重講述數據結構,其中排序、二叉樹的部分都相當精彩,跟着一步步研究每個算法的細節,會很有成就感。

《Cracking the Coding Interview - 程序員面試金典》

u5hUy4

無數程序員推薦的面試必讀書,包括了面試的前期準備,189 道算法的分析以及行爲問題的解答,獲得國內外一衆求職者的好評。

《劍指Offer》

dQ5ZIB

結合作者在多家名企的經驗,從面試官視角剖析考題構思、現場心理、題解優劣與面試心得。從谷歌、微軟等知名IT企業的海量面試題中精心篩選出80餘道精華題目,提供多角度解題輔導。由於本書流傳甚廣,這些題已被大量企業真實採用,參考價值頗高。

《編程珠璣(第2版)》

zcGQpF

一本少見的實踐型算法書籍——它並非一一介紹數據結構/算法的教材,而是實踐性極強的算法應用手冊。儘管編程珠璣既有深度,又有廣度,但我會推薦任何計算機水平的人去讀:『在校學生可以從前幾章學到算法和數據結構的知識;工程師可以從中學到程序設計理念和代碼調優;營銷號可以從中學到各種段子(放鴿子只是其中一個)』。

3. 數據庫

《MySQL必知必會》

nY4VcA

整本書非常薄!非常適合 MySQL 新手閱讀,很棒的入門教材。書中從介紹簡單的數據檢索開始,逐步深入一些複雜的內容,包括聯結的使用、子查詢、正則表達式和基於全文本的搜索、存儲過程、遊標、觸發器、表約束,等等。

《高性能MySQL》

J1KKVS

絕對是從淺入深的 MySQL 領域的經典之作,擁有廣泛的影響力。涵蓋了 MySQL 8.0 版本的新特性,也講述了關於固態盤、高可擴展性設計和雲計算環境下的數據庫相關的新內容,原有的基準測試和性能優化部分也做了大量的擴展和補充。

《MySQL技術內幕》

vv7v4N

由國內資深MySQL專家親自執筆,作爲國內唯一一本關於InnoDB的專著,從源代碼的角度深度解析了InnoDB的體系結構、實現原理、工作機制,並給出了大量最佳實踐,能幫助你係統而深入地掌握InnoDB。

《MySQL是怎樣運行的》

9fKJdA

這本書可以作爲上面幾本書的補充,內容主要涵蓋了使用MySQL的同學在求職面試和工作中常見的一些核心概念。作者真的是很用心設計本書的章節順序,從現有場景引出可能出現的問題再到解決方案設計,循序漸進的揭開mysql 的內部實現細節,每一章的知識就是那麼水到渠成,非常推薦。

《Redis設計與實現》

gu5jaG

本書系統而全面地描述了 Redis 內部運行機制,包括大部分Redis單機特徵,以及所有多機特性。一方面, 這本書可以作爲數據結構的補充,講述了像ziplist、intset、skiplist、bit array等數據結構課程當中沒有提到的內容, 以及Redis對string、hash、list實現上的優化(如兩類load factor, 漸進式rehash, 以及各類數據結構實現上的轉化)。另一方面, 還可以作爲數據庫存儲引擎實現的入門讀物: 如command-table、 事務的實現、數據落盤(RDB、AOF)、事件處理、slowlog、sort的實現(by & get類似傳統SQL數據庫當中的多表關聯查詢)。不僅如此,這本書還可以作爲分佈式學習的入門指導: 如複製、sentinel、集羣是對Raft、Gossip協議的實現。

4. 網絡編程

《圖解TCP/IP(第5版)》

p7iJ0M

講解了網絡基礎知識、TCP/IP基礎知識、數據鏈路、IP協議、IP協議相關技術、TCP與UDP、路由協議、應用協議、網絡安全等內容,引導讀者瞭解和掌握TCP/IP,營造一個安全的、使用放心的網絡環境。整體偏基礎,非常適合入門新手。

《TCP/IP詳解 卷1:協議》

jhAMNm

主要講述TCP/IP協議,結合大量實例講述TCP/IP協議族的定義原因,以及在各種不同的操作系統中的應用及工作方式,可以結合上面的圖解TCP/IP一起學習。

《Linux內核設計與實現(原書第3版)》

ZqfCgY

作者Robert Love是一位Linux內核核心開發人員,他分享了在開發Linux2.6內核過程中頗具價值的知識和經驗。本書的主題包括進程管理、進程調度、時間管理和定時器、系統調用接口、內存尋址、內存管理和頁緩存、VFS、內核同步、移植性相關的問題以及調試技術;總體來講,東西不多不少,有些部分點到爲止,但仍然是最好的內核入門書籍。

《UNIX環境高級編程(第3版)》

dc8H2d

本書被譽爲Unix編程聖經,介紹了UNIX文件和目錄、標準I/O庫、系統數據文件和信息、進程環境、進程控制、進程關係、信號、線程、線程控制、守護進程、各種I/O、進程間通信、網絡IPC、僞終端等方面的內容,還在此基礎上介紹了衆多應用實例,包括如何創建數據庫函數庫以及如何與網絡打印機通信等。

5. 軟件開發

《代碼整潔之道》

qf0xTB

本書作者給出了一系列行之有效的整潔代碼操作實踐。這些實踐在本書中體現爲一條條規則(或稱“啓示”),並輔以來自現實項目的正、反兩面的範例。只要遵循這些規則,就能編寫出乾淨的代碼,從而有效提升代碼質量。

《Head First 設計模式(中文版)》

8FbSLD

相當讚的一本設計模式入門書籍。用實際的編程案例講解算法設計中會遇到的各種問題和需求變更,並以此逐步推導出良好的設計模式解決辦法。推薦給所有軟件開發人員。

《深入理解計算機系統(原書第3版)》

DUTT9K

CMU把這本書作爲“Introduction to Computer System”課程的教材,是面向計算機專業低年級學生的“計算機系統介紹(導論)”。這些學生只是剛剛瞭解如何使用一門高級語言,對於計算機系統的工作方式等話題可謂一點都沒有接觸過,而CSAPP對讀者的背景也只要求是“一些編程經驗”而已。這本書的話題覆蓋面很廣,從計算機的基本組成,二進制數據表示方式,到機器級別的指令,CPU工作方式,存儲結構和優化,操作系統的虛擬內存管理,程序運行方式,I/O,網絡、到(較底層)程序性能優化和並行程序開發等等。所以,它其實覆蓋了“計算機組成原理”,“操作系統”等許多課程的內容,其中的許多話題都能再次展開,繼續深入,都能再變成一本,甚至N本經典。

《人月神話》

HAybLZ

《人月神話》的主要貢獻是對軟件開發過程的幾個重要關鍵點,提出了獨到的見解。 這幾個關鍵內容就是:提倡外科手術式的團隊組織;軟件項目的核心概念要由很少的人來完成,以保證概念的完整性; 軟件開發過程中必要的溝通手段; 如何保持適度的文檔;在軟件開發的過程中,只有適度改進,沒有包治百病的銀彈。

《程序員修煉之道》

2LouBX

本書由一系列獨立的部分組成,涵蓋的主題從個人責任、職業發展,知道用於使代碼保持靈活、並且易於改編和複用的各種架構技術,利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比,全面闡釋了軟件開發的許多不同方面的最佳實踐和重大陷阱。

《代碼大全》

g30Mpo

這也是一本完整的軟件構建手冊,涵蓋了軟件構建過程中的所有細節。 代碼大全用通俗清晰的語言覆蓋了軟件構建(Software Construction)中各個層次上 所有 的重要概念——從變量命名到類型設計,從控制循環到代碼結構,從測試和調試到構建和集成, 可謂無所不包,你可以把這本書看作爲程序員的一站式(Once and for all)閱讀手冊。

《重構》

vBSoEa

這本書主要告訴你如何改進代碼質量,作者是世界軟件開發大師,ThoughtWorks的首席科學家。他是一位作家、演說者、諮詢師和泛軟件開發領域的意見領袖。他致力於改善企業級的軟件設計,對優秀的設計以及支撐優秀設計的工程實踐孜孜以求。他在重構、面向對象分析設計、模式、XP和UML等領域都有卓越貢獻。

後記:千里之行始於足下

我已經爲大家整理好了所有的書籍,具體獲取方法看最後一張圖即可,書在於精不在多,多讀經典,提高內功,永保核心競爭力。

4tFIET

VO22Tg


關注公衆號【碼老思】,最快獲取最通俗易懂的原創技術乾貨。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章