標籤:padding loaded nal 除了 美的 java語言 alt jpg 失敗
Java是這個星球上最為流行的程式設計語言之一,但這方面的競爭正愈演愈烈。下面我們將講述Java可能遭遇滑鐵盧的地方,以及可以做些什麼來預防它的衰退。
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的死亡呢?
不,我不這麼認為。
你還記得(或聽說過)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大多數時候位居前三,但有明顯的下降趨勢,表明它正在失去市場份額。這種趨勢在所有語言中都很普遍。最可能的原因是程式設計語言的數量在不斷增加,應用程式越來越多地被以多種語言編寫。因此,競爭比以往任何時候都要激烈。
如果我們認為其他語言比這種語言更好,那麼它就不再受歡迎,我們也不會將這種語言教給新一代的開發人員。
新的教程、課程和書籍將不會再被創造。
社區中的寶貴成員將被其他技術吸引走。
該語言將不會用於新的環境。
將導致減少語言的流行度。
Mark Reinhold,Oracle Java平台組首席架構師,提出的新的六個月發布計劃,是向前推進Java並邁向未來的重大一步。用他的話說(就特徵驅動的版本):
這種方法可以在早期採用者進行徹底的檢查和測試後,以高水平的品質提供大的新功能。然而,不足之處在於,較小的API、語言和JVM功能只有在大功能準備就緒時才能實現。這是在本世紀之交前後幾十年時間裡達成的一個可接受的折中方案,當時Java僅與幾個以類似的步伐演化的平台競爭。然而,如今,Java在與許多以更快速度發展的平台一起競爭。
最後一段話很多都是事實。
但是,這不僅僅是Oracle的工作。社區也必須保護Java。
怎麼做?
我的一些想法:
不要傲慢(不要認為Java太大而不會失敗)
促進良好的開發實踐方法
繼續發布超棒的架構、工具等
支援JSR
協助教學和推廣Java語言
在新環境中嘗試Java
否則,Java如果無法跟上時代的步伐,那麼最終將會被後浪拍死在沙灘上。
在未來, 誰將會殺死Java?