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

连续累进税 发表人 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分 发表人 乐 田

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

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。