「超越Java:探討程式語言的未來」書評 Book Review: Beyond Java

作者:周思博 (Joel Spolsky)
OCTOBER 12, 2006
屬於 Joel on Software, https://www.joelonsoftware.com/2006/10/12/book-review-beyond-java/

未滿 30 歲的程式員不能理解,為何像我這樣上了年紀的老程式員,不會在讓人興奮的新程式語言出現之際就馬上採用;他們也無法理解我們為何冷眼旁觀那些用來賣書和簽顧問約的主流思想(請原諒我對你的新書「Extreme UML Refactoring Patterns」興趣缺缺)。(譯註:這本虛構的書使用了前一陣子相當熱門的四個技術名詞。作者之前多次提到他懷疑很多熱門思想其實只是拿來賣書和替人做顧問賺錢)

這也許是因為我們讀過沒有銀子彈這篇 Frederick P. Brooks(人月神話的作者)在 1986 年所寫極重要的文章,而這篇文章的論點也不斷被證實是正確無誤的。

寫程式要克服兩種困難:附屬性(accidental)的困難是因為用的編程工具不對才會難,而本質上困難的東西是沒有任何工具或語言能解決的。「附屬性困難」的一個例子是手動記憶體管理,像是 malloc 和 free,或人們因 Java 沒提供頂級函數(top level function)而建立的單一(singleton)類別。本質上困難的東西就像是處理程式不同部分的細微互動,比如找出你剛加入的新功能影響到的所有地方。

程式語言的改良能夠消弭「附屬性困難」,但是之後還是得面對軟體開發的的複雜本質,所以「沒有銀子彈」理論是從根本上警告我們,從新技術獲得的效益會逐漸遞減。我在這兒不評論Brook的論述,所以你若從未讀過沒有銀子彈這篇文章,我強力推薦你看一下。

從 1950 年代開始,在消除編程的「附屬性困難」上有五個大突破。粗略來說分別為:

  1. 組合語言
  2. 代數語言(包含 Fortran)
  3. 結構化語言(Algol-60 跟 C)
  4. 宣告式語言(包含 SQL)
  5. 記憶體管理語言(包含 Lisp, VB, 和 Java)

所以接下來的問題是:誰是第6個?

Beyond Java.jpg

Bruce Tate 的新書 Beyond Java 試著找出結論。這本書有效地解釋為何有大批資深 Java 工程師對這語言感到厭煩,轉而使用 Python 跟 Ruby。

Steve Yegge 雖然不是本書作者,但在書裡卻佔有一席之地,他在 56, 57 頁列出了可能清單。這可是書上最重要的兩頁,因為這裡列出了 Python 和 Ruby(還有評價較低的 JavaScript)確切可以解決的一些事情。

雖然 Stevey 列出了許多 Java 的「附屬性困難」,不過你閱讀這本書時會注意到某個論點,指出明確型別宣告(explicit typing, 要求程式員必須宣告型別)似乎是大多數問題的禍首。舉例來說,無法在 Java 程式碼中表示資料,似乎只是必須明確宣告型別的副作用。當然啦,Java 還有其他問題,但這是切中核心的大問題。

對一個史學家來說,把型別宣告視為良好程式語言能消除的「附屬性困難」是個開端。Beyond Java 則是一本對相關討論做了不錯的摘要,值得大家一讀。

這些網頁的內容為表達個人意見。
All contents Copyright © 1999-2006 by Joel Spolsky. All Rights Reserved.