Java 之父:找Bug最浪费时间,现在不是开源的黄金时代
前言
90年代初,James Gosling和一群技術人員合作“綠色計劃”,創建了一個名為Oak的項目,旨在開發出能夠運行于虛擬機的編程語言,開創計算機在家電產品上的嵌入式應用。后來,這項工作就演變為Java。
- 1996年1月,Sun公司發布了Java的第一個開發工具包;
- 1997年2月,JDK 1.1面世;
- 1998年12月8日,第二代Java平臺的企業版J2EE發布;
- 2000年5月,JDK1.3、JDK1.4和J2SE1.3相繼發布;
- ……
隨著互聯網的普及,Java成為全球最流行的開發語言。James Gosling也因此被稱作“Java之父”。
來自于Evrone
James Gosling本人,出生于加拿大,是一位計算機編程天才,1977年獲得加拿大卡爾加里大學計算機科學學士學位,1983年獲得了美國卡內基梅隆大學計算機科學博士學位。畢業后到Sun公司工作,這才有了上面的Java。
近日,外媒Evrone的軟件工程師、技術編輯Grigory與Java之父James進行了一場線上對話。在采訪中,James提出了許多觀點,他認為:“對軟件的可靠性要求越高,靜態類型語言就越有幫助?!彼€分享了自己對某些編程語言的看法:反感C語言中的宏、對Lombok又愛又恨、很喜愛Lisp等等。
關于現代編程語言的構建方式
Grigory:作為軟件開發人員和軟件顧問,我們試圖在俄羅斯組織Python、Ruby、Java和Go社區。您在Java方面的經驗和工作可以很好地幫助開發人員。通過這次采訪,我們希望能夠幫助到其他開發者,一起解決業內的基本問題。
有些語言,比如Go,沒有類和繼承一說,而另一些語言則嘗試使用諸如Rust的特性。作為一名語言設計師,您認為現代通用的、合理的編程語言構建方式應該是什么?
James:我應該會繼續使用類,類對我的編程工作很有用。在C語言中有一些宏,這非常糟糕,因為宏不是語言的一部分,不應該納入其中。而Rust的工作人員正在嘗試恰到好處地使用宏。
對于其他語言,如Lisp家族,人們總是想方設法更靈活地應用它們。它們有一種定義語法的方法,語法幾乎完全與語義無關。在大多數語言中,語法和語義是密切相關的。我曾寫了很多Lisp,我真的很喜歡使用Lisp程序。有的語言能讓你以不同的方式做到這一點,比如在Groovy中,你可以直接使用AST,Rust有一些語法集成的宏。但我總覺得還有一個問題:除此之外還能做什么呢?
Lisp對代碼片段進行運算,再生成新代碼,在Java世界里,人們就是這樣做的。雖然看似低級,但很受歡迎。人們可以使用注釋的組合,用一些不同的語言生成字節碼,這是超級強大的。它會給你意想不到的驚喜,比如在Jackson,它通過計算序列化程序延展了性能。
一方面,這是一種非常強大的技術,另一方面,它非常難以駕馭。這個技術充滿可能性,但這種可能性是有限的。我對Lombok又愛又恨,因為它添加了一大堆Java特性,這些特性都很不錯,但從另一方面來說,也顯示出了弱點。JCP的社區職能在下降,我已經離開好幾年了,雖然有些事情可以做,但也只能是在紙上談談。
Grigory:這就是為什么我們更想了解您創建語言的經驗,而不是一些Java增強建議。五年前,我嘗試操控一些Java字節碼。我發現,用它來創建特定領域的語言有點困難。但是有了Ruby后,就容易多了。Evrone公司有許多精通Ruby的開發人員。Ruby開發人員很優秀,但是他們需要多年的培訓才能真正掌控DSL的魔力。
James:像代碼片段運算這樣的特性,在Java中之所以尷尬是因為Java總是試圖去編譯機器代碼,Ruby幾乎總是被解釋。如果你想同時獲得超強功能和終極性能,這一切就會變得很困難。
如何看待破壞性的更改?
Grigory:25年前,當我開始自己的軟件開發生涯時,我寫了很多C和C++代碼。幾乎每個月都會遇到一次錯誤警報。調試這些錯誤是一件很痛苦的事情。但是現在,我看到許多工具集成到我們的工作流程中,比如靜態類型檢查器?,F代開發人員使用IDE,如NetBeans、IntelliJ IDEA,甚至Visual Studio。他們編寫源代碼,編寫靜態類型檢查器解析程序,構造抽象語法樹,并進行檢查,然后在文本編輯器中標記錯誤。這些技巧不僅適用于靜態類型的語言,也適用于動態類型的語言,在Python、Ruby和TypeScript中皆可使用。
你對靜態類型檢查器有什么看法?它們能幫助人們編寫出更好的程序,還是說需要在語言語法中添加更多內容?
James:我都同意。我非常喜歡使用靜態類型系統的語言,因為它們為靜態類型檢查器和IDE提供了一個框架。作為一名資深軟件工程師,尋找那些奇怪的Bug是最浪費時間的。為減少這方面的時間浪費,我會盡力阻止Bug的出現。因此,我非常喜歡IDE,它能夠提供減少Bug的方法。而動態類型語言很少有框架來解決這個問題,因為它們不一定能判斷所有類型,只能靠猜測。強類型語言(如Java)為類型檢查器提供了更嚴格的框架。在另一個層次上,甚至可以進行自動的定理證明。像Dafny這樣的系統,它有一個非常復雜的定理證明器。所以如果你想建立一個加密算法,你將能夠用數學方法進行證明。這聽上去很夸張,但對于某些代碼來說,真的很有用。
這很大程度上取決于你的目標是什么。
如果你是一名正在努力完成作業的大學生,或是一名正在努力畢業的博士生,那么當你編寫一個程序時,你的目標是讓這個程序至少能運行一次,因為你必須要展示成果。
如果你在行業環境中,那么每次運行都必須成功。一次運行成功和每次都運行成功之間的差別是巨大的。如果只需要運作一次,那么動態語言會更合適。如果你必須確保它能一次又一次地運行,那么所有的靜態類型工具都適用。
如果你是一個物理學家,你想得出一些計算結果,那么它只需要運行一次。這取決于你的工作背景。你對軟件的可靠性要求越高,靜態類型語言就越有幫助。
總結
以上是生活随笔為你收集整理的Java 之父:找Bug最浪费时间,现在不是开源的黄金时代的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 旧金山大学的算法可视化学习教程 赞的教
- 下一篇: 【安全设备】面试