編程語言之爭,誰將會殺死Java?
英文原文:What Will Kill Java?
Java 是這個星球上最為流行的編程語言之一,但這方面的競爭正愈演愈烈。下面我們將講述 Java 可能遭遇滑鐵盧的地方,以及可以做些什么來預防它的衰退。
2017 年 9 月的 TIOBE 指數(shù)將 Java 列為當月較為流行的語言。其實,它已經(jīng)名列前三甲很多年了。
Stack Overflow Developer Survey 2017將 Java 列為繼 Javascript 和 SQL 之后第三常用的編程語言(實際上,過去四年它都保持著這名次)。
不說這些結(jié)果是如何產(chǎn)生的,亦或者這結(jié)果是否反映了現(xiàn)實世界中的情況,我們不能否認的是,Java 在多個環(huán)境中仍然是一種流行語言。
但是,Java 總有一天會死。世無定事,沒有什么可以天長地久。
編程語言死亡的真正定義是沒有人再使用它——但這樣的情況很難發(fā)生。即使是老朽且不被廣泛使用的語言(例如,你是否聽說過 Modula-3?),仍然在被使用、維護,或者至少會演變成其他的東西。
當然,這是一個漸變的過程,怎么發(fā)生的方法不定。從實際出發(fā),假設(shè)編程語言在它不再被用于新項目時,就意味著它的死亡,但是它可能依然存活在許多遺留項目上(COBOL 就是一個***的例子)。
最終這結(jié)局也將降臨到 Java 頭上,那么誰會殺死它?
讓我們來分析選項。
在以《What Killed Smalltalk Could Kill Ruby Too》為主題的演講中,Robert “Uncle Bob” Martin 說,Smalltalk 被殺的原因是,它太容易造成混亂,并且它的傲慢自大會導致不專業(yè)的實踐方法,如缺乏測試驅(qū)動開發(fā)(TDD)。
在任何語言中你都可以搞得一團亂。當然,在某些語言中,比其他語言更容易導致混亂——例如,在動態(tài)類型語言中,我們可以隨時更改變量的類型——但是我們在 Java 中沒有這個問題。
此外,在 Java 社區(qū)中很多人采用的良好實踐,比如設(shè)計模式和 TDD,有助于我們制作更好的軟件。
所以讓我們來探討另一個選項。
Java 是面向?qū)ο蟮恼Z言。如果其他(新的)范式接管了怎么辦?如果面向?qū)ο蟮木幊套兊眠^時了怎么辦?
好吧,這可能性并不大——基本原理已經(jīng)有很長一段時間沒有真正改變過了。諸如結(jié)構(gòu)化,功能性和面向?qū)ο缶幊痰闹卮髣?chuàng)新發(fā)生在 20 世紀 50 年代,60 年代以及甚至 70 年代,但從那以后,沒有什么舉足輕重的事發(fā)生。
但是,在過去十年中,卻有很多新的語言問世,這些語言有著現(xiàn)代的語法以及新功能的框架。
那么,沒有現(xiàn)代語法和新的功能是否會導致 Java 的死亡呢?
不,我不這么認為。
你還記得(或聽說過)EJB 2.0 及其 Entity Beans 嗎?它們很可怕,但是像 Rod Johnson 和 Gavin King 這些 Java 社區(qū)的成員卻以 Spring 和 Hibernate 等框架回應。
以類似的方式,雖然 Java 不是一個功能齊全的語言,但是由于有 Vavr 這樣的庫,我們可以使 Java 更加功能化。
我的意思是,Java 缺少的某些東西,有人會通過創(chuàng)建(框架,工具,規(guī)范,無論什么)來填補這個空白。
那么 Java 會不會因為另一種編程語言而死亡呢?
我們以 JavaScript 為例。畢竟 JavaScript 正在占領(lǐng)這個世界,對吧?
我們可以在后臺使用 Node.js,類似于移動設(shè)備上的 React Native 或 Ionic,我們甚至不必提及在前端的所有競爭選項。
但是,至少在企業(yè)軟件中,我沒有看到 JavaScript 將要替代 Java 的趨勢。JavaScript 在企業(yè)領(lǐng)域中沒有取得成功的框架或工具。它也沒有與 Java 虛擬機(JVM)相當?shù)臇|西,Java 虛擬機(JVM)依然是大型和關(guān)鍵任務軟件的***平臺。
那么 Kotlin 呢?
Kotlin 語言***出現(xiàn)在 2011 年,并且最近 Google 宣布在 Android 上對 Kotlin 提供***的支持。Kotlin 正在逐漸被知名公司采用,并且不局限于在這些公司的 Android app 上(例子)。
除了現(xiàn)代化的功能,Kotlin 也是一種開放源代碼的語言,它由一家生產(chǎn)*** java ide 的公司提供支持。
所以,如果你問我的話,我的回答是,是的,Kotlin 看起來像是(在遙遠的未來)替代 Java 的一個很好的候選者。
當然,Java 也可能被一種或多種語言所替代。
哪些呢?
我不確定,而且我敢說現(xiàn)在也沒有人知道這個問題的答案。
我所能確定的是,沒有任何語言能夠自主地殺死 Java。不借助任何外力,就此而言。
能夠殺死 Java 的刀子在于它無法滿足市場的需求。
編程語言是構(gòu)建解決計算機問題的應用程序的工具。如果某編程語言提供抽象、模型、工具和框架,使你可以更有效率或創(chuàng)建比 Java 更高效的代碼,你會選擇哪種語言呢?
即使是在 Java 版本之間,如果讓你在 Java 1.4 和 Java 9 之間進行選擇,那么你會選擇 Java 1.4 嗎?你會放棄用 lambdas 或泛型工作的機會嗎?我不這么認為。你會需要較新版本的功能。
在這些年來,由于已檢查異常、內(nèi)部類、getter 和 setter 等等方面,Java 被認為是一種冗長又笨拙的語言。直到 Java 7(有些人認為是 Java 8)才開始好轉(zhuǎn)。
然而,Java 7 于 2011 年發(fā)布,比 Java 1.4(2002 年發(fā)布)晚了九年。在這個時代,這是不能接受的,并且可能會導致惡性循環(huán)。
仔細查看 TIOBE 頁面上的 Java 圖表。盡管 Java 大多數(shù)時候位居前三,但有明顯的下降趨勢,表明它正在失去市場份額。這種趨勢在所有語言中都很普遍。最可能的原因是編程語言的數(shù)量在不斷增加,應用程序越來越多地被以多種語言編寫。因此,競爭比以往任何時候都要激烈。
如果我們認為其他語言比這種語言更好,那么它就不再受歡迎,我們也不會將這種語言教給新一代的開發(fā)人員。
新的教程、課程和書籍將不會再被創(chuàng)造。
社區(qū)中的寶貴成員將被其他技術(shù)吸引走。
該語言將不會用于新的環(huán)境。
將導致減少語言的流行度。
Mark Reinhold,Oracle Java 平臺組***架構(gòu)師,提出的新的六個月發(fā)布計劃,是向前推進 Java 并邁向未來的重大一步。用他的話說(就特征驅(qū)動的版本):
這種方法可以在早期采用者進行徹底的檢查和測試后,以高水平的質(zhì)量提供大的新功能。然而,不足之處在于,較小的 API、語言和 JVM 功能只有在大功能準備就緒時才能實現(xiàn)。
這是在本世紀之交前后幾十年時間里達成的一個可接受的折中方案,當時 Java 僅與幾個以類似的步伐演進的平臺競爭。然而,如今,Java 在與許多以更快速度發(fā)展的平臺一起競爭。
***一段話很多都是事實。
但是,這不僅僅是 Oracle 的工作。社區(qū)也必須保護 Java。
怎么做?
我的一些想法:
- 不要傲慢(不要認為 Java 太大而不會失?。?/li>
- 促進良好的開發(fā)實踐方法
- 繼續(xù)發(fā)布超棒的框架、工具等
- 支持 JSR
- 幫助教學和推廣 Java 語言
- 在新環(huán)境中嘗試 Java
否則,Java 如果無法跟上時代的步伐,那么最終將會被后浪拍死在沙灘上。
-
譯文鏈接:http://www.codeceo.com/article/what-will-kill-java.html
翻譯作者:碼農(nóng)網(wǎng) – 小峰