疫情以來,好久沒出差了,今天出差去趟上海,早上 4 點多就起床了,到機場天都沒亮。到登機口離起飛還一小時,趁著等飛機的時間,抓緊碼字,把這篇文章收個尾。
今天和大家說說學 Java 的讀書路線。路線中的書籍我自己都看過,希望整理的這份讀書路線,能幫大家少走彎路,對大家學 Java 有個參考。
初學乍練
入門 Java,推薦《Java核心技術》第 11 版,這其實是一套書,分為兩本:
- 卷1 基礎知識(豆瓣 9.2 分)
- 卷2 高階特性(豆瓣 8.4 分)
我估計 70% 的 Java 程式設計師入門看的是這本書,寫的經典、全面,對 Java 各種特性,都會有對應的程式碼示例。
不過,這裡的內容,有不少是沒必要學的。我在以前的文章提起過,大家可以參考。
同時,光看這本書作為入門有個問題,就是隻能知其然,卻不知所以然。而不知所以然,必然會導致我們們的基礎會不夠牢靠。
所以再推薦一本書配合《Java核心技術》一起看,書的名字叫《Java程式設計的邏輯》(豆瓣 9.1 分),作者馬俊昌。
這本書講解 Java 基礎知識的基礎上還會告訴你底層的原理,比如,Java 的列舉本質是什麼,還會告訴你 Java 為什麼這樣設計 API。
總之,《Java核心技術》和《Java程式設計的邏輯》聯合學習,算是珠聯璧合,對入門 Java 是再合適不過的了。
這裡多說幾句,入門打基礎十分重要,對於程式設計這種實踐類的學習,想打好基礎,光靠讀書,是遠遠不夠的。一定要經過大量的程式碼練習。所以,在這個時期一定要多作程式碼練習。這裡,我給出一些可以自己嘗試的練習:
- 排序演算法的小練習
- 字串查詢的小練習
- 對系統檔案做下增刪查改
- 遞迴的小練習
- 使用 Java 集合的小練習
- 寫個小遊戲、小東西能綜合訓練下學到的所有技能
得窺門徑
做程式設計師,大部分的時候,我們們都需要通過寫各種各樣的 SQL 運算元據庫。我們們是 CRUD Boy 嘛。
所以,SQL 我們們要學,學 SQL 我推薦《SQL必知必會(第5版)》(豆瓣 9.5 分)。
這本書的組織結構非常好,哪怕是你對 SQL 一竅不通,也能通過這本書的引導,由淺入深的把 SQL 語言學個七七八八。
更重要的是,這本書叫必知必會,也就是說,它的內容都是精挑細選,必須學的內容。裡面半分冗餘的知識點都沒有,內容全是乾貨。一定要好好讀這本書。
略有所成
學會了 Java 基礎,知道了怎麼用 SQL 之後,如果往下走,想繼續提升自己該學什麼?
我的答案是去深入掌握多執行緒程式設計。因為只有懂了多執行緒程式設計,我們們才能處理各種稍微困難的需求。比如,快速處理大量使用者對系統的訪問;又比如,想同時訪問多個第三方介面。
多執行緒程式設計又叫併發程式設計,其實是很複雜的事情,看一本書就想掌握它是不太現實的。我這裡會推薦三本書,配合起來,一步步從多執行緒的原理到多執行緒的實戰全部貫穿起來。
對於多執行緒的理解,我推薦的第一本書是《Java併發程式設計實戰》(豆瓣 9.0 分)。
這本書是一本非常經典的關於多執行緒程式設計的書。裡面對Java的多執行緒方方面面的細節都講的非常到位。只是由於多執行緒確實太複雜,涉及到的知識也太廣了,導致這本書出現了兩個問題:
- 理論過多:《Java併發程式設計實戰 》裡會花費很大篇幅,去闡述一些多執行緒涉及到的理念和思想,但是程式碼例子卻給的極少,這就導致我們們看的很吃力、很累。
- 某些點講的不夠透:多執行緒涉及到的知識非常廣,《Java併發程式設計實戰 》是儘量全涉及了。這就造成很多知識點講的很淺,沒有講透。這就會讓人很困惑,導致有些知識點連不起來,影響對整本書的理解。
所以,我這裡推薦第二本書《Java多執行緒程式設計實戰指南(核心篇)》(豆瓣 9.0 分)。
這本書程式碼例子多,《Java併發程式設計實戰 》有些講不透的知識點,這本書會有所彌補。所以,當看《Java併發程式設計實戰 》的時候,不管是需要練習程式碼,還是想去搞清楚知識點,《Java多執行緒程式設計實戰指南 》這本書都極為合適。
多執行緒我再強調一下,這是 Java 很高階的特性,也是很難的部分,很多哪怕是工作了 3、4 年的程式設計師,對此也掌握的不到位。
上面說的兩本書,有原理,有程式碼示例,如果是換成別的知識,那可能足夠了。可是對於多執行緒這麼複雜的東西,我們還需要把學過的所有零碎知識點去綜合貫穿起來,形成關於多執行緒的知識體系才算是真正掌握到位。
所以,這就得推薦第三本書《圖解Java多執行緒設計模式》(豆瓣 8.6 分)。
跟著這本書的講解,把我們們所有的知識點通過練習書中介紹的所有模式,去串起來,才最終算是多執行緒的學習告了一個段落。
登堂入室
學會了多執行緒程式設計,我們們此時要知道一件事,大部分時候,多執行緒程式設計,其實就是網路程式設計的最重要的一種手段。而網路程式設計,雖然有了 Netty 框架等很優質的網路框架了,但是理解背後的原理,對我們們定位專案的 bug,優化程式碼的效能,幫助非常大。
《Java TCP/IP Socket程式設計》(豆瓣 8.0 分)
這本書,我們既可以去學到必要的網路基礎,也能學會怎麼用 Java 去網路程式設計,非常推薦。
對於網路程式設計,大家都知道,這是易學難精的技能。學懂原理,瞭解網路程式設計,看看我上面推薦的書就夠了。但是,要精通網路程式設計,寫好網路相關的程式,那是相當不容易的。
所以,在 Java 圈,一旦遇到網路程式設計相關的事情,大家都會採用 Netty 框架去做。Netty 框架讓我們能不需要成為網路程式設計大師,就能寫出非常優秀的網路應用。
瞭解 Netty 框架對我們們也是非常重要的一件事,學習 Netty 框架,推薦《Netty實戰》(豆瓣 7.5 分)。
這本書,把 Netty 的方方面面講的很全,Netty 的設計思想也覆蓋了大部分,對於熟練使用 Netty 完全夠用了。
融匯貫通
作為 Java 後端工程師,幾乎都要用到 Spring 框架的。哦不對,Spring 已經不能叫框架了,得叫體系、生態了。學好 Spring,對我們們找工作,做專案,甚至設計架構,都是極其重要的。
但是,學好 Spring 也沒那麼容易。Spring 發展到現在,它已經成為了一套完整的體系了,而且 Spring 迭代非常快,幾乎每年都會出現大的變化。所以,市面上的書籍,單獨靠那麼一兩本書,是不太可能學好的,建議把一些經典的 Spring 的書聯合起來讀,才有希望深入掌握Spring。
對於 Spring 這套體系,它現在是又多又繁雜,就算要入門,都不知道從何處下手。這裡,我想談談我的經驗。
雖然 Spring 變化確實很快,但是,它有幾個地方,是這麼多年幾乎沒發生過什麼變化的。
沒有什麼變化的第一部分,就是 Spring 的設計思路。Spring 的設計思路,永遠都是作為 Bean 的容器,去管理好 Bean ,這是它永恆不變的地方。
沒有什麼變化的第二部分,就是 Spring 的核心。Spring 的 ApplicationContext 等核心 API 是沒有什麼大的變化的。
所以,我們們就應該先從 Spring 這些不變的核心先入手。掌握住 Spring 的思想,Spring 的核心,哪怕 Spring 本身再變化,對我們們來說,也只是一種外在的 API 變化而已。
要達到這個目的,我會推薦大家看一本很老的書《Spring揭祕》(豆瓣 9.1分)。
雖然這本書主要是以 Spring3 的講解為基礎,但是,這本書對於 Spring 的程式設計思想講的極為透徹,是有關 Spring 的書中,難得一見的好書。入門 Spring,這是我推薦的第一本書。
理解了 Spring 的程式設計思想不夠,我們需要利用這些思想,去實踐演練,加強我們對 Spring 的理解。
這時候,就得有本書,能真正的帶我們實戰下Spring的各個元件——《精通Spring 4.x》(豆瓣 8.5 分)。
我知道現在 Spring 5 在逐漸進入主流,但是,Spring 5 也只是在 Spring 4 的基礎上增加了一些新特性。而 Spring 5 的書,我至今沒看到有《精通Spring 4.x》這本講的這麼全的,所以,寫程式碼做練習,還是推薦用《精通Spring 4.x》。
理解了 Spring 的理念,用很多程式碼練習練習實踐之後,我們就只需要知道 Spring 5 的一些特性就能跟上 Spring 發展的步伐了。
可以看下《Spring 5 開發大全》(豆瓣 8.3 分),這本書對 Spring 5 的新特性介紹很全。我們只需要翻翻,熟悉新特性、新 API 即可。
另外,Spring 5 有個變化最大的地方:它用了很多響應式程式設計的東西。這方面,大家相對比較陌生,有閒有錢的話,可以看看《Spring響應式程式設計》。
關於 SpringBoot,由於它的易用性,它已經邁入主流。不過 SpringBoot 也只是以 Spring 為核心的一套應用框架而已。找本書,學習它是如何通過新增一些模組和功能,去降低大家使用 Spring 的門檻的,也就夠了。
同樣,有閒有錢的話,可以讀下《Spring Boot 2實戰之旅》。
返璞歸真
前面大家跟著我推薦的書學習完了,基本就可以是一位非常合格的程式設計師了。但是,注意,你只是合格,但是還不算優秀。
如果我們想更加優秀,讓自己職業道路能走的更遠,還需要一些非開發的知識學習。只有通過疊加這些 Buff,我們才能在眾多的技術同事中,脫穎而出,錐出於囊。
在實際開發裡,程式碼可讀是我們評價同事好不好合作的一個重要標準。一位同事,寫的程式碼亂七八糟,你不管是接手維護還是想只是用一些對方的程式碼,都非常彆扭難受。
所以,我們們的程式碼一定要寫的乾淨整潔可讀,給別人非常好的印象。這樣,對我們們的團隊合作和職場發展,才會有更大的幫助。
把程式碼寫的乾淨可讀,我推薦看《程式碼整潔之道》(豆瓣 8.7 分)。
這本書,講解了什麼才是好的程式碼,跟著這本書學,你寫的程式碼會更讓人讚賞,也更讓人願意和你合作。
除了程式碼可讀,我們們還得讓我們們寫的程式碼好維護,易擴充套件。因為需求是千變萬化的,如果你寫的程式碼可維護性,可擴充套件性不夠,那後續你會陷入無休止的改程式碼海洋裡,你所有的精力都會被這些不停變換的需求吃幹抹淨,直接讓你寸步難行。
而寫易擴充套件,易維護的程式碼,就必須知道設計模式。有了設計模式,你閉眼都能寫出不錯的程式碼來。學習設計模式,推薦《Java設計模式》(豆瓣 9.1 分)。
這本書,對設計模式的來歷發展,概念思想,講解的淋漓盡致,推薦閱讀。
Java 這套讀書的學習路線,是我一本一本全部讀過,才推薦給大家的,希望大家最終能堅持讀完,學透。
最後再總結一下這個書單:
- 《Java核心技術》卷1、2
- 《Java程式設計的邏輯》
- 《SQL必知必會》
- 《Java併發程式設計實戰》
- 《Java多執行緒程式設計實戰指南(核心篇)》
- 《圖解Java多執行緒設計模式》
- 《Java TCP/IP Socket程式設計》
- 《Netty實戰》
- 《Spring揭祕》
- 《精通Spring 4.x》
- 《Spring 5 開發大全》
- 《Spring響應式程式設計》
- 《Spring Boot 2實戰之旅》
- 《程式碼整潔之道》
- 《Java設計模式》
以上書單都是我推薦的,其他沒列的書籍,比如《Java程式設計思想》、《重構》等等,也都是好書,大家自己酌情補充。
你好,我是四猿外。
一家上市公司的技術總監,管理的技術團隊一百餘人。
我從一名非計算機專業的畢業生,轉行到程式設計師,一路打拼,一路成長。
我會把自己的成長故事寫成文章,把枯燥的技術文章寫成故事。
不知不覺,我原創了不少文章,最近把其中的一些精華文章做了個彙總整理,優中選優,整了一份文件——《爬坡》。
《爬坡》裡包括了 15 篇技術文章(包括學習程式設計技巧、架構師、MQ、分散式)和 13 篇非技術文章(主要是程式設計師職場),一共十萬多字。