??翻譯了一篇國外學(xué)習(xí)建議的文章,希望讀者可以受到啟發(fā)。點(diǎn)擊查看原文。文中涉及到的書籍和課程鏈接是國外購買的網(wǎng)址。此外,歡迎關(guān)注本人博客和Github。
前言
??想要新年一開始就有個(gè)好計(jì)劃嗎?這里有一些建議可以使你成為一個(gè)更好的Java開發(fā)者,包括Java性能調(diào)優(yōu)、Spring Security 5.0等方面。
??首先,祝你們新的一年快樂。每當(dāng)新的一年開始,我們都會(huì)制定計(jì)劃、建立目標(biāo)或者思考一些解決方法。
??成為一個(gè)Java開發(fā)者和《Java blog》的作者之后,我經(jīng)常收到全世界Java開發(fā)者的一些咨詢:如何可以提升他們的能力。
??之前,我分享過我的一篇文章《10 tips to become a better programmer》(《10條關(guān)于如何成為更好的開發(fā)者的建議》),文章中每條建議現(xiàn)在看來都還未過時(shí),但是既然是新的一年了,我還是覺得寫一些建議給那些愿意提高自己的Java開發(fā)者,從而幫助他們?cè)黾覬ava編程的知識(shí)和職業(yè)生涯中的個(gè)人價(jià)值。
??不廢話了,讓我們看看是哪9條建議吧。你可以參考這些建議,然后確定適合自己的n個(gè)小目標(biāo)。
學(xué)習(xí)Java性能調(diào)優(yōu)
??在過去的幾年里,我訪談了50多位高級(jí)Java開發(fā)人員,通過交談發(fā)現(xiàn),這些人員最缺少的知識(shí)之一就是對(duì)于Java虛擬機(jī)內(nèi)部機(jī)制、GC原理和Java性能調(diào)優(yōu)的了解。

