壓箱底 | Java 編程學(xué)習(xí)必讀的十本書

小伙伴們大家好呀!
今天給大家嘮一嘮 Java 學(xué)習(xí),經(jīng)常有小伙伴留言問我:『Java怎么學(xué)習(xí)啊?我好迷茫啊,快救救我!』
其實這個話題有點大了,每個人現(xiàn)階段水平不一樣,比如說對Java 虛擬機的理解:
初級程序員可能一臉懵:『我學(xué)這個干什么?這不都封裝好了嗎?』
中級程序員內(nèi)心竊喜:『這不就是 java 面試八股文經(jīng)常考察的東西嗎?我門兒清』
高級程序員輕蔑一笑:『我之前動手實現(xiàn)過虛擬機』
這說明同樣一種技術(shù)不同的人認(rèn)知水平是不一樣。
對于 Java 學(xué)習(xí)也是一樣的,有些人喜歡看視頻學(xué)習(xí),覺得視頻有趣,跟著老師一步一步敲代碼;
但有些人就會覺得看視頻學(xué)習(xí)沒意思,老師講的太繁瑣了,太拖沓了,還是自己看書更帶勁。
我在這里講講自己的看法,對于入門初級程序員,看視頻跟著老師的思維一步步走,確實能培養(yǎng)編程興趣。記得幾年前我初學(xué) Java 時在網(wǎng)上看了很多馬士兵老師的視頻,當(dāng)時覺得這個老師不光技術(shù)好,人也超級幽默,編程的興趣一下子提了上來,直到今天還在 IT 行業(yè)混,哈哈!
但是視頻看多了你會發(fā)現(xiàn):聽著都懂,關(guān)掉視頻自己寫啥也不會啊。這最大的原因其實就是因為自己沒有獨立思考。
所以建議大家入門了之后還是不要過于依賴視頻,要學(xué)會獨立思考,看書是個不錯的方法。
關(guān)于 IT 行業(yè)到底要不要看書,這個我之前可是踩過坑的,一些「大佬」跟我說:IT 行業(yè)日新月異,一本書的出版一般都是要耗費幾年時間,等書出出來了,技術(shù)都過時了。我當(dāng)時覺得:我屮艸芔茻,有道理啊。正是因為這種思想,為我日后不愛學(xué)習(xí)埋下了禍根。
其實現(xiàn)在回過頭來看,這個說法不完全正確,對于一些垃圾書確實是這樣的,但是對于那些經(jīng)典之作,時間的流逝也不能掩蓋住它的經(jīng)典。比如說《深入理解 java 虛擬機》這本書最早是在 2011年出版,快 10 年有人說它過時了嗎?現(xiàn)在應(yīng)屆生找工作前是不是都得背一背。看書還是得看經(jīng)典之作啊。
好了,開始我們今天的主題,今天是想給學(xué)習(xí) Java 的程序員推薦一些經(jīng)典書籍,這些書籍覆蓋了初級、中級、高級程序員,總有一些適合你。另外需要說明的是,本次推薦的書單僅僅只覆蓋 Java SE 部分,像 Java Web, 服務(wù)端開發(fā),Spring框架全家桶,分布式微服務(wù),中間件,數(shù)據(jù)庫這些本次都不包括,留著后面慢慢推薦。

