選單

Java之父獨家專訪:我可太想簡化一下 Java了

作者 | 張雅文

IEEE Spectrum 2021 年度程式語言排行榜新鮮出爐,不出意料,Java 仍穩居前三。自 1995 年誕生以來,Java 始終是網際網路行業炙手可熱的程式語言。近年來,新的程式語言層出不窮,Java 如何做到 26 年來盛行不衰?面對技術新趨勢,Java 語言將如何發展?在亞馬遜雲科技 re:Invent 十週年之際,InfoQ 有對 Java 父 James Gosling 博士進行了一次獨家專訪。James Gosling 於 2017 年作為“傑出工程師”加入亞馬遜雲科技,負責為產品規劃和產品釋出之類的工作提供諮詢支援,並開發了不少原型設計方案。在本次採訪中,James Gosling 談到了 Java 的誕生與發展、他對眾多程式語言的看法、程式語言的未來發展趨勢以及雲計算帶來的改變等問題。

Java 的誕生與發展

InfoQ:Java 語言是如何誕生的?是什麼激發您建立一門全新的語言?

James Gosling:Java 的誕生其實源於物聯網的興起。當時,我在 Sun 公司工作,同事們都覺得嵌入式裝置很有發展前景,而且隨著裝置數量的激增,整個世界正逐漸向智慧化的方向發展。我們投入大量時間與不同行業的從業者進行交流,也拜訪了眾多東南亞、歐洲的從業者,結合交流心得和行業面臨的問題,決定構建一套設計原型。正是在這套原型的構建過程中,我們深刻地意識到當時主流的語言 C++ 存在問題。

最初,我們只打算對 C++ 做出一點小調整,但隨著工作的推進、一切很快“失控”了。我們構建出不少非常有趣的裝置原型,也從中得到了重要啟示。因此,我們及時對方向進行調整,希望設計出某種適用於主流業務和企業計算的解決方案,這正是一切故事的開端。

InfoQ:Java 作為一門盛行不衰的語言,直到現在依舊穩居程式語言的前列,其生命力何在?

James Gosling:Java 得以擁有頑強的生命力背後有諸多原因。

首先,採用 Java 能夠非常便捷地進行多執行緒程式設計,能大大提升開發者的工作效率。

其次,Java 提供多種內建安全功能,能夠幫助開發者及時發現錯誤、更加易於除錯,此外,各種審查機制能夠幫助開發者有效識別問題。

第三,熱修復補丁功能也非常重要,亞馬遜開發者開發出的熱補丁修復程式,能夠在無須停機的前提下修復正在執行的程式,這是 Java 中非常獨特的功能。

第四,Java 擁有很好的記憶體管理機制,自動垃圾收集大大降低了記憶體洩露或者雙重使用問題的機率。總之,Java 的設計特性確實提升了應用程式的健壯性,特別是極為強大的現代垃圾收集器方案。如果大家用過最新的長期支援版本 JDK17,應該對其出色的垃圾收集器印象深刻。新版本提供多種強大的垃圾收集器,適配多種不同負載使用。另外,現代垃圾收集器停頓時間很短、執行時的資源消耗也非常低。如今,很多使用者會使用體量極為龐大的資料結構,而只要記憶體能容得下這種 TB 級別的資料,Java 就能以極快的速度完成龐大資料結構的構建。

InfoQ:Java 的版本一直以來更新得比較快,幾個月前釋出了最新的 Java17 版本,但 Java8 仍然是開發人員使用的主要版本,新版本並未“得寵”,您認為主要的原因是什麼?

James Gosling:對繼續堅守 Java8 的朋友,我想說“是時候作出改變了”。新系統全方位性更強、速度更快、錯誤也更少、擴充套件效率更高。無論從哪個角度看,大家都有理由接納 JDK17。確實,大家在從 JDK8 升級到 JDK9 時會遇到一個小問題,這也是 Java 發展史中幾乎唯一一次真正重大的版本更替。大多數情況下,Java 新舊版本更替都非常簡單。只需要直接安裝新版本,一切就能照常運作。長久以來,穩定、非破壞性的升級一直是 Java 的招牌特性之一,我們也不希望破壞這種良好的印象。

