先說結論:Java正在過時,并且可能會被淘汰。
每次有人唱衰Java的時候,都會有一群Java程序員憤怒地出來反駁,我也曾是其中的一員。但是現在我更喜歡尊重事實,拿數據說話。
從TIOBE網站每月提供的編程社區指數,我們可以清晰地看到,Java的占比從2001年6月的26.49%逐漸減少到今年(2021)6月的11.54%,20年間下降了15%。這個排行榜是根據互聯網上有經驗的程序員、課程和第三方廠商的數量,并根據各大搜索引擎的搜索熱度以及Wikipedia、Amazon、YouTube統計出的排名數據,可以說能夠客觀反應出各編程語言的熱門程度。因此,我們可以得出結論:Java正在逐漸走向衰落。
下面我將試著分析Java市場份額逐漸減少的原因,以及Java語言的優缺點,希望能對你有所幫助。
Java占比減少的原因:
- 各種新語言的崛起。Java鼎盛的時候,市場的競爭對手很少。而這些年,隨著計算機硬件的發展以及互聯網的普及,各種編程語言也隨之井噴式地出現。每種相對熱門語言出現和發展都會吸走一部分熱度,并帶起新的一波唱衰Java的節奏。這些語言的代表早期有C#,最近有Go。
- JVM體系中一些“BetterJava”的出現。由于Java語言本身的一些弊病(下文會詳細說),JVM上出現了一些語言,如Scala、Groovy、Kotlin,它們打著“BetterJava”的旗號,采用和Java互通的形式發展。一些對Java體驗不滿的團隊,可能會選擇轉向這些語言。
- 互聯網熱點的切換。前些年服務器端編程可能是互聯網領域的主流,近年來由于機器學習、大數據等概念的興起,對這些概念支持更好的語言得以興起,如python、R、Scala等。
- Java語言自身的缺陷。
Java語言的缺陷:
- 語言特性不夠豐富。Java具有跨平臺和向下兼容這兩大賣點,但它們同時也是Java語言沉重的包袱。帶著這些包袱,Java只能緩慢保守地增加語言特性。一些其他成熟語言具備的特性,Java只能選擇不支持或通過替代的方式支持。如Java中沒有函數的數據類型,使用“類型擦除”的方式實現泛型等。
- 語法過于啰嗦。Java的樣板代碼可能是所有編程語言里最多的。Python程序員100行代碼可以搞定的事情,Java程序員可能要寫上500行代碼。
- 應用場景不是剛需。Java雖然在服務器編程方面找到了統治地位,但是這種統治地位并不牢固。具有服務器編程能力的語言太多了,如php、python、Go、dart等,甚至js這種瀏覽器端的語言也來湊個熱鬧,搞了node.js專門用于服務端編程。
- 對多線程的支持不友好。Java對多線程的支持設計得非常不友好,即使經驗豐富的程序員,也容易編寫出產生致命缺陷的代碼。
Java語言的優勢:
- 上手簡單。Java的語法少,并且非常符合直覺,非常適合作為新人的入門語言。
- 生態完整,社區活躍。有海量的第三方框架和依賴包,基本上各個領域都能找到成熟的解決方案。
- 跨平臺。對各個平臺的支持比較完善,基本可以實現“一次編寫,到處運行”。
- 存量項目多。Java運行在數以億計的硬件設備上,這些系統的維護工作足以養活一大批Java開發的程序員。
Java程序員何去何從?
- 首先不要過分焦慮,Java被淘汰不會是一兩天的事情。
- 其次不要把雞蛋放在一個籃子里,多掌握一些技術,技多不壓身。
- 最后提高對自己的要求,多修煉內功,從原理上理解編程,這樣就可以不受語言的限制,隨時能夠適應新的領域的工作。