InfoQ

新闻

Java、Ruby和持续负担

作者 Scott Delap译者 郭晓刚 发布于 2007年10月9日 下午6时31分

社区
Architecture,
Ruby,
Java
主题
动态语言,
领域特定语言
标签
语言特性,
语言

最近在ActiveRecord与Hibernate之间的争论当中,Google的Bob Lee用了“持续负担(continuous tax)”这个词,来形容使用Ruby这样的动态类型语言相对于Java这类静态类型语言的优缺点:

一般来说Java的学习曲线比Ruby要陡峭,特别是如果你考虑到泛型和学习最大限度地发挥语言的能力。Java的类型系统对长期的可维护性和可用性有好处。而利用Ruby你可以抄捷径省掉这些步骤,更快地顺利得到结果,但你也要付出持续负担(continuous tax)。

Google员工以及TestNG的作者Cedric Beust也注意到了这个词:

“持续负担”这个词是说,当你需要维护或使用用Ruby或Python这样的语言编写的API,你能够得到的信息很少,即便你通过查看测试代码理解了API的含义(有谁这样做过吗?),这种理解和知识也是短暂的,一年之后你需要再次修改同一段代码的时候,你还要再重复一次这样的过程……

Brian Doll将讨论引向了测试与“持续负担”的关系,Beust对此回应说

实际上我并不认为编写测试属于我先前提到的持续负担。虽然我同意用静态类型语言的时候比用动态类型语言通常要少写一些测试,但是代码行数或者测试数量的差异还没有大到能够真正影响开发过程。持续负担是由代码明确性方面的损失引起的,动态语言写出来的代码通常要蒙受这种损失。虽然看起来无关痛痒,实际上丢失类型信息对代码的可维护性和可读性有可怕的影响,因为你看不出传给方法的一个对象到底是什么类型,更糟的是使得连最简单的自动重构也没法应用,比如重命名一个公开方法。

Dion Almaer根据他自己使用动态和静态类型语言的经验进行了反击

  • 动态语言编写的项目代码较少,团队维护起来更容易。
  • 动态语言项目的团队较小,因此我们更容易维护(我们可以用更少的人做更多的事)。
  • Java项目通常是过度设计的(不是Java本身的问题,而是传染了社区中很大一部分人的流行病)。

查看英文原文:Java, Ruby, and the Continuous Tax

6 条回复

回复

连续累进税 发表人 Dali Wang 发表于 2007年10月9日 下午7时31分
Re: 连续累进税 发表人 Xiaogang Guo 发表于 2007年10月15日 上午3时34分
不敢认同 发表人 dennis zane 发表于 2007年10月9日 下午7时41分
Re: 不敢认同 发表人 Solomon Zaoldyeck 发表于 2007年10月9日 下午10时15分
问题在于设计 发表人 edge wang 发表于 2007年10月9日 下午11时49分
使用静态语言的人总是忧虑这个问题 发表人 乐 田 发表于 2007年10月15日 下午6时48分
  1. 返回顶部

    连续累进税

    2007年10月9日 下午7时31分 发表人 Dali Wang

    连续累进税率不是中国的个人所得税方式,Infoq中国也不应当成为推出新词的消息队列,整点大家熟悉的可以理解的术语吧

    或者注释些相关的背景知识让中国的开发者明白超额累进税率和连续累进税率的分别

  2. 返回顶部

    不敢认同

    2007年10月9日 下午7时41分 发表人 dennis zane

    这种理解和知识也是短暂的,一年之后你需要再次修改同一段代码的时候,你还要再重复一次这样的过程……

    ---------------------------
    难道java不一样?一年之后你同样要重新去理解,这个不成为理由。类型信息是很多情况下并没有想象中的重要。

  3. 返回顶部

    Re: 不敢认同

    2007年10月9日 下午10时15分 发表人 Solomon Zaoldyeck

    确实像dennis说的一样,我国现在开发绝大多数并不注意类型信息的使用,所以动态语言这点上也不一定比Java损失更大。不过不知道国外这点做得怎么样。不过我感觉这至少是一种理念,我们应该时刻朝着方便和可复用性好的方向努力。

  4. 返回顶部

    问题在于设计

    2007年10月9日 下午11时49分 发表人 edge wang

    正如Dion Almaer所说,“Java项目通常是过度设计的(不是Java本身的问题,而是传染了社区中很大一部分人的流行病)。”

    所谓的“一年之后你需要再次修改同一段代码的时候,你还要再重复一次这样的过程……”,对于一个过度设计的的Java系统同样适用

  5. 返回顶部

    Re: 连续累进税

    2007年10月15日 上午3时34分 发表人 Xiaogang Guo

    这里并不是continuous progressive tax rate,不知道“连续累进税率”从何而来。能不能请你说说你的理解?

  6. 返回顶部

    使用静态语言的人总是忧虑这个问题

    2007年10月15日 下午6时48分 发表人 乐 田

    使用静态语言的人总是担忧项目的维护问题,担心项目规模变大或者时间很久以后代码会因为退化而变得难以维护。其实静态语言的编译起检查的确能带来一些作用,但不是决定性的。更好的方法还是通过不断的重构和测试,尤其是测试。
    考虑到测试的代码,动态语言与静态语言的代码量差距会缩小一些。

独家内容

专访开源项目Amoeba架构师陈思儒

DBA notes站长冯大辉(Fenng)代表InfoQ中文站采访了分布式数据库Proxy开源项目Amoeba的架构师和主要开发者陈思儒,内容包括Amoeba项目的起因、功能及其愿景等。

使用JSF、Ajax和Seam开发Portlets(2/3)

作为三期系列文章的第二部分,本文延续了上一期内容,介绍了RichFaces,包括如何把RichFaces集成到之前提到的示例应用中、如何部署RichFaces porlet和RichFaces的多种特性和功能。

Jeff Barr谈论Amazon Web服务

Amazon Web Services(AWS)的传道者Jeff Barr讨论了SimpleDB、S3、EC2、SQS、云计算、Amazon的不同服务如何与应用交互、AWS的起源、SimpleDB和微软SQL Server Data Services、AWS cloud的全球化、三月份的AWS停机。

用Erlang实现领域特定语言

Erlang的并发模型很有名,它的健壮性也很有名。但其他方面呢?在这篇文章里,Dennis Byrne演示了如何用Erlang建立内部DSL。

基于Rails的企业级应用剖析

本视频主要以FreeWheel为例,对一个基于Rails的企业级应用进行了剖析。其中包括:FreeWheel的架构、部署、数据库的问题、REST API、敏捷开发过程、如何去写测试以及持续集成等等。

JavaFX技术预览

JavaFX显示了Sun的Java系列产品市场方向的一个重大转变。随着1.0版的即将发布,InfoQ以JavaFX预览版为参考,与Sun高级工程师Joshua Marinacci探讨了即将发布的1.0正式版。

剖析短迭代

敏捷教练Dave Nicolette提出:我们应该如何设定迭代长度?是要根据发布周期的时间么?使用短迭代又有哪些好处?

应用JSF、Ajax和Seam开发Portlets(1/3)

本文主要讲述了如何用JBoss Portlet Container 和JBoss Portlet Bridge创建新项目,怎样配置一个JSF应用去使用JBoss Portlet Bridge,以及JBoss Portlet Bridge所具备的功能。