Java 并沒有死!那么体谒,Java這朵“永生花”是怎么永葆青春的呢杯聚?

我是一個(gè)從事Java / Scala / Groovy工作的家伙,這不是一個(gè)秘密抒痒。有些人幌绍,特別是年輕人,在聽到這話時(shí)就會(huì)沖我翻白眼故响。

與現(xiàn)代語(yǔ)言相比傀广,Java老套、低效彩届、而且已經(jīng)完蛋了伪冰,基本上他們都會(huì)這樣對(duì)我說(shuō)。然而樟蠕,實(shí)際情況確實(shí)如此嗎贮聂?

老套

沒錯(cuò),Java的基本結(jié)構(gòu)和限制都比較老套寨辩,而且還依賴于20年前寫代碼的方式吓懈。

編程語(yǔ)言并不是憑空產(chǎn)生的,開發(fā)人員的習(xí)慣和需求是語(yǔ)言設(shè)計(jì)的核心靡狞,雖然語(yǔ)言的發(fā)明者試圖將創(chuàng)新融入其中耻警,但是忽略人們實(shí)際的使用方法是很愚蠢的做法。

Java史上的第一個(gè)里程碑可以追溯到1995年甸怕,雖然它的一些基礎(chǔ)模塊的設(shè)計(jì)看起來(lái)至少有10年的遠(yuǎn)見甘穿,然而很明顯,24年后的今天……看起來(lái)不是那么一碼事了蕾各。

但這不僅僅是時(shí)間的問題扒磁。在過(guò)去的十年中,Java發(fā)生了很多變化式曲。其中一些變化似乎與Java本身無(wú)關(guān)妨托,卻無(wú)比重要。

例如吝羞,廉價(jià)的內(nèi)存對(duì)于生產(chǎn)軟件中大規(guī)模重新采用函數(shù)編程起著舉足輕重的作用兰伤。而這又與反應(yīng)式宣言(The Reactive Manifesto)息息相關(guān)。

便于訪問和管理的云計(jì)算促進(jìn)了微服務(wù)模型概念的發(fā)展钧排,這種模型隨著容器的出現(xiàn)走向了生產(chǎn)環(huán)境敦腔。

于是,在微服務(wù)模型的發(fā)展中恨溜,一些非常適合于某些任務(wù)符衔,但在其他任務(wù)上表現(xiàn)平平的編程語(yǔ)言脫穎而出找前。

編程語(yǔ)言世界的變化遠(yuǎn)不止于此,大數(shù)據(jù)帶來(lái)的新挑戰(zhàn)催生了專門為處理大數(shù)據(jù)而優(yōu)化過(guò)的新的數(shù)據(jù)庫(kù)系統(tǒng)判族,這些數(shù)據(jù)庫(kù)能夠攝取大量的數(shù)據(jù)躺盛,然后對(duì)其進(jìn)行分析。

實(shí)際上形帮,這并沒有催生新的語(yǔ)言槽惫,而是為適合于這項(xiàng)任務(wù)的語(yǔ)言找到了另一種使用方式。

更不用說(shuō)人工智能又一次掀起了爭(zhēng)先恐后的熱潮辩撑。

但是界斜,等一下…

如今,Python成為了機(jī)器學(xué)習(xí)的黃金標(biāo)準(zhǔn)合冀,但是如果快速瀏覽一下它的維基百科頁(yè)面各薇,你就會(huì)發(fā)現(xiàn)Python的誕生早于Java,甚至可以追溯到1990年水慨!

那么R呢得糜?這可是數(shù)據(jù)分析常見的選擇敬扛。R語(yǔ)言始于1993年晰洒。

那么JavaScript呢?奇怪的是啥箭,JavaScript出現(xiàn)于1995年谍珊,與Java同年!

Erlang呢急侥?1986年…

為什么沒人說(shuō)這些語(yǔ)言老套砌滞,卻單單說(shuō)Java呢?

因?yàn)槲覀兏淖兞嘶倒郑€有我們面臨的挑戰(zhàn)也發(fā)生了變化贝润。