基礎(chǔ)學(xué)習(xí)
Java 語言基礎(chǔ)這塊要學(xué)的東西很多,像:
面向過程 VS 面向?qū)ο?/p>
面向?qū)ο蠡咎卣鳎悍庋b、繼承、多態(tài)
訪問控制符:private、default、protected、public
數(shù)據(jù)類型:基本類型、引用類型
控制流程:for、while、switch 等
序列化
異常處理
泛型
……
下面十本書看完保證你的 Java 技術(shù)能上一個檔次:
《Java 核心技術(shù)卷I:基礎(chǔ)知識》
這本書建議作為Java 之旅的第一本書,涵蓋的內(nèi)容非常全,比起那些30天學(xué)會 Java 之類的書,這邊書更加務(wù)實。
隨著技術(shù)的演講,書中有些技術(shù)已經(jīng)被時代拋棄,這部分的章節(jié)其實不用看。
像第十、十一、十二章:圖形程序設(shè)計,主要講解 Swing GUI,用 Java 寫桌面端應(yīng)用已經(jīng)過時了。有人會說安卓,這是另外一套東西,不是 Swing。
第十三章主要講 Java 程序的部署,這里面的 applet 技術(shù)已經(jīng)淘汰了,再學(xué)就是浪費時間。
大家要把有限的時間和精力花在更有價值的事情上。
《Java 核心技術(shù)卷II:高級特性》
卷II是卷I的加強版,針對 Java 的一些高級特性如:java8、網(wǎng)絡(luò)、數(shù)據(jù)庫、安全等進行了詳細(xì)講解。
關(guān)于網(wǎng)絡(luò)那一章節(jié)大家可以簡單看一下即可,因為在企業(yè)網(wǎng)絡(luò)編程開發(fā)中多數(shù)會用到 netty 框架,這是一款性能好到炸的框架,建議大家后面好好學(xué)習(xí)下。
數(shù)據(jù)庫編程那一章節(jié)也可以簡單看看,JDBC 操作數(shù)據(jù)庫實在是太麻煩了,編寫程序有一堆樣板代碼,繁瑣程度令人發(fā)指,為了解決這個問題出現(xiàn)了一系列有優(yōu)秀的 ORM 框架如:Hibernate、MyBatis 等。
最后與卷I一樣,Swing 這一章節(jié)也可以直接跳過了,具體原因上面已經(jīng)講過了,不啰嗦了。
《Java 實戰(zhàn)(Java8 實戰(zhàn))》
2021 年 9 月 14 號 Oracle 正式發(fā)布了 Java17,有些小伙伴不禁要問了,17 都出來了,現(xiàn)在還學(xué) Java8 是不是太多時了,不不不,據(jù)小帥了解現(xiàn)在很多公司都還停留在 Java8。
為什么大家都當(dāng)釘子戶呢?
這一方面說明 Java8確實是很牛逼啊,Java8 是繼 Java5 之后改動很大的一個版本,增加了 Stream 流等很多好用的特性;
另一方面,切換一個 Java 版本費時費力,收益也不明顯,公司肯定不愿意動了。
ok,我們再說回這本書,《Java 實戰(zhàn)》是《Java8 實戰(zhàn)》的新版本,不光有 Java8 的新特性還有 Java9、Java10 等,如果你的公司目前只會用到 Java8,那么你直接看《Java8 實戰(zhàn)》也未嘗不可。
《Java8實戰(zhàn)》不會講解一些基礎(chǔ)的 Java語言,這本書的重點是講解 Java8 新特性和語法糖,讓你的 Java 代碼寫起來更爽、更優(yōu)雅。
《Java編程思想(thinking in java)》
這是一本非常非常經(jīng)典的書,你要問搞 Java 的人如果沒聽過這本書那算是白學(xué)了,哈哈。
其實說實話這本書我試圖看過幾次,最終都沒有看完,一個原因是它太厚了,另外我覺得講得太啰嗦了,可能是因為翻譯的不太好,所以我現(xiàn)在拿來墊桌子,高度合適挺好的。
所以呢,建議新人不要一開始看這邊書,不然你會懷疑人生,還沒入門就放棄了,就把它當(dāng)做編程字典,等你后面遇到問題了拿起來再翻翻吧。
進階學(xué)習(xí)
《深入理解Java虛擬機》
終于到這本書了,先允許我說三聲牛逼:牛逼!牛逼!牛逼!
《深入理解Java虛擬機》這本書其實 2011 年就出版了,出版后其實是不溫不火的,那為什么后面就火了呢?
除了書寫的好之外,最重要的一個原因還是國內(nèi) IT 行業(yè)太卷了,太卷了,太卷了!
卷到什么程度呢?我以面試題為例:
前幾年Java 程序員面試,面試官喜歡問:「HashMap 和 HashTable 哪個是線程安全的?」候選者能答出來并能說幾個原因就已經(jīng)足夠了。
后來不行了啊,兄弟們,大家都背熟了,面試官只能升級了:「你看過HashMap的源碼嗎?是線程安全的嗎?」
候選者:「我看過源碼,HashMap 的方法上都沒有加 Synchronized 關(guān)鍵字,HashMap 1.8 版本還加入了紅黑樹」
再過幾年,程序員又進化了,面試官只能加碼了:「HashMap 看過源碼嗎?請在紙上寫一下紅黑樹的實現(xiàn)」
候選者頓時懵逼了,一口老血結(jié)束了本次面試……
Java 虛擬機也是一樣的,前些年研究這個的是一小撮人,后來由于行業(yè)太卷,為了更好地區(qū)分面試者,就慢慢開始問虛擬機相關(guān)的知識了。
以前你要說你懂點 java 虛擬機可能加分項,時至今日這個只能算基本能力了。
好了,我們說回這本書,周志明大神寫的,非常非常經(jīng)典,已經(jīng)更新到第三版了。周志明大神寫書用詞非常嚴(yán)謹(jǐn),專業(yè)術(shù)語非常多,第一次讀的小伙伴可能有點懵,但是不要緊,多看幾遍,我自己也是看了很多遍,每次看完都有新的收獲,墻裂建議大家看完。
《Java并發(fā)編程的藝術(shù)》
在寫代碼的時候大家伙有沒有碰到這樣的場景:我在本地測試好好的,怎么線上就出問題了呢?
排除本地環(huán)境和生成環(huán)境不一致的問題,其實最大的可能就是并發(fā)問題了。
本地是你一個人在測試,但是到了生產(chǎn)環(huán)境,大量的用戶點擊,大量的請求涌進來,你的程序在并發(fā)訪問的時候會不會出問題呢?
并發(fā)問題一般都比較難定位,寫好并發(fā)編程尤為關(guān)鍵。
我們說回《Java并發(fā)編程的藝術(shù)》這本書,這是一本專門講解Java并發(fā)的書,涉及到各種鎖、常見安全的集合類,基本就是將 JUC(java.util.concurrent包的簡稱)里所有的內(nèi)容覆蓋了一遍,看完你一定有收獲。強烈推薦!
JUC 是 Java 大神 Doug Lea 開發(fā)的一套類庫,大神開發(fā)這套代碼就是為了幫助大家簡化并發(fā)編程,現(xiàn)在國內(nèi)有一大批人在研究他的代碼,他老人家應(yīng)該高興呢還是悲哀,哎~
寫「好代碼」
學(xué)習(xí)Java,最終還是要付出實踐的,作為碼農(nóng)我們的成果就是一行行代碼。
相信大家都有接手過前輩們寫的代碼,看到那些代碼,不禁冒出一句:這尼瑪哪個沙比寫的,whats up!
這些代碼被稱之為「屎山」,我相信它們原本是好的,只是隨著需求變更和新增,一步步腐爛了而已。
如果你不想給后人留下「屎山」,那么從現(xiàn)在開始你就要學(xué)會寫「好代碼了」,以免被同事打,哈哈~
下面推薦幾本有助于你寫「好代碼」的書籍。
《阿里巴巴Java開發(fā)手冊》
這本書是大廠阿里巴巴出品的,它的愿景是碼出高效,碼出質(zhì)量。作者將自己多年的開發(fā)經(jīng)驗和架構(gòu)歷程濃縮成為立體的編程規(guī)范和最佳實踐。
書的主要內(nèi)容是將 Java 編碼規(guī)范,編碼習(xí)慣非常重要,從一開始就要養(yǎng)好。
如果你現(xiàn)在在一個小廠,你們組內(nèi)沒有任何編程規(guī)范,那么我建議你向你們的技術(shù)經(jīng)理推薦這本書,說不定能獲得升職加薪的機會,試試唄,后面如果真有人這么干了,記得回頭在公屏上打出來。
組內(nèi)保持一致的編碼風(fēng)格,有助于大家快速理解代碼,減少撕逼~
《Effective Java中文版》
網(wǎng)上流傳程序員分為兩種,一種是讀過《Effective Java》的,一種是沒讀過的,可見大家對這本書的評價非常高。
Effective 系列非常經(jīng)典,覆蓋了很多語言:Effective Java、 Effective C、Effective C# 等,Effective Java 只是一個小小的分支。
這本書的知識密度很大,作者根據(jù)自己多年的編程經(jīng)驗總結(jié)了很多條 best practice,每一條都是前人踩過的坑、流過的淚。
建議等你寫了一定量代碼之后再看,不然你沒感覺。
《代碼整潔之道(Clean Code)》
代碼整潔之道,這本書的英文名是 clean code。
閱讀這本書有兩種原因:
第一,你是個程序員;
第二,你想成為更好的程序員。
如果你對代碼有追求,這本書可以教會你寫干凈的代碼。
《重構(gòu) 改善既有代碼的設(shè)計》
重構(gòu)這個詞大家應(yīng)該不陌生,但是我們靜下心來想一下,我們?yōu)槭裁匆貥?gòu)?哪些需要重構(gòu)?怎么重構(gòu)?
這是人生終極三問啊!
一個項目開始重構(gòu)肯定是因為之前的代碼寫的太爛了,之前的架構(gòu)不滿足現(xiàn)階段發(fā)展了,大家都在說代碼爛、架構(gòu)爛?但好像又說不清具體哪里爛,不妨讀讀這本《重構(gòu) 改善既有代碼的設(shè)計》。
這本書定義了24 種代碼壞味道,大家可以結(jié)合自己的項目逐個對照找出病因?qū)ΠY下藥。
再補充一句:重構(gòu)不是一錘子買賣,重構(gòu)是貫穿項目整個生命周期的!
總結(jié)
看完這些書我不能保證你能成為Java 大神,但最起碼你可以很自信地說:我懂 Java,請給我加薪吧,這是不是夠了!
