BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Javier Paniza: Java开发效率也可以比RoR高

| 作者 张凯峰 关注 1 他的粉丝 发布于 2009年5月23日. 估计阅读时间: 3 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

在我们的技术社区里面,Ruby和Rails从一开始就因为广为传颂的高开发效率而受到人们追捧,有文章为证,也有图片为证,更有图书为证,国内的社区对此反应强烈。这里不得不提的是Bill WaltonCurt Hibbs一篇文章《Rolling with Ruby on Rails Revisited》,这篇文章里面提到“用Rails开发一个web应用的速度至少是用典型Java框架开发的十倍”。

Javier Paniza并不这么认为,他第一次读到这篇文章时非常吃惊:“哇!十倍的速度!?”他决定开始学习使用Rails来开发,期望能够发现高效率和程序员感到幸福的原因所在。

很快,他发现RoR是个很经典的框架,但使用了并不时新的技术:

  • Ruby是个动态类型语言,跟Smalltalk一样。当我更喜欢去静态类型语言。
  • 脚手架是比较被动的代码生成机制,就跟IDE向导或者AppFuse一样。而我更喜欢主动的代码生成,或者根本不需要代码生成最好。
  • 以关系型数据库为中心:代码生成器和ActiveRecord导致必须先考虑数据表,然后才是类。而我更期望一个纯粹的OO,就像Hibernate、JPA,甚至是ODBMS
  • MVC:我想要的是比陈旧的MVC框架更新更好的框架。

为了证明他的观点,他开始用带JPA注解的POJO,以及模型驱动框架OpenXava实现了Ruby文章中的一个应用,结果是用了更少的代码,更少的时间却获得一个更加强大的应用。在用户界面、负责CRUD的controller、实体关系维护等方面,Java方案均表现突出。

由此他总结道:

Java 开发的效率只是文化问题,而不是技术问题。这不是Java的错,错在Java开发者自身。Java开发者太专注于设计非常漂亮的架构,滥用GoF的设计模 式,过分追求重用,实施三层结构并过度使用web service。独独忽略了简单性。其实Java是一门非常优雅的语言,足以简化软件开发。

Javier Paniza没有忘记他使用的是模型驱动框架OpenXava:

RoR 和OpenXava的主要区别在于,RoR是个MVC框架,开发者必须编写model、view和controller,而OX是个模型驱动框架,开发者 只需要编写model即可。结果自然就是更少量的代码但更好的应用实现了。另外一个不同在于,RoR使用了被动的代码生成,也就是说它会为开发者生成代 码,但之后如果开发想要扩展或提炼代码,就不得不编辑生成好的代码。OpenXava没有使用代码生成,唯一的代码就是开发者自己写的代码。

所以选择了好的工具和模式,确定自己的目标,在Java的世界同样可以实现高效率。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

疑似OpenXava的枪手啊 by wen bob

很多同事从java叛逃到ror的原因,仅仅是不想写配置,不想编写所谓“开发者自己写的代码”。老实说,我没觉得自动生成的crud比自己写的差在哪里了,自己从头写,会比修改自动生成的代码更快?呵呵

ROR的好处远不止文章提到的那些 by vincent xie

ruby on rails是一个完全针对web开发量身定制的框架,因此其具备的优势是大部分Java框架远不能比拟的,这是它做web开发效率很高的根本原因。这些量身定制的东西,包括但不限于:
1.ror综合了web开发最佳实践。比如良好的目录结构划分,MVC,管理优于配置,DRY(do not repeat youself)等等。
当然这些实践在java里也是可能使用的,但是需要你主动的去使用,不像ROR一开始就完全综合提供给你了,所以ror开发效率自然上去了。

2.集成了多种方便于web开发的工具。这非常之多,大的比如cache,route map,autotest,小的比如js,css和image文件过期策略,防CRSF攻击机制等等。这些东西在Java里都有解决方案,但是他们是如此只分散,当你需要使用的时候,不得不去外部引用或自己开发,这个大大降低了开发效率。

3.ruby动态语言的优势。实现同样的逻辑,ruby的代码远比java的简洁,很多完成同样功能的包,ruby的代码量几乎只有java的十分之一。代码少,效率自然上去了。

Re: ROR的好处远不止文章提到的那些 by vincent xie

发表了之后就不能修改了,infoq这是咋回事啊,郁闷!

上面有个地方不对:“管理优于配置” 应该是 “惯例优于配置”

