四虎影视库国产精品一区-四虎影视库-四虎影视久久久免费-四虎影视久久久-四虎影视久久-四虎影视精品永久免费网站

TEL:15195455103

Java培訓(xùn) > Java知識 >

java這朵永生花將長存

作者:南京????來源:南京????發(fā)布時間:2020-01-08 10:16????瀏覽量:74

  與現(xiàn)代語言相比,Java老套、低效、而且已經(jīng)完蛋了,基本上他們都會這樣對我說。然而,實際情況確實如此嗎?

  老套

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

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

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

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

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

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

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

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

  實際上,這并沒有催生新的語言,而是為適合于這項任務(wù)的語言找到了另一種使用方式。

  更不用說人工智能又一次掀起了爭先恐后的熱潮。

  但是,等一下......

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

  那么R呢?這可是數(shù)據(jù)分析常見的選擇。R語言始于1993年。

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

  Erlang呢?1986年......

  為什么沒人說這些語言老套,卻單單說Java呢?

  因為我們改變了,還有我們面臨的挑戰(zhàn)也發(fā)生了變化。

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

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

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

  總而言之,我們說Java老套,只是因為它非常適合構(gòu)建臃腫的單體應(yīng)用,這些應(yīng)用往往擁有數(shù)百萬行的代碼量,需要大量的規(guī)劃和嚴格的順序,而Java的設(shè)計目的本來就在于此。

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

北大青鳥軟件學(xué)校

  低效

  聽上去確實如此。

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

  如果你需要做一個火柴盒,那么首先你需要10噸木材,建造一個小木屋,然后再一點點削成火柴盒。

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

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

  請注意,我所說的“不容易”指的是不容易實現(xiàn),但在架構(gòu)方面卻很容易。

  編寫錯綜復(fù)雜的算法是一項艱巨的任務(wù),而且我發(fā)現(xiàn)用Python來寫更容易。

  對于這一點,很明顯我們一直在反復(fù)討論同一個概念:選擇正確的工具。

  一直以來,Java都是一種非常通用的編程語言,而且被用于解決各種情況下各種類型的問題,但隨著時間的推移和挑戰(zhàn)的變化,似乎越來越明顯Java也并非無所不能——這并不是因為它已經(jīng)演變成了一種專門的語言,而是因為其他語言更加擅長處理特定的任務(wù)。

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

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

  Java已經(jīng)完蛋了

  也許有點陰暗,但是有一句話說的好:“不要害怕未來,你也活不了那么長。” 你是不是感覺想笑……

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

  當(dāng)然,你仍然可以學(xué)習(xí)Rust,但你永遠無法像比你年輕10歲的人那樣,你總覺得哪里不對勁。

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

  例如,當(dāng)他們第一次引入lambdas時,你的反應(yīng)不是:“哇!歡呼吧!”,而更像是:“天啊,為什么到現(xiàn)在才出來啊?”

  另一方面,人們沒有意識到Java的大成就不在于語言本身。

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

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

  想想Spring、Akka、Tomcat等等(我可以說出來幾百個),這些都不是業(yè)余項目,而是非凡的成就。

  我并不是說其他語言做不到,但是在大企業(yè)的推動下,Java創(chuàng)造了這種軟件生存的先決條件。

  此外,一個良好的生態(tài)系統(tǒng)需要花費數(shù)年才能培養(yǎng)起來,時間因素也非常重要,對于Java生態(tài)系統(tǒng)成熟來說,20年可以說是很長的時間了。

  當(dāng)然,你也可以找到適用于多種語言的特殊庫,但是很快你就會意識到這些庫的存亡,在很大程度上取決于大公司是否認可這些項目。

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

  Java大的成就是JVM

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

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

  JVM初的需求是允許程序在所有操作系統(tǒng)上執(zhí)行,但容器改變了一切,因為在容器的幫助下,我們可以假定操作系統(tǒng)可以在任何地方運行,甚至是紙上。

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

  人們常常反駁我說:“但是JVM非常臃腫,非常慢!”雖然從內(nèi)存的占用和引導(dǎo)時間來看,這話沒錯,然而從性能的角度來看,過去的20年中發(fā)生了很多變化。

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

  Python 3 Vs. Java

  Node js Vs. Java

  Go Vs. Java

  Erlang HiPE Vs. Java

  雖然這種比較對一些語言不太公平,因為算法只是性能因素的一部分,但從中可以看出JVM絕非病入膏肓。

  然而…...

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

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

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

  JVM充當(dāng)了創(chuàng)建效率更高的現(xiàn)代化語言的平臺。雖然不是很多,但憑良心說,有一些還是非常成功的。

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

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

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

  Groovy。動態(tài)編程的腳本語言,我常常覺得它與Java非常類似。Groovy廣泛用于腳本編寫,也是支持Grails框架的語言。

  Kotlin。雖然后一個出場,但并不是說這種語言不重要,它是JetBrains的靜態(tài)類型面向?qū)ο蟮暮瘮?shù)式編程語言,如今是Google Android開發(fā)的首選工具。

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

  但實際上......

  Java編程語言不會在近期內(nèi)走向消亡。

  不僅因為大量的軟件都是用Java編寫的,而且無論你同意與否,它雖然有缺陷,但仍然是一種久經(jīng)考驗非常適合于新項目的編程語言。

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

  雖然我對Scala非常感興趣,但是我也必須說Oracle和社區(qū)在改進Java方面做出了很大貢獻,我們都享受著這些改進帶來的優(yōu)勢。

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

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

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

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

  總結(jié)

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

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

  出現(xiàn)這樣的情況時,你可能會感覺一切都將發(fā)生變化。這些發(fā)展讓部分人過于激動和興奮,所以他們四處喧嚷。

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

  正如我上述所說,Java依然是Java,但是坦白地說,多年來Java努力達成的所有輝煌還無人能及。(相關(guān)推薦:Java多線程面試題

  我想對你們所有人說——無論是年輕人還是老年人,無論你喜歡還是討厭Java:享受這個美妙的科技時代帶來的多樣性!


本文內(nèi)容、圖片由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至2353260942@qq.com 舉報,一經(jīng)查實,本站將立刻刪除。(如需投稿聯(lián)系管理員開通!)

? CopyRight njjava.com ???? 蘇ICP備14052071號

搶試聽名額

名額僅剩66名

教育改變生活

WE CHANGE LIVES