InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Java、Ruby和持续负担

作者 Scott Delap 译者 郭晓刚 发布于 2007年10月9日

领域
架构 & 设计,
语言 & 开发
主题
动态语言 ,
领域专用语言 ,
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

译者 郭晓刚 是InfoQ中文站架构社区编辑,创建并终结过数家软件小企业,翻译过多本技术书籍。

连续累进税 发表人 Wang Dali 发表于
Re: 连续累进税 发表人 Guo Xiaogang 发表于
不敢认同 发表人 zane dennis 发表于
Re: 不敢认同 发表人 Zaoldyeck Solomon 发表于
问题在于设计 发表人 wang edge 发表于
使用静态语言的人总是忧虑这个问题 发表人 田 乐 发表于
  1. 返回顶部

    连续累进税

    发表人 Wang Dali

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

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

  2. 返回顶部

    不敢认同

    发表人 zane dennis

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

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

  3. 返回顶部

    Re: 不敢认同

    发表人 Zaoldyeck Solomon

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

  4. 返回顶部

    问题在于设计

    发表人 wang edge

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

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

  5. 返回顶部

    Re: 连续累进税

    发表人 Guo Xiaogang

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

  6. 返回顶部

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

    发表人 田 乐

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

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。