另外,想补充一下,
1.上面提到的ror的3个优势,前2个java本质来说也是可以做到的,但是据我了解的目前没有一个做得很好或者有足够的影响力。
2.有一些上了规模有一定积累的企业,很可能自己也把1和2的东西现实了一大半,这个时候开发效率也会比较高的。
3.ror有很多优势,但是也有不少劣势,比如ruby vm和rails本身还在快速发展中,没有java那么稳定,ror开发人员欠缺等等,
事情总是有两面,不能光看到一面,要根据你自己的情况做选择。

对文章及先前的回复无语 by 常 立波

到底是文章对还是前两个回复对?反正偶懒得去学ror

InfoQ不会成长为第二个角斗场吧? by Mc Heresy

真是有点无语,为什么非要分谁好谁坏呢?而且都是各说各的好处,哈哈,我是喷子~

角斗无罪 by Q HF

孙子兵法都说了:“智者之虑,必杂于利害”。各自说说每个东西的优缺点,也让我们这些看客长长见识,呵呵。

其实差不多 by Li Qiang

我觉得其实差不多。如果你熟悉Java Web开发技术,如Spring、Hibernate或Struts等,实现Web应用取决于你的熟练度。
如果你熟悉Java Web技术,却又跑去学习ROR,理由就是别人吹嘘的高效率,其实这是舍本逐末。
ROR、PHP及其框架(如Joomla)、Python+Django等,哪一个不能完成Web开发???所以最终我总结一句话:其实差不多。

Re: 对文章及先前的回复无语 by Lee Jason

到底谁说得对,你去花半个月体验一下Rails就好了,我敢打赌,用一段时间你一定会喜欢上它,一下豁然开朗,觉得之前一直死守Java(也包括.NET)实在是太自闭了。

Re: 其实差不多 by vincent xie

感觉差得远了,用ROR开发web vs Java开发web,就像
用Java来开发web 对比 用C或汇编来开发web 的差别。

不靠谱的论断 by 刘 松

在infoq英文站居然没发现这篇文章,不知怎么回事?
文章出处,大概来自这里:
java.dzone.com/news/productivity-race-ruby-rails-v

可以判定的是,写这篇文章的人,对ror连入门都没有,都不能称其为浅尝辄止。
ruby有它的问题,比如成熟性、性能,等等,每个公司都需要针对自己的情况去权衡。
然而,这篇文章的论据都是站不住脚的,自己试试就知道了:

>> Ruby是个动态类型语言,跟Smalltalk一样。当我更喜欢去静态类型语言。

个人偏好无可厚非,我就喜欢,或者我就不喜欢,都是个人的自由。它既不可被指责,也不能用于说服别人。如果考虑的方面是效率、维护性等等,就需要另一种视角去看了。

>> 脚手架是比较被动的代码生成机制,就跟IDE向导或者AppFuse一样。而我更喜欢主动的代码生成,或者根本不需要代码生成最好。

代码生成在ror里是可有可无的东西,我2年多的ror开发活动中,都不记得用过代码生成。
把ror理解成代码生成,无疑是看了篇绪如“3分钟学会ror”的文章,然后就跳脚骂了。
当然,IDE向导、AppFuse我也都用过。其实,不管“被动”的还是“主动”的代码生成,我都不喜欢。

>> 以关系型数据库为中心:代码生成器和ActiveRecord导致必须先考虑数据表,然后才是类。而我更期望一个纯粹的OO,就像Hibernate、JPA,甚至是ODBMS。

ror默认带的是ActiveRecord库,如果切换成其它库也只是一个配置,比如DataMapper,我现在就在用ror+datamapper。由于ruby语言的强大,即使使用ActiveRecord,也并不是被数据库schema束缚。反倒是Hibernate,看起来是纯粹的OO,倒被数据库schema束缚的紧,不然怎么总是在吵贫血模型、充血模型呢?

>> MVC:我想要的是比陈旧的MVC框架更新更好的框架。

ror的MVC是经典形式的,然而,我相信作者根本不知道同一个Controller的实例,其实例变量列表可以不同。这是最基本的ruby知识。评为“陈旧”真是好笑。

总之,感觉是OpenXava的枪手。然而,为什么infoq把这么一篇漏洞百出的文章摆出来呢?

我们是孩子 by 王 瑜剑

在一个世界呆久了,到另一个世界,开始的高兴与本质的好坏无关。

Re: 不靠谱的论断 by 张 凯峰

这跟枪手有什么关系,我看不出这有百出的漏洞。只是在讲清这么个事实,每个程序员有自己熟悉的工具,和表达意见的方式。

引发思考才是初衷。

Re: 不靠谱的论断 by 刘 松