例如,Python一直是編寫實(shí)用工具和數(shù)據(jù)處理程序的一種出色的腳本語(yǔ)言铝宵,但通常我們不認(rèn)為它適合于臃腫的企業(yè)應(yīng)用程序打掘。

然而,一般來(lái)說(shuō)微服務(wù)是一些小程序和數(shù)據(jù)管道鹏秋,它們由明確定義的功能型小組件組成尊蚁。

一直以來(lái),JavaScript是動(dòng)態(tài)網(wǎng)頁(yè)的唯一解決方案侣夷,但隨著復(fù)雜Web應(yīng)用程序的激增横朋,將JavaScript帶到服務(wù)器端也算合情合理。

總而言之百拓,我們說(shuō)Java老套琴锭,只是因?yàn)樗浅_m合構(gòu)建臃腫的單體應(yīng)用晰甚,這些應(yīng)用往往擁有數(shù)百萬(wàn)行的代碼量,需要大量的規(guī)劃和嚴(yán)格的順序决帖,而Java的設(shè)計(jì)目的本來(lái)就在于此压汪。

如果試試看用JavaScript構(gòu)建這樣的應(yīng)用,你很快就會(huì)意識(shí)到“死亡不是終點(diǎn) 古瓤,而是一種轉(zhuǎn)變”(摘自:夢(mèng)劇院樂隊(duì)的歌曲《Fatal Tragedy》)止剖。

低效

聽上去確實(shí)如此。

我經(jīng)常用下面的比喻來(lái)解釋Java:

如果你需要做一個(gè)火柴盒落君,那么首先你需要10噸木材穿香,建造一個(gè)小木屋,然后再一點(diǎn)點(diǎn)削成火柴盒绎速。

由于Java強(qiáng)調(diào)用一種正式嚴(yán)謹(jǐn)?shù)姆椒▉?lái)鼓勵(lì)開發(fā)人員創(chuàng)建適當(dāng)?shù)念悓哟谓Y(jié)構(gòu)皮获,所以開發(fā)人員即使覺得這種做法很白癡,也不得不采用正確的方式設(shè)置所有內(nèi)容纹冤,即使對(duì)于一個(gè)非常小的任務(wù)也是如此洒宝。

然而,這就是問題所在萌京,就像我們上面所說(shuō)雁歌,Java的任務(wù)都不容易。

請(qǐng)注意知残,我所說(shuō)的“不容易”指的是不容易實(shí)現(xiàn)靠瞎,但在架構(gòu)方面卻很容易。

編寫錯(cuò)綜復(fù)雜的算法是一項(xiàng)艱巨的任務(wù)求妹,而且我發(fā)現(xiàn)用Python來(lái)寫更容易乏盐。

對(duì)于這一點(diǎn),很明顯我們一直在反復(fù)討論同一個(gè)概念:選擇正確的工具制恍。

一直以來(lái)父能,Java都是一種非常通用的編程語(yǔ)言,而且被用于解決各種情況下各種類型的問題净神,但隨著時(shí)間的推移和挑戰(zhàn)的變化何吝,似乎越來(lái)越明顯Java也并非無(wú)所不能——這并不是因?yàn)樗呀?jīng)演變成了一種專門的語(yǔ)言,而是因?yàn)槠渌Z(yǔ)言更加擅長(zhǎng)處理特定的任務(wù)强挫。

如果你想構(gòu)建一個(gè)大型企業(yè)平臺(tái)岔霸,其中包含大量的內(nèi)部構(gòu)造,巨大的代碼庫(kù)俯渤,瘋狂的并行性等等呆细。

那么Java仍然很給力。等一下,真的是這樣嗎……絮爷?

Java已經(jīng)完蛋了

也許有點(diǎn)陰暗趴酣,但是有一句話說(shuō)的好:“不要害怕未來(lái),你也活不了那么長(zhǎng)坑夯♂” 你是不是感覺想笑……

Java就像一名開發(fā)人員一樣,隨著時(shí)間流逝一天天老去柜蜈,你不再像10年前那樣擁有清醒的頭腦仗谆,但是你會(huì)變得更聰明、穩(wěn)定和可靠淑履。

當(dāng)然隶垮,你仍然可以學(xué)習(xí)Rust,但你永遠(yuǎn)無(wú)法像比你年輕10歲的人那樣秘噪,你總覺得哪里不對(duì)勁狸吞。

