“超越Java:探论程式语言的未来”书评

作者:周思博(Joel Spolsky)
属于Joel on Software, http://www.joelonsoftware.com

「超越的Java:探讨程式语言的未来」书评

未满30岁的程式员不能理解,为何像我这样上了年纪的老程式员,不会在让人兴奋的新程式语言出现之际就马上采用;他们也无法理解我们为何冷眼旁观那些用来卖书和签顾问约的主流思想(请原谅我对你的新书「至尊 UML重构 模式」兴趣缺缺)(译注:。这本虚构的书使用了前一阵子相当热门的四个技术名词作者之前多次提到他怀疑很多热门思想其实只是拿来卖书和替人做顾问赚钱)

这也许是因为我们读过[没有银子弹](HTTP:// WWW- inst.eecs.berkeley.edu/%7Emaratb/readings/NoSilverBullet.html)这篇Frederick P. 布鲁克斯(人月神话的作者)在1986年年所写极重要的文章,而这篇文章的论点也不断被证实是正确无误的。

写程式要克服两种困难:附属性(偶然)的困难是因为用的编程工具不对才会难,而本质上困难的东西是没有任何工具或语言能解决的「附属性困难」的一个例子是手动记忆体管理,像是的malloc和自由,或人们因的Java没提供顶级函数(顶 水平 功能)而建立的单一(singleton)的类别。本质上困难的东西就像是处理程式不同部分的细微互动,比如找出你刚加入的新功能影响到的所有地方。

程式语言的改良能够消弭「附属性困难」,但是之后还是得面对软体开发的的复杂本质,所以「没有银子弹」理论是从根本上警告我们,从新技术获得的效益会逐渐递减。我在这儿不评论布鲁克的论述,所以你若从未读过[没有银子弹](HTTP:// WWW- inst.eecs.berkeley.edu/%7Emaratb/readings/NoSilverBullet.html)这篇文章,我强力推荐你看一下。

从1950年年代开始,在消除编程的「附属性困难」上有五个大突破粗略来说分别为:

组合语言 2.代数语言(包含Fortran) 3.结构化语言(Algol-60跟C) 4.宣告式语言(包含SQL) 5.记忆体管理语言(包含Lisp,VB,和Java)

所以接下来的问题是:谁是第6个?

[超越Java 图像](http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2FBeyond- Java的Bruce- 泰特%2Fdp%2F0596100949%2FSR%3D8-1%2Fqid%3D1160670053%3Fie%3DUTF8&标签= joelonsoftware&linkCode = UR2&营= 1789&创意= 9325)

布鲁斯泰特的新书[超越 的Java(http://www.amazon.com/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.com%2FBeyond- Java的Bruce- 泰特%2Fdp%2F0596100949%2FSR%3D8-1%2Fqid%3D1160670053%3Fie%3DUTF8&标签= joelonsoftware&linkCode = UR2&营= 1789&创意= 9325)试着找出结论。这本书有效地解释为何有大批资深的Java工程师对这语言感到厌烦,转而使用Python的跟红宝石。

Steve Yegge虽然不是本书作者,但在书里却占有一席之地,他在56, 57页列出了可能清单。这可是书上最重要的两页,因为这里列出了的Python和红宝石(还有评价较低的的JavaScript)确切可以解决的一些事情。

虽然Stevey列出了许多Java的“附属性困难”,不过你阅读这本书时会注意到某个论点,指出明确型别宣告(显式打字, 要求程式员必须宣告型别)似乎是大多数问题的祸首。举例来说,无法在的Java程式码中表示资料,似乎只是必须明确宣告型别的副作用。当然啦,爪哇还有其他问题,但这是切中核心的大问题。

对一个史学家来说,把型别宣告视为良好程式语言能消除的“附属性困难”是个开端._Beyond Java_则是一本对相关讨论做了不错的摘要,值得大家一读。