Java 並沒有死!
【CSDN編者按】似乎一件事存在久了,就會被唱衰。人們不相信有經久不息的實物。但是,Java似乎是一個特例。
那麼,Java這朵“永生花”是怎麼永葆青春的呢?一起來看本文作者 API Fortress 的CTO Simone Pezzano 的現身說法吧。
作者 | Simone Pezzano,CTO@API Fortress。
譯者 | 彎月
責編 | 胡巍巍
出品 | CSDN(ID:CSDNnews)
我是一個從事Java / Scala / Groovy工作的傢伙,這不是一個祕密。有些人,特別是年輕人,在聽到這話時就會衝我翻白眼。
與現代語言相比,Java老套、低效、而且已經完蛋了,基本上他們都會這樣對我說。然而,實際情況確實如此嗎?
老套
沒錯,Java的基本結構和限制都比較老套,而且還依賴於20年前寫程式碼的方式。
程式語言並不是憑空產生的,開發人員的習慣和需求是語言設計的核心,雖然語言的發明者試圖將創新融入其中,但是忽略人們實際的使用方法是很愚蠢的做法。
Java史上的第一個里程碑可以追溯到1995年,雖然它的一些基礎模組的設計看起來至少有10年的遠見,然而很明顯,24年後的今天……看起來不是那麼一碼事了。
但這不僅僅是時間的問題。在過去的十年中,Java發生了很多變化。其中一些變化似乎與Java本身無關,卻無比重要。
例如,廉價的記憶體對於生產軟體中大規模重新採用函式程式設計起著舉足輕重的作用。而這又與反應式宣言(The Reactive Manifesto)息息相關。
便於訪問和管理的雲端計算促進了微服務模型概念的發展,這種模型隨著容器的出現走向了生產環境。
於是,在微服務模型的發展中,一些非常適合於某些任務,但在其他任務上表現平平的程式語言脫穎而出。
程式語言世界的變化遠不止於此,大資料帶來的新挑戰催生了專門為處理大資料而優化過的新的資料庫系統,這些資料庫能夠攝取大量的資料,然後對其進行分析。
實際上,這並沒有催生新的語言,而是為適合於這項任務的語言找到了另一種使用方式。
更不用說人工智慧又一次掀起了爭先恐後的熱潮。
但是,等一下......
如今,Python成為了機器學習的黃金標準,但是如果快速瀏覽一下它的維基百科頁面,你就會發現Python的誕生早於Java,甚至可以追溯到1990年!
那麼R呢?這可是資料分析常見的選擇。R語言始於1993年。
那麼JavaScript呢?奇怪的是,JavaScript出現於1995年,與Java同年!
Erlang呢?1986年......
為什麼沒人說這些語言老套,卻單單說Java呢?
因為我們改變了,還有我們面臨的挑戰也發生了變化。
例如,Python一直是編寫實用工具和資料處理程式的一種出色的指令碼語言,但通常我們不認為它適合於臃腫的企業應用程式。
然而,一般來說微服務是一些小程式和資料管道,它們由明確定義的功能型小元件組成。
一直以來,JavaScript是動態網頁的唯一解決方案,但隨著複雜Web應用程式的激增,將JavaScript帶到伺服器端也算合情合理。
總而言之,我們說Java老套,只是因為它非常適合構建臃腫的單體應用,這些應用往往擁有數百萬行的程式碼量,需要大量的規劃和嚴格的順序,而Java的設計目的本來就在於此。
如果試試看用JavaScript構建這樣的應用,你很快就會意識到“死亡不是終點 ,而是一種轉變”(摘自:夢劇院樂隊的歌曲《Fatal Tragedy》)。
低效
聽上去確實如此。
我經常用下面的比喻來解釋Java:
如果你需要做一個火柴盒,那麼首先你需要10噸木材,建造一個小木屋,然後再一點點削成火柴盒。
由於Java強呼叫一種正式嚴謹的方法來鼓勵開發人員建立適當的類層次結構,所以開發人員即使覺得這種做法很白痴,也不得不採用正確的方式設定所有內容,即使對於一個非常小的任務也是如此。
然而,這就是問題所在,就像我們上面所說,Java的任務都不容易。
請注意,我所說的“不容易”指的是不容易實現,但在架構方面卻很容易。
編寫錯綜複雜的演算法是一項艱鉅的任務,而且我發現用Python來寫更容易。
對於這一點,很明顯我們一直在反覆討論同一個概念:選擇正確的工具。
一直以來,Java都是一種非常通用的程式語言,而且被用於解決各種情況下各種型別的問題,但隨著時間的推移和挑戰的變化,似乎越來越明顯Java也並非無所不能——這並不是因為它已經演變成了一種專門的語言,而是因為其他語言更加擅長處理特定的任務。
如果你想構建一個大型企業平臺,其中包含大量的內部構造,巨大的程式碼庫,瘋狂的並行性等等。
那麼Java仍然很給力。等一下,真的是這樣嗎……?
Java已經完蛋了
也許有點陰暗,但是有一句話說的好:“不要害怕未來,你也活不了那麼長。” 你是不是感覺想笑……
Java就像一名開發人員一樣,隨著時間流逝一天天老去,你不再像10年前那樣擁有清醒的頭腦,但是你會變得更聰明、穩定和可靠。
當然,你仍然可以學習Rust,但你永遠無法像比你年輕10歲的人那樣,你總覺得哪裡不對勁。
同樣,Java也在現代化的競爭中不斷落後,當新功能出現時,你總感覺在經歷了諸多波折後,它們終於成為了現實。
例如,當他們第一次引入lambdas時,你的反應不是:“哇!歡呼吧!”,而更像是:“天啊,為什麼到現在才出來啊?”
另一方面,人們沒有意識到Java的最大成就不在於語言本身。
良好的生態系統
在規劃大型軟體時,讓我想起Java的另一個因素就是Java的生態系統。無論是何種網際網路上你夢寐以求的東西,Java都可以為你提供卓越高品質的庫。
想想Spring、Akka、Tomcat等等(我可以說出來幾百個),這些都不是業餘專案,而是非凡的成就。
我並不是說其他語言做不到,但是在大企業的推動下,Java創造了這種軟體生存的先決條件。
此外,一個良好的生態系統需要花費數年才能培養起來,時間因素也非常重要,對於Java生態系統成熟來說,20年可以說是很長的時間了。
當然,你也可以找到適用於多種語言的特殊庫,但是很快你就會意識到這些庫的存亡,在很大程度上取決於大公司是否認可這些專案。
例如,為Python找到好的機器學習庫非常容易,但你不能否認Google在其中發揮的作用。在Facebook的支援下,你才有了React.js(Javascript)開發出色的Web應用程式。
Java最大的成就是JVM
除了我們之前提到的龐大生態系統之外,Java最大的成就是JVM。雖然語言可能因年齡的增長而面臨重重困難,但至少在我看來JVM很健康。
如今,有人可能會說容器化已經削弱了對JVM的需求,從某種意義上說,此言非虛。
JVM最初的需求是允許程式在所有作業系統上執行,但容器改變了一切,因為在容器的幫助下,我們可以假定作業系統可以在任何地方執行,甚至是紙上。
然而,JVM的作用遠不止於此。記憶體管理和垃圾收集、安全性、基本程式設計庫以及除錯和檢查功能,JVM承擔起了所有的這些工作,為我們提供了一個安全舒適的環境。
人們常常反駁我說:“但是JVM非常臃腫,非常慢!”雖然從記憶體的佔用和引導時間來看,這話沒錯,然而從效能的角度來看,過去的20年中發生了很多變化。
我們經常會通過常用的演算法,進行下述的比較:
-
Python 3 Vs. Java
-
Node js Vs. Java
-
Go Vs. Java
-
Erlang HiPE Vs. Java
雖然這種比較對一些語言不太公平,因為演算法只是效能因素的一部分,但從中可以看出JVM絕非病入膏肓。
然而…...
從某種程度上,我同意雖然JVM狀況良好,但Java卻在努力保住自己的地位。
Oracle明白這種形式,而且他們正在努力再次將Java推向巔峰,雖然這種做法會產生一些意想不到的後果,但沒人能夠阻止老化的過程。
然而,這也未必是一件壞事。
JVM充當了建立效率更高的現代化語言的平臺。雖然不是很多,但憑良心說,有一些還是非常成功的。
這就是關鍵所在。Java這個霸主並沒有死,雖然有些咳嗽。然而,它的後代將繼續傳承它的遺產。
-
Scala。我的第二個心中所愛。這是一種非常強大的語言,它是靜態型別、面向物件的函數語言程式設計語言。雖然仍未被廣泛採用,但目前它是最值得投資掌握的技術之一。Scala是Play Framework的實現語言,它還經常和Akka的actor模型搭配使用。
-
Clojure。一種被廣泛接受的類似於Lisp的語言,以其在併發計算方面的強大功能而聞名,它經常用於處理龐大的資料集。
-
Groovy。動態程式設計的指令碼語言,我常常覺得它與Java非常類似。Groovy廣泛用於指令碼編寫,也是支援Grails框架的語言。
-
Kotlin。雖然最後一個出場,但並不是說這種語言不重要,它是JetBrains的靜態型別面向物件的函數語言程式設計語言,如今是Google Android開發的首選工具。
上述我們討論的不是Java的擴充套件。這些是全新的程式語言,但它們都借鑑了Java,最重要的是它們充分利用了JVM和Java生態系統。
但實際上......
Java程式語言不會在近期內走向消亡。
不僅因為大量的軟體都是用Java編寫的,而且無論你同意與否,它雖然有缺陷,但仍然是一種久經考驗非常適合於新專案的程式語言。
當然,Java承擔的角色會發生變化。從前“你唯一需要的只有Java”,而如今只能在部分領域發揮作用,但它仍然是堅實可靠的一部分。
雖然我對Scala非常感興趣,但是我也必須說Oracle和社群在改進Java方面做出了很大貢獻,我們都享受著這些改進帶來的優勢。
雖然新功能的到來比我們預想得晚,但在質量上卻沒得說。
畢竟,程式語言發展緩慢可能意味著被棄用,也可能是成功的標誌。
既然人們如此大規模地使用你的程式語言,那麼你就不得不認真地對待所有的重大改變。
你所做的每一步都需要考慮影響的程度,以及向後相容性的方式。任何問題都不能掉以輕心。
總結
我在這個領域已經很長時間了,所以我有理由相信我對Java這門程式語言的某些特質有了一定的瞭解。
在過去10年中,這個領域的發展加快了速度,但是這些發展主要集中在某些領域。
出現這樣的情況時,你可能會感覺一切都將發生變化。這些發展讓部分人過於激動和興奮,所以他們四處喧嚷。
但是,當喧囂過後,你就可以清楚地看到這些發展的真實本質,並盡力利用好這些發展。
正如我上述所說,Java依然是Java,但是坦白地說,多年來Java努力達成的所有輝煌還無人能及。
我想對你們所有人說——無論是年輕人還是老年人,無論你喜歡還是討厭Java:享受這個美妙的科技時代帶來的多樣性!
原文:https://dzone.com/articles/java-is-not-dying-yet
本文由CSDN翻譯,轉載請註明來源出處。
【End】
長三角開發者聯盟
程式碼就是力量,長三角的開發者聯合起來!
加入「長三角開發者聯盟」將獲得以下權益
長三角地區明星企業內推崗位
CSDN獨家技術與行業報告
CSDN線下活動優先參與權
CSDN線上分享活動優先參與權
掃碼新增聯盟小助手,回覆關鍵詞“ 長三角1 ”,加入「長三角開發者聯盟」。
熱 文推 薦
☞ 華為效仿蘋果賣高價手機? 滴滴順風車開放灰度測試; 蘋果官微被投訴“攻陷”| 極客頭條
☞ Python 爬取吳亦凡的 10 萬轉發資料,扒一扒流量的真假!
☞ 19歲當老闆, 20歲ICO失敗, 21歲將專案掛到了eBay, 為何初創公司如此艱難?
System.out.println("點個在看吧!"); console.log("點個在看吧!"); print("點個在看吧!"); printf("點個在看吧!\n"); cout << "點個在看吧!" << endl; Console.WriteLine("點個在看吧!"); Response.Write("點個在看吧!"); alert("點個在看吧!") echo "點個在看吧!"
點選閱讀原文,輸入關鍵詞,即可搜尋您想要的 CSDN 文章。
你點的每個“在看”,我都認真當成了喜歡