同樣,Java也在現(xiàn)代化的競(jìng)爭(zhēng)中不斷落后指煎,當(dāng)新功能出現(xiàn)時(shí)蹋偏,你總感覺在經(jīng)歷了諸多波折后,它們終于成為了現(xiàn)實(shí)至壤。

例如威始,當(dāng)他們第一次引入lambdas時(shí),你的反應(yīng)不是:“哇崇渗!歡呼吧字逗!”京郑,而更像是:“天啊宅广,為什么到現(xiàn)在才出來(lái)啊些举?”

另一方面跟狱,人們沒有意識(shí)到Java的最大成就不在于語(yǔ)言本身。

良好的生態(tài)系統(tǒng)

在規(guī)劃大型軟件時(shí)户魏,讓我想起Java的另一個(gè)因素就是Java的生態(tài)系統(tǒng)驶臊。無(wú)論是何種互聯(lián)網(wǎng)上你夢(mèng)寐以求的東西,Java都可以為你提供卓越高品質(zhì)的庫(kù)叼丑。

想想Spring关翎、Akka、Tomcat等等(我可以說(shuō)出來(lái)幾百個(gè))鸠信,這些都不是業(yè)余項(xiàng)目纵寝,而是非凡的成就。

我并不是說(shuō)其他語(yǔ)言做不到星立,但是在大企業(yè)的推動(dòng)下爽茴,Java創(chuàng)造了這種軟件生存的先決條件葬凳。

此外,一個(gè)良好的生態(tài)系統(tǒng)需要花費(fèi)數(shù)年才能培養(yǎng)起來(lái)室奏,時(shí)間因素也非常重要火焰,對(duì)于Java生態(tài)系統(tǒng)成熟來(lái)說(shuō),20年可以說(shuō)是很長(zhǎng)的時(shí)間了胧沫。

當(dāng)然昌简,你也可以找到適用于多種語(yǔ)言的特殊庫(kù),但是很快你就會(huì)意識(shí)到這些庫(kù)的存亡绒怨,在很大程度上取決于大公司是否認(rèn)可這些項(xiàng)目江场。

例如,為Python找到好的機(jī)器學(xué)習(xí)庫(kù)非常容易窖逗,但你不能否認(rèn)Google在其中發(fā)揮的作用址否。在Facebook的支持下,你才有了React.js(Javascript)開發(fā)出色的Web應(yīng)用程序碎紊。

Java最大的成就是JVM

除了我們之前提到的龐大生態(tài)系統(tǒng)之外佑附,Java最大的成就是JVM。雖然語(yǔ)言可能因年齡的增長(zhǎng)而面臨重重困難仗考,但至少在我看來(lái)JVM很健康音同。

如今,有人可能會(huì)說(shuō)容器化已經(jīng)削弱了對(duì)JVM的需求秃嗜,從某種意義上說(shuō)权均,此言非虛。

JVM最初的需求是允許程序在所有操作系統(tǒng)上執(zhí)行锅锨,但容器改變了一切叽赊,因?yàn)樵谌萜鞯膸椭拢覀兛梢约俣ú僮飨到y(tǒng)可以在任何地方運(yùn)行必搞,甚至是紙上必指。

然而,JVM的作用遠(yuǎn)不止于此恕洲。內(nèi)存管理和垃圾收集塔橡、安全性、基本編程庫(kù)以及調(diào)試和檢查功能霜第,JVM承擔(dān)起了所有的這些工作葛家,為我們提供了一個(gè)安全舒適的環(huán)境。

人們常常反駁我說(shuō):“但是JVM非常臃腫泌类,非常慢癞谒!”雖然從內(nèi)存的占用和引導(dǎo)時(shí)間來(lái)看,這話沒錯(cuò),然而從性能的角度來(lái)看扯俱,過(guò)去的20年中發(fā)生了很多變化书蚪。

我們經(jīng)常會(huì)通過(guò)常用的算法,進(jìn)行下述的比較:

Python 3 Vs. Java

Node js Vs. Java

Go Vs. Java

Erlang HiPE Vs. Java