InfoQ:回顧當初,你覺得 Java 設計最成功的點是什麼?相對不太滿意的地方是什麼?

James Gosling:這其實是一種博弈。真正重要的是 Java 能不能以更便利的方式完成任務。我們沒辦法設想,如果放棄某些問題域,Java 會不會變得更好?或者說,如果我現在重做 Java,在取捨上會有不同嗎?區別肯定會有,但我估計我的取捨可能跟大多數人都不一樣,畢竟我的程式設計風格也跟多數人不一樣。不過總的來講,Java 確實還有改進空間。

InfoQ:有沒有考慮簡化一下 Java?

James Gosling:我可太想簡化一下 Java 了。畢竟簡化的意義就是放下包袱、輕裝上陣。所以 JavaScript 剛出現時,宣傳的就是精簡版 Java。但後來人們覺得 JavaScript 速度太慢了。在 JavaScript 的早期版本中,大家只是用來執行外部驗證之類的簡單事務,所以速度還不太重要。但在人們打算用 JavaScript 開發高效能應用時,得出的解決方案就成了 TypeScript。其實我一直覺得 TypeScript 的定位有點搞笑——JavaScript 就是去掉了 Type 的 Java,而 TypeScript 在 JavaScript 的基礎上又把 type 加了回來。Type 系統有很多優勢,特別是能讓系統執行得更快,但也確實拉高了軟體開發者的學習門檻。但如果你想成為一名專業的軟體開發者,那最好能克服對於學習的恐懼心理。

Java 之父的程式語言之見

InfoQ:一款優秀的現代化程式語言應該是怎樣的?當下最欣賞哪一種程式語言的設計理念?

James Gosling:我個人還是會用最簡單的評判標準即這種語言能不能改善開發者的日常工作和生活。我嘗試過很多語言,哪種更好主要取決於我想幹什麼。如果我正要編寫低階裝置驅動程式,那我可能傾向於選擇 Rust。但如果需要編寫的是用來為自動駕駛汽車建立複雜資料結構的大型導航系統,那我幾乎肯定會選擇 Java。

InfoQ:資料科學近兩年非常熱門,眾所周知,R 語言和 Python 是資料科學領域最受歡迎的兩門程式語言,那麼,這兩門語言的發展前景怎麼樣?因具體的應用領域產生專用的程式語言,會是接下來程式語言領域的趨勢之一嗎?

James Gosling:我是領域特定語言的鐵粉,也深切認同這些語言在特定領域中的出色表現。大多數領域特定語言的問題是,它們只能在與世隔絕的某一領域中發揮作用,而無法跨越多個領域。這時候大家更願意選擇 Java 這類語言,它雖然沒有針對任何特定領域作出最佳化,但卻能在跨領域時表現良好。所以,如果大家要做的是任何形式的跨領域程式設計,肯定希望單一語言就能滿足所有需求。有時候,大家也會嘗試其他一些手段,希望在兩種不同的領域特定語言之間架起一道橋樑,但一旦涉及兩種以上的語言,我們的頭腦通常就很難兼顧了。

InfoQ:Rust 一直致力於解決高併發和高安全性系統問題,這也確實符合當下絕大部分應用場景的需求,對於 Rust 語言的現在和未來您怎麼看?

James Gosling:在我看來,Rust 太過關注安全了,這讓它出了名的難學。Rust 解決問題的過程就像是證明定理,一步也不能出錯。如果我們只需要編寫一小段程式碼,用於某種固定不變的裝置,那 Rust 的效果非常好。但如果大家需要構建一套具有高複雜度動態資料結構的大規模系統,那麼 Rust 的使用難度就太高了。

程式語言的學習和發展

InfoQ:程式語言傾向於往更加低門檻的方向發展,開發者也更願意選擇學習門檻低的開發語言,一旦一門語言的學習成本過高,開發者可能就不願意去選擇了。對於這樣的現象,您怎麼看?

