這8個錦囊,助你成為一名優(yōu)秀的Java開發(fā)者
私底下,隔三差五就有讀者問我:“二哥,怎么樣才能像你一樣,成為一名優(yōu)秀的 Java 開發(fā)者呢?”假如把“怎么才能像你一樣”去掉的話,這個問題就是一個好問題,否則的話,總有點(diǎn)彩虹屁的嫌疑。但話說回來,我喜歡這種提問的藝術(shù)。
從上大學(xué)那會學(xué) Java 到現(xiàn)在,我已經(jīng)積攢了 10 多年的編程經(jīng)驗(yàn),雖然離優(yōu)秀還有很長的距離,但總歸是可以分享一些心得給你,這對你來說,算不上至關(guān)重要,但多少是有點(diǎn)用的,至少在我看來。
01、學(xué)習(xí) Java 8
如果我沒記錯的話,已經(jīng) Java 14 了。但很遺憾的是,我的 IDE 中配置的 JDK 版本還停留在 Java 13,還有一個備用版本,就是 Java 8。之所以沒有追趕時髦,可能是因?yàn)閷W(xué)習(xí)的勁頭不像年輕時候那么足了,讓我先慚愧一會兒。
還有一個客觀上的原因,就是 Java 8 的新特性實(shí)在是開天辟地、空前絕后。像 Lambda 表達(dá)式,Stream 流,可以稱得上是好用到爆。事實(shí)上,還有不少 Java 程序員沒有掌握它們(扎心了吧)。
Java 8 之前,啟動一個線程要這樣:
- Thread t = new Thread(new Runnable() {
- @Override
- public void run() {
- System.out.println("Java 8 之前");
- }
- });
- t.start();
Java 8 之后,啟動一個線程只需要這樣:
- Thread t1 = new Thread(() -> {
- System.out.println("Java 8");
- });
- t.start();
孰優(yōu)孰劣,一清二楚。如果你對 Java 8 的特性還不了解的話,那真的很難成為一名優(yōu)秀的 Java 開發(fā)者。還是那句耳朵能聽出來繭子的話:“種一棵樹最好的時間是 10 年前,其次是現(xiàn)在。”行動起來吧!
02、掌握 Spring
Spring 目前在 Java 開發(fā)中占據(jù)了重要的一環(huán),可以說是密不可分。毫不夸張的說,不會 Spring,絕對算不上一名優(yōu)秀的 Java 開發(fā)人員。我敢賭 1 塊錢,幾乎所有采用 Java 語言編寫程序的公司,都在用 Spring 框架。
雖然我沒有賭錢的惡習(xí),但我敢保證自己能贏。只賭 1 塊錢,不是我摳門,而是為了輸家考慮,這點(diǎn)錢不至于賴賬吧。
架構(gòu)在與時俱進(jìn),就連小到只有兩三個人的開發(fā)團(tuán)隊(duì)都在從單一應(yīng)用程序遷移到微服務(wù)。這就是所謂的浪潮吧,而 Spring Boot 和 Spring Cloud 在這方面有著天然的優(yōu)勢。
03、學(xué)會單元測試
我在日企的時候,測試占據(jù)著重要的位置,代碼 review、單元測試、集成測試等等忙得是不亦樂乎。但當(dāng)我回到洛陽后,團(tuán)隊(duì)就完全沒有這種測試的文化,雖然我在竭力倡導(dǎo),但效果不佳,搞得很多問題都在線上突發(fā),最后疲于應(yīng)付。
如果你想成為一名負(fù)責(zé)任的開發(fā)人員,那就好好磨練你的測試技能吧。JUnit 和 TestNG 是 Java 中非常受歡迎的單元測試框架。設(shè)計(jì) JUnit 的目的是為了分析代碼單元,而 TestNG 的預(yù)期用途則針對高級測試。這兩個框架不能說是平分秋色,但最起碼是各有千秋。
04、熟練 API 和類庫
我有一個大學(xué)同學(xué),叫石磊,編程能力絕對配得上在一線大廠工作。可惜的是,當(dāng)初選擇了二線城市鄭州,這在很大程度上局限了他的發(fā)展。
當(dāng)我遇到任何編程上面的問題時,第一個想到的就是石磊,無論我扔什么問題,他幾乎都能給我提供解決方案,他對整個 Java 的生態(tài)系統(tǒng)(自身的 API 以及開源類庫)了解比我要透徹得多。
如果你希望成為石磊那樣富有擔(dān)當(dāng),就必須要先了解下面這些類庫。
1)日志類庫,比如說 Log4j、SLF4j、LogBack。
2)JSON 解析類庫,比如說 Gson、Jackson、org.json 和 fastjson。
3)測試類庫,比如說之前提到的 JUnit 和 TestNG。
4)通用類庫,比如說 Google 的 Guava,Apache 的一系列類庫。
5)HTTP 類庫,比如說 HttpClient 和 HttpCore。
6)Word、PDF、Excel 類庫。
7)數(shù)據(jù)庫連接池類庫,比如說 durid、HikariCP。
8)消息通知類庫,比如說 RabbitMQ、Kafka。
9)郵件類庫,比如說 JavaMail。
10)加密解密類庫。
05、學(xué)習(xí)設(shè)計(jì)模式
學(xué)編程就像練武功一樣,武功要練得很牛逼,有兩樣?xùn)|西不能丟。第一,是內(nèi)功;第二,是武功秘籍。內(nèi)功對應(yīng)到編程就是我們編程基礎(chǔ)能力,那編程的設(shè)計(jì)模式就可以想象成武術(shù)中的武功秘籍。
設(shè)計(jì)模式就是根據(jù)不同類型場景,設(shè)計(jì)優(yōu)雅的(編碼)解決方案。學(xué)好設(shè)計(jì)模式有很多好處,比如,容易看懂經(jīng)典代碼中的邏輯(很多優(yōu)秀的開源框架大量使用了設(shè)計(jì)模式);應(yīng)對面試時對答如流(設(shè)計(jì)模是面試重點(diǎn));可以編寫出優(yōu)雅的解決方案(或者代碼)。
如果你想學(xué)習(xí)設(shè)計(jì)模式的話,我推薦一本秦小波的《設(shè)計(jì)模式之禪》,趣味化十足,讀起來也非常容易理解。
06、掌握開發(fā)運(yùn)維工具
如果你能夠熟練掌握 Maven、Git、Jenkins、Docker 等持續(xù)集成和部署工具的話,在進(jìn)行開發(fā)運(yùn)維的時候就會感覺如有神助。我來隆重地介紹一下這 4 位同學(xué):
Maven,是一個(特別是 Java)軟件項(xiàng)目管理及自動構(gòu)建工具,由大名鼎鼎的 Apache 軟件基金會所提供,基于項(xiàng)目對象模型(縮寫為 POM,知道那個 xml 文件的由來了吧)的概念,利用一個中央倉庫來管理項(xiàng)目的構(gòu)建和文檔等步驟。
Git 是一個分布式版本控制軟件,最初由林納斯·托瓦茲創(chuàng)作,于 2005 年以 GPL 的開源協(xié)議發(fā)布。大型交友平臺 Github 就是用 Git 做版本控制的代碼托管平臺。
Jenkins 是一款由 Java 編寫的開源的持續(xù)集成工具,使開發(fā)者從繁雜的集成工作中解脫出來,專注于更為重要的業(yè)務(wù)邏輯實(shí)現(xiàn)上。
Docker 讓應(yīng)用程序部署在軟件貨柜下的工作實(shí)現(xiàn)了自動化,借此在 Linux 操作系統(tǒng)上提供一個額外的軟件抽象層,以及操作系統(tǒng)虛擬化的自動管理機(jī)制。
07、熟練使用 IDE
說起 IDE,讓我情不自禁地想起一句古話:“工欲善其事必先利其器”。IDE 就好像士兵手里的那把搶和刀,這玩意如果用得不熟練,怎么上陣殺敵呢?
我是在去年的時候才從 Eclipse 切換 IntelliJ IDEA 的,一開始極其排斥和抗拒,讀者都勸我堅(jiān)持用一段時間,沒想到一個月后就愛上了。你要是非要給我扣上個“喜新厭舊”的帽子,我也是毫無反駁的理由,誰讓這玩意這么好用呢?
上次推薦了兩個提高代碼質(zhì)量的 IDEA 插件,沒想到,大家都說好,你如果想變得優(yōu)秀的話,趕緊去試試。
08、了解 JVM
要想成為一名真正優(yōu)秀的 Java 開發(fā)人員,JVM 這關(guān)注定是繞不過去的,就好像你費(fèi)盡幾代人的心血參加了童試、鄉(xiāng)試、會試,最后要是中不了進(jìn)士,那就有點(diǎn)前功盡棄。
你必須得搞清楚 JVM 的工作原理、即時編譯(JIT)、垃圾收集等相關(guān)知識點(diǎn),才可以編寫出健壯且高性能的 Java 應(yīng)用程序。