雖然這種比較對(duì)一些語(yǔ)言不太公平迅栅,因?yàn)樗惴ㄖ皇切阅芤蛩氐囊徊糠质庑#珡闹锌梢钥闯鯦VM絕非病入膏肓。

然而……

從某種程度上读存,我同意雖然JVM狀況良好为流,但Java卻在努力保住自己的地位。

Oracle明白這種形式让簿,而且他們正在努力再次將Java推向巔峰敬察,雖然這種做法會(huì)產(chǎn)生一些意想不到的后果,但沒人能夠阻止老化的過(guò)程尔当。

然而莲祸,這也未必是一件壞事。

JVM充當(dāng)了創(chuàng)建效率更高的現(xiàn)代化語(yǔ)言的平臺(tái)椭迎。雖然不是很多锐帜,但憑良心說(shuō),有一些還是非常成功的畜号。

這就是關(guān)鍵所在缴阎。Java這個(gè)霸主并沒有死,雖然有些咳嗽简软。然而蛮拔,它的后代將繼續(xù)傳承它的遺產(chǎn)。

Scala痹升。我的第二個(gè)心中所愛建炫。這是一種非常強(qiáng)大的語(yǔ)言,它是靜態(tài)類型视卢、面向?qū)ο蟮暮瘮?shù)式編程語(yǔ)言踱卵。雖然仍未被廣泛采用,但目前它是最值得投資掌握的技術(shù)之一据过。Scala是Play Framework的實(shí)現(xiàn)語(yǔ)言,它還經(jīng)常和Akka的actor模型搭配使用妒挎。

Clojure绳锅。一種被廣泛接受的類似于Lisp的語(yǔ)言,以其在并發(fā)計(jì)算方面的強(qiáng)大功能而聞名酝掩,它經(jīng)常用于處理龐大的數(shù)據(jù)集鳞芙。

Groovy。動(dòng)態(tài)編程的腳本語(yǔ)言司抱,我常常覺得它與Java非常類似洗做。Groovy廣泛用于腳本編寫,也是支持Grails框架的語(yǔ)言陕靠。

Kotlin喳坠。雖然最后一個(gè)出場(chǎng)鞠评,但并不是說(shuō)這種語(yǔ)言不重要,它是JetBrains的靜態(tài)類型面向?qū)ο蟮暮瘮?shù)式編程語(yǔ)言壕鹉,如今是Google Android開發(fā)的首選工具剃幌。

上述我們討論的不是Java的擴(kuò)展。這些是全新的編程語(yǔ)言晾浴,但它們都借鑒了Java负乡,最重要的是它們充分利用了JVM和Java生態(tài)系統(tǒng)。

但實(shí)際上…

Java編程語(yǔ)言不會(huì)在近期內(nèi)走向消亡脊凰。

不僅因?yàn)榇罅康能浖际怯肑ava編寫的抖棘,而且無(wú)論你同意與否,它雖然有缺陷狸涌,但仍然是一種久經(jīng)考驗(yàn)非常適合于新項(xiàng)目的編程語(yǔ)言钉答。

當(dāng)然,Java承擔(dān)的角色會(huì)發(fā)生變化杈抢。從前“你唯一需要的只有Java”数尿,而如今只能在部分領(lǐng)域發(fā)揮作用,但它仍然是堅(jiān)實(shí)可靠的一部分惶楼。

雖然我對(duì)Scala非常感興趣右蹦,但是我也必須說(shuō)Oracle和社區(qū)在改進(jìn)Java方面做出了很大貢獻(xiàn),我們都享受著這些改進(jìn)帶來(lái)的優(yōu)勢(shì)歼捐。

雖然新功能的到來(lái)比我們預(yù)想得晚何陆,但在質(zhì)量上卻沒得說(shuō)。

畢竟豹储,編程語(yǔ)言發(fā)展緩慢可能意味著被棄用贷盲,也可能是成功的標(biāo)志。

既然人們?nèi)绱舜笠?guī)模地使用你的編程語(yǔ)言剥扣,那么你就不得不認(rèn)真地對(duì)待所有的重大改變巩剖。

