软件随想录(local.joelonsoftware.com/wiki)-2006年10月12日 「超越Java:探讨程序语言的未来」书评
2013-03-04 14:34
330 查看
2006年10月12日
「超越Java:探讨程序语言的未来」书评 -
Book Review: Beyond Java
navigation,
search
「超越Java:探讨程序语言的未来」书评
未满30岁的程序员不能理解,为何像我这样上了年纪的老程序员,不会在让人兴奋的新程序语言出现之际就马上采用;他们也无法理解我们为何冷眼旁观那些用来卖书和签顾问约的主流思想(请原谅我对你的新书「Extreme UML Refactoring Patterns」兴趣缺缺)。(译注:这本虚构的书使用了前一阵子相当热门的四个技术名词。作者之前多次提到他怀疑很多热门思想其实只是拿来卖书和替人做顾问赚钱)
这也许是因为我们读过没有银子弹这篇Frederick P. Brooks(人月神话的作者)在1986年所写极重要的文章,而这篇文章的论点也不断被证实是正确无误的。
写程序要克服两种困难:附属性(accidental)的困难是因为用的编程工具不对才会难,而本质上困难的东西是没有任何工具或语言能解决的。「附属性困难」的一个例子是手动内存管理,像是malloc和free,或人们因Java没提供顶级函数(top level function)而建立的单一(singleton)类别。本质上困难的东西就像是处理程序不同部分的细微互动,比如找出你刚加入的新功能影响到的所有地方。
程序语言的改良能够消弭「附属性困难」,但是之后还是得面对软件开发的的复杂本质,所以「没有银子弹」理论是从根本上警告我们,从新技术获得的效益会逐渐递减。我在这儿不评论Brook的论述,所以你若从未读过没有银子弹这篇文章,我强力推荐你看一下。
从1950年代开始,在消除编程的「附属性困难」上有五个大突破。粗略来说分别为:
组合语言
代数语言(包含Fortran)
结构化语言(Algol-60跟C)
声明式语言(包含SQL)
内存管理语言(包含Lisp, VB, 和Java)
所以接下来的问题是:谁是第6个?
Beyond
Java Image
Bruce Tate的新书Beyond
Java试著找出结论。这本书有效地解释为何有大批资深Java工程师对这语言感到厌烦,转而使用Python跟Ruby。
Steve Yegge虽然不是本书作者,但在书里却占有一席之地,他在56, 57页列出了可能清单。这可是书上最重要的两页,因为这里列出了Python和Ruby(还有评价较低的JavaScript)确切可以解决的一些事情。
虽然Stevey列出了许多Java的「附属性困难」,不过你阅读这本书时会注意到某个论点,指出明确类型声明(explicit typing, 要求程序员必须声明类型)似乎是大多数问题的祸首。举例来说,无法在Java程序代码中表示资料,似乎只是必须明确声明类型的副作用。当然啦,Java还有其他问题,但这是切中核心的大问题。
对一个史学家来说,把类型声明视为良好程序语言能消除的「附属性困难」是个开端。Beyond Java则是一本对相关讨论做了不错的摘要,值得大家一读。
Retrieved from "http://local.joelonsoftware.com/wiki/%E3%80%8C%E8%B6%85%E8%B6%8AJava%EF%BC%9A%E6%8E%A2%E8%A8%8E%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80%E7%9A%84%E6%9C%AA%E4%BE%86%E3%80%8D%E6%9B%B8%E8%A9%95"
「超越Java:探讨程序语言的未来」书评 -
Book Review: Beyond Java
「超越Java:探讨程序语言的未来」书评
From The Joel on Software Translation Project
Jump to:navigation,
search
「超越Java:探讨程序语言的未来」书评
未满30岁的程序员不能理解,为何像我这样上了年纪的老程序员,不会在让人兴奋的新程序语言出现之际就马上采用;他们也无法理解我们为何冷眼旁观那些用来卖书和签顾问约的主流思想(请原谅我对你的新书「Extreme UML Refactoring Patterns」兴趣缺缺)。(译注:这本虚构的书使用了前一阵子相当热门的四个技术名词。作者之前多次提到他怀疑很多热门思想其实只是拿来卖书和替人做顾问赚钱)
这也许是因为我们读过没有银子弹这篇Frederick P. Brooks(人月神话的作者)在1986年所写极重要的文章,而这篇文章的论点也不断被证实是正确无误的。
写程序要克服两种困难:附属性(accidental)的困难是因为用的编程工具不对才会难,而本质上困难的东西是没有任何工具或语言能解决的。「附属性困难」的一个例子是手动内存管理,像是malloc和free,或人们因Java没提供顶级函数(top level function)而建立的单一(singleton)类别。本质上困难的东西就像是处理程序不同部分的细微互动,比如找出你刚加入的新功能影响到的所有地方。
程序语言的改良能够消弭「附属性困难」,但是之后还是得面对软件开发的的复杂本质,所以「没有银子弹」理论是从根本上警告我们,从新技术获得的效益会逐渐递减。我在这儿不评论Brook的论述,所以你若从未读过没有银子弹这篇文章,我强力推荐你看一下。
从1950年代开始,在消除编程的「附属性困难」上有五个大突破。粗略来说分别为:
组合语言
代数语言(包含Fortran)
结构化语言(Algol-60跟C)
声明式语言(包含SQL)
内存管理语言(包含Lisp, VB, 和Java)
所以接下来的问题是:谁是第6个?
Beyond
Java Image
Bruce Tate的新书Beyond
Java试著找出结论。这本书有效地解释为何有大批资深Java工程师对这语言感到厌烦,转而使用Python跟Ruby。
Steve Yegge虽然不是本书作者,但在书里却占有一席之地,他在56, 57页列出了可能清单。这可是书上最重要的两页,因为这里列出了Python和Ruby(还有评价较低的JavaScript)确切可以解决的一些事情。
虽然Stevey列出了许多Java的「附属性困难」,不过你阅读这本书时会注意到某个论点,指出明确类型声明(explicit typing, 要求程序员必须声明类型)似乎是大多数问题的祸首。举例来说,无法在Java程序代码中表示资料,似乎只是必须明确声明类型的副作用。当然啦,Java还有其他问题,但这是切中核心的大问题。
对一个史学家来说,把类型声明视为良好程序语言能消除的「附属性困难」是个开端。Beyond Java则是一本对相关讨论做了不错的摘要,值得大家一读。
Retrieved from "http://local.joelonsoftware.com/wiki/%E3%80%8C%E8%B6%85%E8%B6%8AJava%EF%BC%9A%E6%8E%A2%E8%A8%8E%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80%E7%9A%84%E6%9C%AA%E4%BE%86%E3%80%8D%E6%9B%B8%E8%A9%95"
相关文章推荐
- 软件随想录(local.joelonsoftware.com/wiki)-2006年09月01日 语言战争 - Language Wars
- 软件随想录(local.joelonsoftware.com/wiki)-2009年03月09日 如何扮演程序经理的角色? - How to be a program manager
- 软件随想录(local.joelonsoftware.com/wiki)-2004年01月28日 先生可以赏我一个连结程序吗? - Please Sir May I Have a Linker
- 软件随想录(local.joelonsoftware.com/wiki)-2000年05月26日 读程序代码就像读犹太法典 - Reading Code is Like Reading the Tal
- 软件随想录(local.joelonsoftware.com/wiki)-2000年10月04日 无痛功能规格 - 第三篇: 不过...要怎么做呢? - Painless Functional Spe
- 软件随想录(local.joelonsoftware.com/wiki)-2001年05月05日 这个国家的狗做什么工作? - What Is the Work of Dogs in this Cou
- 软件随想录(local.joelonsoftware.com/wiki)-2000年04月11日 使用介面设计手冊第二章 - User Interface Design for Programmers
- 软件随想录(local.joelonsoftware.com/wiki)-2000年05月08日 使用介面设计手册第八章 - User Interface Design for Programmers
- 软件随想录(local.joelonsoftware.com/wiki)-2000年07月25日 匿名回应 - Anonymous Response
- 软件随想录(local.joelonsoftware.com/wiki)-2006年09月17日 由用户端自动取得当机报告 - Get Crash Reports From User Automati
- 软件随想录(local.joelonsoftware.com/wiki)-2006年01月30日 卓越的关键是什么? - What Makes It Great?
- 软件随想录(local.joelonsoftware.com/wiki)-2000年03月23日 软件人员面试教战守则 - The Guerilla Guide to Interviewing
- 软件随想录(local.joelonsoftware.com/wiki)-2006年11月29日 在大型项目使用版本管理工具
- 软件随想录(local.joelonsoftware.com/wiki)-2001年04月21日 别让架构太空人吓到你 - Don't Let Architecture Astronauts Scar
- 软件随想录(local.joelonsoftware.com/wiki)-2002年08月30日 平台 - Platforms
- 软件随想录(local.joelonsoftware.com/wiki)-2003年10月13日 异常处理 - Exceptions
- 软件随想录(local.joelonsoftware.com/wiki)-2000年04月27日 使用介面设计手册第七章 - User Interface Design for Programmers
- 软件随想录(local.joelonsoftware.com/wiki)-2000年05月09日 使用介面设计手册第九章 - User Interface Design for Programmers
- 软件随想录(local.joelonsoftware.com/wiki)-2000年05月24日 策略书之二:鸡生蛋蛋生鸡问题 - Strategy Letter II: Chicken-and-Eg
- 软件随想录(local.joelonsoftware.com/wiki)-2004年01月26日 让你的履历有可读性 - Getting Your Résumé Read