对事物的评述,要建立在充分了解的基础上。不然,即使逻辑正确,也可能推出不正确的结论。

就这件事而言,不是楼上说的“只是在讲清这么个事实”,而正是因为他讲的恰恰不是事实。

我前面说了,如果一个开发者对ruby和rails有一定的了解,就不致于认为rails的核心竞争力是scaffold代码生成,认为必然受数据库为中心的束缚,认为rails MVC是陈旧的。

所有这一切,正源于没有去了解,没有去思考。

如果一个人这么想了,这么说了,也只是限于自身条件约束,思维意识没有反映客观事实。
但是,如果把这个想法向公众发布,就要有接受公众评判的心理准备,被准备被批学术不严谨。

一个媒体,它发布的内容反映它的品位,它的定位。
我原以为infoq定位在高质量,难道错了?

Re: 不靠谱的论断 by 宋 玮

我没看出这篇新闻有什么毛病啊,只是代表了另一种人的观点而已。萝卜白菜各有所爱嘛!

Re: 不靠谱的论断 by TANG Ray

这种事情不能说是“枪手”。

每个人都有自己觉得“用起来非常爽”的语言,原因就是因为自己用了很多年,已经非常的熟练。而当其突然换到另外一种语言的是很,可能就会觉得不适用。

另外,上面的讨论也提到,Java+某些框架也可以实现很高效的开发,只是没人去统一标准而已。其实,这就是语言发展上的问题。由于Java太过于开放,导致很很多标准的出现,从而间接导致了其效率不高。而ror恰恰相反,基础框架只有一个,所以就不会有那么多的问题。

既然InfoQ是个讨论的常说,则人人都有发言的机会和权力。你可以不同意别人的观点,也可以对你认为是错误的观点进行反驳,这是每个人的权利。但是,不要对其进行人身攻击。

周总理就说过,“求同存异”嘛。

Re: 不靠谱的论断 by 刘 松

>> 周总理就说过,“求同存异”嘛。

没有调查就没有发言权,同样,求同存异也需要建立在双方都进行过充分调查的前提下,不然,就没有“求同”的基础。

“没有调查就没有发言权”一语出自《毛泽东选集》第三卷中,《〈农村调查〉的序言和跋》一文。毛泽东同志针对当时有很多同志保持着一种粗枝大叶、不求甚解的作风,甚至全然不了解下情,却在那里指导工作这一现状,提出实际工作者必须去了解随时变化的情况,“没有调查就没有发言权”,片面简单地看问题是没有办法革命的。

Re: 不靠谱的论断 by 刘 松

>> 另外,上面的讨论也提到,Java+某些框架也可以实现很高效的开发,只是没人去统一标准而已。其实,这就是语言发展上的问题。由于Java太过于开放,导致很很多标准的出现,从而间接导致了其效率不高。而ror恰恰相反,基础框架只有一个,所以就不会有那么多的问题。
======================
java重复的轮子太多,并没有对它们强行标准化,是百花齐放的局面。如果标准化了,就不存在“统一”的问题。
ror在ruby web领域处于事实上的霸主地位,整合能力强。

然而,这些不是ror对java web框架优势的根本所在。ror优势的根本,是ruby语言的优势,这也是rails重新规划3.0的根源。ror凭借这个优势,早把在框架级别进行改良的java抛在了后面,一旦rails3.0发布和完善,这个差距就会越来越大。

如果只关注开发效率和可维护性,即使不用ruby,也可以看看python或jvm上的groovy、scala甚至jython、jruby,总之,建立在发展缓慢的java语言之上的web框架,注定不会有什么惊喜。

Re: 不靠谱的论断 by 刘 松

毛主席那句话的出处,google的结果,还有一说是出自《毛泽东选集》第一卷《反对本本主义》。

不清楚了,请有研究的朋友告知一下。

Re: 不靠谱的论断 by 刘 松

baike.baidu.com/view/431118.htm
引用毛的话:

一 没有调查,没有发言权⑴
  你对于某个问题没有调查,就停止你对于某个问题的发言权。这不太野蛮了吗?一点也不野蛮。你对那个问题的现实情况和历史情况既然没有调查,不知底里,对于那个问题的发言便一定是瞎说一顿。瞎说一顿之不能解决问题是大家明了的,那么,停止你的发言权有什么不公道呢?许多的同志都成天地闭着眼睛在那里瞎说,这是共产党员的耻辱,岂有共产党员而可以闭着眼睛瞎说一顿的吗?
  要不得!
  要不得!
  注重调查!
  反对瞎说!

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

19 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT