編程語言之爭(zhēng),誰將會(huì)殺死Java?
英文原文:What Will Kill Java?
Java 是這個(gè)星球上最為流行的編程語言之一,但這方面的競(jìng)爭(zhēng)正愈演愈烈。下面我們將講述 Java 可能遭遇滑鐵盧的地方,以及可以做些什么來預(yù)防它的衰退。

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





