??隨著你經(jīng)驗(yàn)的增長,你將成為一個(gè)具有5到6年經(jīng)驗(yàn)的高級(jí)Java開發(fā)人員,此時(shí),你應(yīng)該具備對(duì)Java基本原理的宏觀理解,并能知曉各個(gè)實(shí)現(xiàn)的細(xì)節(jié)。
??如果你不能夠優(yōu)化你的應(yīng)用,具體來說是你無法弄清楚知曉應(yīng)用為什么跑的那么慢?它的瓶頸在哪里?如何進(jìn)行優(yōu)化?那你需要閱讀一些關(guān)于Java虛擬機(jī)原理和新性能調(diào)優(yōu)方面的書籍。例如:Scott Oaks的名著《Java Performance the Definitive Guide》(Java權(quán)威性能手冊(cè))。
??這本書我這幾年都在讀,只要一有空就會(huì)打開來看看,今年還準(zhǔn)備再讀一次。
??如果你比較喜歡在線課程的話,我建議你可以看一下在Pluarlsight網(wǎng)站上的《Understanding the Java Virtual Machine 》課程,這個(gè)課程解釋了內(nèi)存管理、類加載、安全機(jī)制、反射等內(nèi)容。
每天編程2小時(shí)
??去年我注意到的另外一件事是:隨著你經(jīng)驗(yàn)的增加,你會(huì)花很多的時(shí)間在溝通協(xié)調(diào)、回復(fù)郵件、解決問題糾紛、指導(dǎo)工作上面,通常來說你已經(jīng)成了一個(gè)項(xiàng)目經(jīng)理。
??除了這些事情,你忘記了程序員最重要的一個(gè)技能,就是編程。
??如果你覺得你寫的代碼還不夠,那你得想個(gè)辦法每天寫點(diǎn)代碼?;蛘咧辽賹扅c(diǎn)東西,讓它成為你項(xiàng)目的一部分,或者是一個(gè)開源的框架,或者是一個(gè)開發(fā)包,或者是一個(gè)開發(fā)工具,等等。
??萬事開頭難,我建以你克服阻力,開始閱讀和重構(gòu)代碼來獲得快樂。在過程中,你會(huì)得到享受并且也會(huì)開始寫些代碼。
??你也可以閱讀《Cracking the Coding Interview, 150 Programming Questions》。這不僅可以讓你做好面試準(zhǔn)備,也可以提高多數(shù)據(jù)結(jié)構(gòu)、算法和編程邏輯的理解。
每個(gè)月都對(duì)Java應(yīng)用做一次優(yōu)化
??這個(gè)方法需要和第一個(gè)方法(讀一些Java虛擬機(jī)和性能調(diào)優(yōu)方面好的書籍)相結(jié)合。光讀書是不夠的,你需要將學(xué)到的知識(shí)應(yīng)用到你的項(xiàng)目中去。
??我建議你至少每個(gè)月都對(duì)Java應(yīng)用進(jìn)行一次優(yōu)化,并且要花足夠的時(shí)間去分析和理解優(yōu)化的結(jié)果。
??例如,如果你的程序最近奔潰過,你可以將Java堆狀況導(dǎo)出,然后分析:哪個(gè)對(duì)象占用的內(nèi)存最大?在你的項(xiàng)目中是否存在內(nèi)存泄露?
??現(xiàn)象的原因是啥?當(dāng)有超過10萬個(gè)客戶端鏈接你的服務(wù)是會(huì)發(fā)生什么?如果你可以回答這些問題,那么你干的不錯(cuò)。如果你需要一些關(guān)于解決內(nèi)存和CPU問題的指導(dǎo),那么我建議你可以看一下Richard Warburton寫的《Understanding and Solving Java Memory Problems》。
參加編碼挑戰(zhàn)
??這個(gè)建議和第二個(gè)建議(每天編程2小時(shí))相關(guān)。事實(shí)上,有時(shí)你在當(dāng)前的工作中無法獲得足夠的挑戰(zhàn)。
??如果渴望編程挑戰(zhàn),那么參加相關(guān)編程挑戰(zhàn)的比賽就再好不過了。
??網(wǎng)上有很多編程網(wǎng)站可以給你鍛煉和測試的機(jī)會(huì),其中比較推薦的是TopCoder。
??如果你在尋找一些困難的編程挑戰(zhàn),那么你可以查看我之前寫的一個(gè)關(guān)于在線編程網(wǎng)站的列表。
學(xué)習(xí)Java網(wǎng)絡(luò)編程
??我交流過程中發(fā)現(xiàn)的一點(diǎn)是:Java開發(fā)者需要提高他們的socket編程能力和網(wǎng)絡(luò)基礎(chǔ)。
??我從網(wǎng)絡(luò)編程問題列表中挑選了一些問題進(jìn)行詢問,但是很多開發(fā)者很多問題都沒有回答好。
??他們中的一些甚至還需要去了解TCP和UDP的差別。這個(gè)問題我認(rèn)為對(duì)于有2到5年的Java開發(fā)者來說已經(jīng)太基礎(chǔ)了,甚至沒有問的必要。
??如果你覺得你沒有獲得足夠的機(jī)會(huì)去學(xué)習(xí)網(wǎng)絡(luò)編程,或者你是一個(gè)和JSP、Servlet、JSF打交道的Java Web開發(fā)者,那么我建議你至少看一下Java網(wǎng)絡(luò)、NIO、socket編程方面的一本好書。
??一本值得推薦的書是《TCP/IP Sockets in Java, Second Edition, Practical Guide for Programmers》。這本書易讀、有趣,是一個(gè)學(xué)習(xí)socket編程基礎(chǔ)的好途徑。
Java 9
??2017年有一些重大的發(fā)布,其中之一就是JDK 9。2018年,我第一件事就是準(zhǔn)備研究一下JDK 9。如果你想要了解Java 9的一些新特性,包括:Jigsaw、Reactive Streams、API改進(jìn)等等,那么《Java 9 MasterClass》課程是個(gè)不錯(cuò)的開始。
Spring 5.0
??Java業(yè)界另一個(gè)比較大的發(fā)布是Spring Framework 5.0。Spring 5.0帶來了很多振奮人心的新特性,包括:響應(yīng)式函數(shù)編程模型,采用了Java 8 和 9 的新特性等。
??在2018年,Spring 5.0的發(fā)展將會(huì)提速,這也是值得每個(gè)Java開發(fā)者需要學(xué)習(xí)的原因。如果你需要一些指導(dǎo),那么《Spring 5.0: Beginner to Guru》課程將是不錯(cuò)的選擇。
Spring Security 5.0
??2017年另一個(gè)有趣的發(fā)布是Spring Security 5.0,這也是我在2018年將要學(xué)習(xí)的一個(gè)內(nèi)容。Spring Security 5.0是一個(gè)重要的發(fā)布版本,開發(fā)人員重寫了很多模塊,并且修復(fù)樂上百個(gè)bug。其中比較有意思的一個(gè)部分是OAuth 2.0模塊。遺憾的是,目前沒有特別多的資料來學(xué)習(xí)Spring Security 5.0。值得慶幸的是,Eugen 更新了他的課程《Learn Spring Security》,包含了版本5.0以及OAuth 2.0模塊。
單元測試
??如果你想在2018年更上一層樓,那么你需要繼續(xù)提高你的單元測試技巧。這里的測試不僅僅是指單元測試,而且包括通常說的自動(dòng)化測試,當(dāng)然也包括集成測試。你可以學(xué)習(xí)JUnit5以及一些其它比較高級(jí)的單元測試庫,例如:Mockito、 PowerMock、Cucumber、Robot 等,從而使你的測試能力提高一個(gè)等級(jí)。Mockito功能非常強(qiáng)大,可以通過模擬依賴幫助你對(duì)一個(gè)復(fù)雜的對(duì)象進(jìn)行測試。如果你剛剛接觸單元測試并且希望在2018年進(jìn)行學(xué)習(xí),那么Udemy 的課程《JUnit and Mockito Crash Course》是個(gè)不錯(cuò)的選擇。
總結(jié)
??這只是我的一些建議。如果你從事Java開發(fā)有些年頭了,那么你可以參考這些要點(diǎn)制定自己的目標(biāo)。比如,你還可以添加Android、Docker、Spark等條目,因?yàn)檫@些對(duì)于Java開發(fā)者也很重要。
??我之所以將這些目標(biāo)制定的簡單并容易實(shí)現(xiàn),是因?yàn)槲覀€(gè)人認(rèn)為巨大的進(jìn)步是有一點(diǎn)一點(diǎn)的小進(jìn)步堆積而成的。設(shè)置小目標(biāo)表比大目標(biāo)更容易實(shí)現(xiàn),往往一些大目標(biāo)在制定的時(shí)候就已經(jīng)注定無法實(shí)現(xiàn)。
??所以,你還在等什么那?寫下你新年的目標(biāo)并和我們分享。等這一年結(jié)束,你可以再過來看看,告訴我們多少目標(biāo)你已經(jīng)達(dá)成。