新聞中心
英文原文:What Will Kill Java?

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


咨詢(xún)
建站咨詢(xún)