James Gosling:要具體問題具體分析。我到底需要 Rust 中的哪些功能特性?我又需要 Java 中的哪些功能特性?很多人更喜歡 Python,因為它的學習門檻真的很低。但跑跑基準測試,我們就會發現跟 Rust 和 Java 相比,Python 的效能實在太差了。如果關注效能,那 Rust 或 Java 才是正確答案。另外,如果你需要的是隻有 Rust 能夠提供的那種緻密、安全、嚴謹的特性,程式碼的編寫體量不大,而且一旦出問題會造成嚴重後果,那 Rust 就是比較合適的選擇。只能說某些場景下某些語言更合適。Java 就屬於比較折衷的語言,雖然不像 Python 那麼好學,但也肯定不算難學。

InfoQ:當前,軟體專案越來越傾向採用多語言開發,對程式設計師的要求也越來越高。一名開發人員,應該至少掌握幾種語言?最應該熟悉和理解哪些程式語言?

James Gosling:我剛剛入行時,市面上已經有很多語言了。我學了不少語言,大概有幾十種吧。但很多語言的誕生本身就很荒謬、很沒必要。很多語言就是同一種語言的不同方言,因為它們只是在用不同的方式實現基本相同的語言定義。最讓我振奮的是我生活在一個能夠致力於解決問題的世界當中。Java 最大的吸引力也正在於此,它能幫助我們解決幾乎任何問題。具有普適性的語言地位高些、只適用於特定場景的語言則地位低些,對吧?所以到底該學什麼語言,取決於你想解決什麼問題、完成哪些任務。明確想要解決什麼樣的問題才是關鍵。

InfoQ:2021 年,技術圈最熱門的概念非元宇宙莫屬,您認為隨著元宇宙時代的到來,新的應用場景是否會對程式語言有新的需求?可否談談您對未來程式語言的理解?

James Gosling:其實人們從很早開始就在構建這類虛擬世界系統了,所以我覺得元宇宙概念對程式設計不會有什麼影響。唯一的區別是未來我們可以漫步在這些 3D 環境當中,類似於大型多人遊戲那種形式。其實《我的世界》就是使用者構建型元宇宙的雛形嘛,所以這裡並沒有什麼真正新鮮的東西,仍然是遊戲粉加上社互動動機制的組合。我還想強調一點,虛擬現實其實沒什麼意思。我更重視與真實人類的面對面互動,真的很難想象自己有一天會跟獨角獸之類的虛擬形象聊天。

寫在最後:雲計算帶來的改變

InfoQ:您最初是從什麼時候或者什麼具體事件開始感受到雲計算時代的到來的?

James Gosling:雲計算概念的出現要遠早出雲計算的真正實現。因為人們一直把計算機擺在大機房裡,再透過網路連線來訪問,這其實就是傳統的 IT 伺服器機房,但這類方案維護成本高、建造成本高、擴充套件成本也高,而且對於人員技能等等都有著很高的要求。如果非要說,我覺得多租戶雲的出現正是雲計算迎來飛躍的關鍵,這時候所有的人力與資本支出都由雲服務商負責處理,企業客戶再也不用為此煩心了。他們可以單純關注自己的業務重心,告別那些沒完沒了又沒有任何差異性可言的繁重工作。

InfoQ:雲計算如今已經形成巨大的行業和生態,背後的根本驅動力是什麼?

James Gosling:雲計算的驅動力實際上與客戶當前任務的實際規模有很大關係。過去幾年以來,數字化轉型已經全面掀起浪潮,而這波轉型浪潮也凸顯出新的事實,即我們還有更多的探索空間和機遇,例如,現在人們才剛剛開始探索真正的機器學習能做些什麼,能夠以越來越有趣且多樣的方法處理大規模資料,開展資料分析,獲取洞見並據此做出決策,而這一切既是客戶需求,也為我們指明瞭接下來的前進方向。亞馬遜雲科技做為雲科技領導者,引領著雲科技的發展,改變著 IT 世界,切實解決了企業客戶的諸多痛點。