你所做的每一步都需要考慮影響的程度,以及向后兼容性的方式钠怯。任何問題都不能掉以輕心佳魔。

總結(jié)

我在這個(gè)領(lǐng)域已經(jīng)很長(zhǎng)時(shí)間了,所以我有理由相信我對(duì)Java這門編程語(yǔ)言的某些特質(zhì)有了一定的了解晦炊。

在過(guò)去10年中鞠鲜,這個(gè)領(lǐng)域的發(fā)展加快了速度宁脊,但是這些發(fā)展主要集中在某些領(lǐng)域。

出現(xiàn)這樣的情況時(shí)贤姆,你可能會(huì)感覺一切都將發(fā)生變化榆苞。這些發(fā)展讓部分人過(guò)于激動(dòng)和興奮,所以他們四處喧嚷霞捡。

但是坐漏,當(dāng)喧囂過(guò)后,你就可以清楚地看到這些發(fā)展的真實(shí)本質(zhì)弄砍,并盡力利用好這些發(fā)展仙畦。

正如我上述所說(shuō),Java依然是Java音婶,但是坦白地說(shuō)慨畸,多年來(lái)Java努力達(dá)成的所有輝煌還無(wú)人能及。

我想對(duì)你們所有人說(shuō)——無(wú)論是年輕人還是老年人衣式,無(wú)論你喜歡還是討厭Java:享受這個(gè)美妙的科技時(shí)代帶來(lái)的多樣性寸士!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碴卧,隨后出現(xiàn)的幾起案子弱卡,更是在濱河造成了極大的恐慌,老刑警劉巖住册,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件婶博,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荧飞,警方通過(guò)查閱死者的電腦和手機(jī)凡人,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)叹阔,“玉大人挠轴,你說(shuō)我怎么就攤上這事《保” “怎么了岸晦?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)睛藻。 經(jīng)常有香客問我启上,道長(zhǎng),這世上最難降的妖魔是什么修档? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任碧绞,我火速辦了婚禮,結(jié)果婚禮上吱窝,老公的妹妹穿的比我還像新娘讥邻。我一直安慰自己,他們只是感情好院峡,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布兴使。 她就那樣靜靜地躺著,像睡著了一般照激。 火紅的嫁衣襯著肌膚如雪发魄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天俩垃,我揣著相機(jī)與錄音励幼,去河邊找鬼。 笑死口柳,一個(gè)胖子當(dāng)著我的面吹牛苹粟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播跃闹,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼嵌削,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了望艺?” 一聲冷哼從身側(cè)響起苛秕,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎找默,沒想到半個(gè)月后艇劫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惩激,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年店煞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咧欣。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浅缸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出魄咕,到底是詐尸還是另有隱情衩椒,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布哮兰,位于F島的核電站毛萌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喝滞。R本人自食惡果不足惜阁将,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望右遭。 院中可真熱鬧做盅,春花似錦缤削、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至图筹,卻和暖如春帅刀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背远剩。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工扣溺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓜晤。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓锥余,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親活鹰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哈恰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • TITLE: 編程語(yǔ)言亂燉 碼農(nóng)最大的煩惱——編程語(yǔ)言太多。不是我不學(xué)習(xí)志群,這世界變化快着绷! 有時(shí)候還是蠻懷念十幾、二...
    碼園老農(nóng)閱讀 5,296評(píng)論 2 35
  • Scaladoc是什么:scala api文檔锌云,包含了scala所有的api以及使用說(shuō)明荠医,class、object...
    義焃閱讀 2,573評(píng)論 0 1
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,963評(píng)論 1 3
  • 春水初生桑涎, 春林初盛彬向, 春風(fēng)十里, 不如你攻冷。 第一次看這本書的時(shí)候是一個(gè)人出去旅行娃胆,回程飛機(jī)晚點(diǎn)三小時(shí),就靠著這本...
    貝殼0703閱讀 499評(píng)論 3 6
  • 兒子讓我又愛又恨的人等曼,恨他是愛他的另一種感受里烦,我對(duì)待他都是我內(nèi)心的投射!我的恨也是對(duì)自己的恨禁谦,對(duì)自己的焦慮和不滿胁黑!...
    張卉閱讀 241評(píng)論 0 0