Java是這個星球上最爲流行的編程語言之一,但這方面的競爭正愈演愈烈。下面咱們將講述Java可能遭遇滑鐵盧的地方,以及能夠作些什麼來預防它的衰退。
謝謝你們的關注,如今加Java高級架構羣可免費獲取Java工程化、高性能及分佈式、高性能、高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的直播免費學習權限及領取相關資料羣號是:603619042前端
2017年9月的TIOBE指數將Java列爲當月較爲流行的語言。其實,它已經名列前三甲不少年了。
- Stack Overflow Developer Survey 2017將Java列爲繼Javascript和SQL以後第三經常使用的編程語言(實際上,過去四年它都保持着這名次)。
- 不說這些結果是如何產生的,亦或者這結果是否反映了現實世界中的狀況,咱們不可否認的是,Java在多個環境中仍然是一種流行語言。
- 可是,Java總有一天會死。世無定事,沒有什麼能夠天長地久。
編程語言死亡的正真定義是什麼
- 編程語言死亡的真正定義是沒有人再使用它——但這樣的狀況很難發生。即便是老朽且不被普遍使用的語言(例如,你是否據說過Modula-3?),仍然在被使用、維護,或者至少會演變成其餘的東西。
- 固然,這是一個漸變的過程,怎麼發生的方法不定。從實際出發,假設編程語言在它再也不被用於新項目時,就意味着它的死亡,可是它可能依然存活在許多遺留項目上(COBOL就是一個完美的例子)。
- 最終這結局也將降臨到Java頭上,那麼誰會殺死它?
讓咱們來分析選項。
- 在以《What Killed Smalltalk Could Kill Ruby Too》爲主題的演講中,Robert 「Uncle Bob」 Martin說,Smalltalk被殺的緣由是,它太容易形成混亂,而且它的傲慢自大會致使不專業的實踐方法,如缺少測試驅動開發(TDD)。
- 在任何語言中你均可以搞得一團亂。固然,在某些語言中,比其餘語言更容易致使混亂——例如,在動態類型語言中,咱們能夠隨時更改變量的類型——可是咱們在Java中沒有這個問題。
- 此外,在Java社區中不少人採用的良好實踐,好比設計模式和TDD,有助於咱們製做更好的軟件。
因此讓咱們來探討另外一個選項。
- Java是面向對象的語言。若是其餘(新的)範式接管了怎麼辦?若是面向對象的編程變得過期了怎麼辦?
- 好吧,這可能性並不大——基本原理已經有很長一段時間沒有真正改變過了。諸如結構化,功能性和麪向對象編程的重大創新發生在20世紀50年代,60年代以及甚至70年代,但從那之後,沒有什麼舉足輕重的事發生。
- 可是,在過去十年中,卻有不少新的語言問世,這些語言有着現代的語法以及新功能的框架。
那麼,沒有現代語法和新的功能是否會致使Java的死亡呢?java
不,我不這麼認爲。
- 你還記得(或據說過)EJB 2.0及其Entity Beans嗎?它們很可怕,可是像Rod Johnson和Gavin King這些Java社區的成員卻以Spring和Hibernate等框架回應。
- 以相似的方式,雖然Java不是一個功能齊全的語言,可是因爲有Vavr這樣的庫,咱們可使Java更加功能化。
- 個人意思是,Java缺乏的某些東西,有人會經過建立(框架,工具,規範,不管什麼)來填補這個空白。
那麼Java會不會由於另外一種編程語言而死亡呢?
- 咱們以JavaScript爲例。畢竟JavaScript正在佔領這個世界,對吧?
- 咱們能夠在後臺使用Node.js,相似於移動設備上的React Native或Ionic,咱們甚至沒必要說起在前端的全部競爭選項。
- 可是,至少在企業軟件中,我沒有看到JavaScript將要替代Java的趨勢。JavaScript在企業領域中沒有取得成功的框架或工具。它也沒有與Java虛擬機(JVM)至關的東西,Java虛擬機(JVM)依然是大型和關鍵任務軟件的首選平臺。
那麼Kotlin呢?
- Kotlin語言首次出如今2011年,而且最近Google宣佈在Android上對Kotlin提供一流的支持。Kotlin正在逐漸被知名公司採用,而且不侷限於在這些公司的Android app上(例子)。
- 除了現代化的功能,Kotlin也是一種開放源代碼的語言,它由一家生產最佳java ide的公司提供支持。
- 因此,若是你問個人話,個人回答是,是的,Kotlin看起來像是(在遙遠的將來)替代Java的一個很好的候選者。
- 固然,Java也可能被一種或多種語言所替代。
哪些呢?
- 我不肯定,並且我敢說如今也沒有人知道這個問題的答案。
我所能肯定的是,沒有任何語言可以自主地殺死Java。不借助任何外力,就此而言。
可以殺死Java的刀子在於它沒法知足市場的需求。編程
- 編程語言是構建解決計算機問題的應用程序的工具。若是某編程語言提供抽象、模型、工具和框架,使你能夠更有效率或建立比Java更高效的代碼,你會選擇哪一種語言呢?
- 即便是在Java版本之間,若是讓你在Java 1.4和Java 9之間進行選擇,那麼你會選擇Java 1.4嗎?你會放棄用lambdas或泛型工做的機會嗎?我不這麼認爲。你會須要較新版本的功能。
- 在這些年來,因爲已檢查異常、內部類、getter和setter等等方面,Java被認爲是一種冗長又笨拙的語言。直到Java 7(有些人認爲是Java 8)纔開始好轉。
- 然而,Java 7於2011年發佈,比Java 1.4(2002年發佈)晚了九年。在這個時代,這是不能接受的,而且可能會致使惡性循環。
- 仔細查看TIOBE頁面上的Java圖表。儘管Java大多數時候位居前三,但有明顯的降低趨勢,代表它正在失去市場份額。這種趨勢在全部語言中都很廣泛。最可能的緣由是編程語言的數量在不斷增長,應用程序愈來愈多地被以多種語言編寫。所以,競爭比以往任什麼時候候都要激烈。
若是咱們認爲其餘語言比這種語言更好,那麼它就再也不受歡迎,咱們也不會將這種語言教給新一代的開發人員。
社區中的寶貴成員將被其餘技術吸引走。
該語言將不會用於新的環境。
將致使減小語言的流行度。設計模式
這是在本世紀之交先後幾十年時間裏達成的一個可接受的折中方案,當時Java僅與幾個以相似的步伐演進的平臺競爭。然而,現在,Java在與許多以更快速度發展的平臺一塊兒競爭。app
最後一段話不少都是事實。
可是,這不只僅是Oracle的工做。社區也必須保護Java。
怎麼作?
個人一些想法:框架
- 不要傲慢(不要認爲Java太大而不會失敗)
- 促進良好的開發實踐方法
- 繼續發佈超棒的框架、工具等
- 支持JSR
- 幫助教學和推廣Java語言
- 在新環境中嘗試Java
不然,Java若是沒法跟上時代的步伐,那麼最終將會被後浪拍死在沙灘上。編程語言