摘要
Bruce Tate的Beyond Java辩称,Java作为企业开发首选语言的统治最终会走向终结,企业创新也在十年内首次发生在Java的领域之外。在那本书中,他审视了那些让Java取得史无前例不同程度成功的特性,也思量了新语言超越Java要获得的特性。
后面的章节讨论了这个领域中竞争的其他语言,清楚的认为Ruby在独占鳌头。这些都来自于Tate自己的性能突破(由Ruby on rails支持),Ruby语言的测试和来自于其他使用者也是有利的证据。
是不是Ruby将逐渐超过Java?Java中存在什么样的空白给Ruby填补?以及是否这两种语言将会水火不容?为了调查这些状况,我们联系了几名最杰出的作者,博客和开发人员,得到了他们的见解。他们的回应全都会展现在这篇文章里了。
Bruce Tate:一石激起千层浪
?? Bruce Tate并不是作为一个局外者写就《超越Java》这边书的。他的顾问公司专注于Java 持久化框架和轻量级开发方法,同时他也是这些流行的Java图书的作者, Spring: A Developer's Notebook, Better, Faster, Lighter Java, 以及 Bitter Java。
1,在《超越Java》中你花费了大量的时间在Ruby上面,看起来是它像在你说那些将超越Java竞争者中出类拔萃。你觉得是什么使Ruby比 PHP,Python这类语言优越?
这些都是好语言,但是都有一些缺点。对大型应用,PHP和Perl不能连续地产生可读的代码。Lisp,Python和Smalltalk这些就缺少了伟大语言好像应该拥有的催化剂。Ruby是一种好语言,和催化剂(Rails)提供了引人注目得新价值(以效率的角度)以及还在飞速地增长。Ruby不一定是最好的语言,但是它将是我所见过最有可能的。Ruby不大可能在委员会那里超过Java。它很有可能首先在一个更小但是却重要的环境中取得好成绩。这个环境也就是一个有web UI大的胖关系数据库。
2,是否Rails就意味着Ruby?其他语言包括Java难道就不能实现同样的思想?
如今,Rails就是超过象Netscape之类语言的催化剂,具有Java一样的功能,可通过网络实现应用的传送。但是我认为Rails很有可能仅仅是Ruby元编程框架浪潮的第一波。
3,你的书中很多都基于典型的“将一个web接口连接到数据库”场景,Ruby的成功案例看上去也仅仅是一两个开发人员的小项目。但是你也承认了Java的重量级企业框架对一些项目的价值(即大型系统上的大型应用)。什么情况下一个项目对于RoR来说过于大的呢?如果一个RoR在那方面的特性发展缓慢呢?
有Ruby和小团队你可以做很多事情。基础代码几乎都是一个人写就的,但却关乎整个公司的生计。在一些主要的公司开始进行认真的尝试之前,我们不知道你可以利用ruby或者rails到什么程度。其中一个最吸引我的事情是经济的规模,更小的规模。万一生产力的数字是真实的呢?万一确实可以得到5X的增长?那么你可以在一个部门内划分工作,将工作划分给团队中的一个。交流将很少会成为问题。管理和疏忽也很少会成为问题了。我们都知道对于一间公司增长, tipping points意味着什么。因为增加沟通和管理的级别会产生很多的障碍, 所以一间公司增长要超过1,5,10,40,甚至100倍是很困难的。但是,在这一点上, Ruby on Rails的可扩展性是非常的好。
4,你是否看到Java开发人员转向Ruby吗,还是Ruby将会给新一代的开发人员采用?
我觉得两者都有可能。有开发人员不能容忍学习servlets, Spring, XML, Hibernate, Struts 然后还要学习一些 UI 粘合的框架。在Rails中,他们将会完全给释放出来。同时也有Java开发人员已经在寻找更加优势的方法,他们发现了Ruby on Rails。接受了Rails的Java梦想家们的数目是令人惊愕的,他们有Thought Works,James Duncan Davidson,Stuart Halloway 更有 David Geary。
5,难道Java本身就不能做一些事情来维持它的杰出地位?如果过于复杂和膨胀,什么可以阻止开发人员倒退到jdk 1.4?
Java将会继续处于顶峰,并在企业应用上保持良好的表现,但是时间不会停滞不前。在某种意味上它终将会给替代。我们将需要一个更高级别的抽象。我认为我们最好的希望就是在JVM上做充足的投入,更好地支持动态语言, 拥抱新的事物,对于旧有的java代码,则最好是保留保守的态度。
6,我们应该期望Ruby在其他领域引起轰动?如果对于开发web应用它是如此不错,假如Ruby有的可以使用的合适的UI框架,会不会在桌面应用也实用呢?
现在说什么还为时过早。如今,尽管Ruby是有催化作用(Rails)的语言,但是它仅仅是一个候选。以后将会发生什么?我想谁也不知道。
James Duncan Davidson:尝试新事务
如果你使用Tomcat或者Ant(认真地说,什么Java开发人员什么使用过?)那么你就熟悉了James Duncan Davidson的工作了。在Sun,他致力把这些项目开源并且把他们捐献给Apache基金会。并且他也编写了Servlet API的最初两个版本,还有处理XML的Java API。离开Sun之后,他做起了Mac OS 的X开发。编写《Running Mac OS X Panther》和参与编写了《Running Mac OS X Tiger》,《 Mac OS X Panther Hacks》,《 Cocoa in a Nutshell》和《Learning Cocoa with Objective-C, 2nd Edition》
1,上一次我们见到你的时候,你还是那个《Mac desktop apps in Cocoa》家伙。而现在,我在你的blog上看到你已经深深地陷入了Rails。那是什么回事?
我当时穷的要命和急切地需要钱。那时我刚刚买了一幢新房,并且抵押付款期限就快到期了――噢,
等会,你想我认真点吗?好吧,事实是我和我的几个朋友已经一直在想一起工作一段时间了。当恰当的时机到的时候,我们给项目做了技术评估,Rails成了首选。那时我还没用过Rails或者Ruby。但是我是不会让小小的需要学习阻碍我去做那个项目的。今年我已经学习了三种,可能四种语言了。我不再相信一种语言可以做任何事了。如果我需要学习一些新知识去一些事情,我将全力以赴去学好它。
2,你对Rails有什么看法?
主要是简单性。完成事情的容易程度。我做的那个应用的第一个项目原来是一个基于Java的web应用。每个人都知道一定会有一种更好,更快,更容易的方法的。Ruby一直都是一种好语言――并且是一种有趣的语言――因此建立于它之上的这个框架,它应得到关注。
3,Ruby的晦涩和Rails的新颖对客户来说会不会是一个问题?
不全是。如今事实上恰恰相反。有太多潜在的工作, 缺并没有足够的人在真正地开发Ruby on Rails应用。
4,为什么Ruby会如此特殊?难道Rails就不能在其他语言中实现?难道它就不能给Java实现?
很少有其他语言可以完成Rails,或者像Rails那样的。Java不在他们之列。Rails从Ruby中获取了一些妙不可言的东西,尝试用另一种语言复制它不仅是对Rails所做的是一个浪费,对其他语言来说也是一个浪费。但是它的概念一定会在其他非常动态的,动态类型语言中得到很好的应用。
确实,我很兴奋的看到其他项目正实现一些从Rails衍生的主意到其他平台中。例如作为一个Python里的Rails版本,Django得到了一些固定的发展。但是,实际上它是Python自己的庞然大物,它如何成长将会非常有趣。
现在,我已经说过了你不能用Java来实现Rails。但却并不意味着你不能用Java做一些同样优秀的东西。Java的力量可以以一种有趣的,神奇方式应用到一种全新的框架上。只是还没人做那些事情。每个人都对J2EE这个糕点趋之若骛,以致于没人以一种更加激烈,更加动态的方式来重新考虑问题。尽管有人提出一个基于Java的杀手级的框架可以与Rails做同样多工作, 它一定也不能做的象Rails一样。
5,具有良好设计的Java应用能够很好地支持特性的扩展――设计好你的类和包,那么你的心情将舒畅好长的一段时间。能否有团队编写出一个真正大型的Ruby应用?它是否具可维护性?或者还是RoR只能小打小闹?
设计良好的应用无论是以何种语言编写的都能够很好地支持特性的扩展。糟糕的设计无论是何种语言就不能了。同时也有了如何才是大型应用的定义的问题。我用Ruby写的第一个rails应用部署到生产也不够5,000行代码,但是我之前用其他语言编写的同样大小的应用却达到了50,000行代码,所以如何定义大型是个问题。
有团队可以编写一个可以支持大量特性,运行良好,时间上具备可维护性的Ruby on rails应用吗?是的,毫无疑问。在使用了Ruby on Rails一段时间后,我将有信心用Rails解决任何尺寸的web应用问题。但是,那是因为我在它上面花费了一些时间,认识到编写一个具有良好设计的应用是有可能的。
也就是说,很有可能现在正有几十个垃圾的Ruby on rails应用在编写中。几百或者几千个都有可能。如果你不知道你正在做什么,你将会编写一个垃圾的应用。
6,那么我们回到了web应用,你可以在桌面上使用ruby,或者我们是否一直要用C#,面向对象C还是OS服务商支持的语言编写UI?
嗯,我的生活的一部分就是回到web应用。它对我来说是一个很好的还环境,因为自从1994年开始我就一直在做基于web的工作。但是现在我将开发基于桌面的应用。而且人们对桌面应用的需求还很大。我可不想要一个网络的office。你也不想把一些象Aperture的东西建造成一个web应用吧。
你现在可以使用Ruby去建造一个引人注目的桌面应用吗?不,相关的工具包还不存在。但是如果存在了恰当的工具包――这是有可能的。那就没有什么东西可以阻止它成为一个好的桌面应用语言了。那是说,我已经发现利用平台的最好的方法就是尽量的本地化-贴近平台,不管它是一个操作系统或者还是一个web应用框架。当我在Mac上的桌面工作,我需要写面向对象C和Cocoa。当我用Rails的web工作,那意味着使用Ruby。而对于操作系统方面的工作,我需要用到C和shell。在这个讨论中不会只有唯一的答案。????
我认为这就是最近对Ruby on Rails关注和屏弃以有色Java眼镜看待世界的真正胜利。Ruby并不会成为下一个Java,完全不。而是Ruby on Rails将会帮助打破了这样的一个观点-- “只有一个正确的方法”,不是的。解决问题的方法有千百条。真正的,他们中没有一个是明显的胜者。只有解决方案有优势的位置。
我想就像我们在其中工作,吃饭和居住的建筑物一样。一些建筑物最好是用水泥和钢筋筑造。其他的是用砌筑。还有其他的最好是用木材,并且那样做是有理由的。没有人会跳起来说“所有的建筑物一定要用砖头筑造!”,那样太愚蠢了!同样的道理,不是所以的应用都应该要用Ruby on Rails或者Django或者J2EE或者Perl来编写的。对于任何一个特定的工作都有大量的工具。还有新的工具等待去发掘呢。诀窍就是决定最优秀的那个。
让我们从夸夸其谈回到你的问题:在web应用的范畴,很容易出现一个新的框架的,因为你并不是与视频卡,GUI和应用在上面跑的整个系统之类打交道。除非是你愿意开发一个自己的框架,你必须面对选择使用哪个框架的选择。在桌面上也是同样的道理。你可以创建你自己的框架,做任何你想要的做的,但是该建议却不比你自己为web创建一个新框架容易。
Robert Cooper:带上利器
ONJava的博客Robert Cooper最近在他的blog上撰写了
“It's the End of the World as We Know It."”来回应一些“Java时代末日”的言论。Cooper是亚特兰大地区致力于企业集成和web/web服务应用的J2EE开发人员,同时也是资讯和娱乐站点screaming-penguin.com的经营者。
1,你曾经说过“长期以来‘企业级’Java一直未能逃脱的一个很悲哀的事实是500个应用才需要‘企业级’的功能。”为什么Java开发人员采用了比他们实际需要更加复杂的框架?
好的,有一些因素导致了这样现象。一个是“buzzword compliance”. 你想使用你“应该”要使用的东西。我记得在99年一些大项目采用了entity bean作为数据模型,但是我们很快发现了性能是如此的恐怖以致于我们最终又转到了手写的DAO层。
最近对javax.persistence的修改,一定程度也表明了,EJB的失败一直都是缺乏不同级别的支持。理想的情况是,如果我仅需要基本的,简单的ORM-类型功能,我就能够很快的得到。如果我想深入真正复杂的东西,给我一个“更深层”的有分布式事务的视图。然而,尽管在那样高的层次上,在EJB1.1/1.2的世界里,看看你需要多少行代码1)从JNDI获得Home存根,2)做一个find by,3)做改变,4)提交事务。对于一般的应用,答案没有理由只应独一无‘二’。然而更新颖的Java框架(阅读:Spring + Hibernate)使你获得了那一个‘二’,但是你也要做一大堆的配置。那样,很多方面, 混淆了你的代码。大量的因素促成我我的演说“拥有一个有效的默认配置/操作”,但是那是不同的故事了。
2,你一向不屑把Ruby on Rails看作是technorati中的后起之秀。你是根本就不想接受还是只是厌恶这种夸夸其谈呢?
并不是我真的这样不屑。Rails在很多重要的方面来说非常优秀。事实上,如果PHP是那要死的飞行意粉怪,并且要给Ruby替代,我想那将是一个大进步。然而,尽管Ruby确实扫除了过去的错误,它仍然缺乏Java那么多的功能,但是Ruby为快速开发提供了一个引人注目新的开发模型。你可能反对,这仅仅是时间问题,假以时日,它一定可以的。然而,我对Ruby/Rails有一些敌意, 是因为我一些一直都在希望java能够拥有的特性,一直长期希望J2EE能够拥有简单性。
3,那么是什么促使你继续留在Java阵营,你看中它的什么呢?
按照我日常的工作,在400上没有必要使用Ruby调用PCML/RPG程序。同样,那些大量的java拥有的 “企业级”特性很重要,更不用说它是一个统一的打包和部署的框架。
4,你说“然而,Java像是变成了无所不包的了,它不是‘web的语言’,也不是桌面应用的‘一等公民’。”Java是否应该放弃一些野心,专注在一个更小应用空间集合里?如果那样,放弃哪个?
你也知道,我在我的站点上和一个绅士有很长的讨论。他指出了Java在J2ME世界的成功,TME/TiVo,置顶盒--或许是下一代DVD的混战。这些对于开发来说都是有效的领域,但是我认为如果Java变成了这样的一个系统,那将是一个损失。
使我恼怒的是Java发明的“applet”,你看看Flash(加上Flex/Laszlo),它的“Cool”(快速的用户体验)和“强大的”(我免费的得到数据绑定/SOAP/XML-RPC等等)使applets无地自容。“强大的”缺不需要JRE的事实立马扼杀了applet的生存空间,如果有人能以接近数目的代码行数向我展示Laszlo Dashboard demo,我可能已经在那个方面得到了一个核心发展。Cool是需要很大的代价的.
5,Java越来越多的复杂性,越来越多的竞争框架,这是你之前批评很多次的。我们用JDK 1.2的语义编码,手工编写servlet是不是更好呢?
我认为的复杂性是很难管理。例如,如果你从一个VB背景开始关注使用Swing,那是非常令人难受的。当你需要做一些技巧性的东西,没有一个“简单”接口可以Cast成更加“高级”的接口。坦白的说,最近出现的一个有用的东西就是JAX-P了。在我头脑中,还有一些东西jre没有的,但是却是必须存在的。Swing存在有多久了?然而还没有东西可以给你像VB5的数据绑定表格控制的功能。
我想JDK 1.5的提升是非常显著的。当我谈到“降低复杂性”,我真正指的是A)对于一件事情, 给予更多标准的途径来完成,因此如果我真正需要一些不同的特性,我仅仅需要一个外部的框架。B)设计更加友好的API――认真的说,看看JavaMail的JavaDoc,看看研究出如何发送一个HTML格式的email要花费你多长时间。C)增加更加通用的功能到核心运行环境,提供一个可以分别与基于Flash,RIA和桌面领域的Avalon/Sparkle相比拟的风格和性能。同样的,我记得以前天真地从VB/VC++转到Java世界,想道“天哪,本来一直就应该是这样的。”几年前,我不能说我看到任何增加到Java的东西都是和我有同样的想法(除了将要来临的JAX-WS API)。看看Rails,你会有同样的感觉。看看Flex你也有同样的感觉。看看Avalon你也有同样的感觉。不是我不喜欢Ruby,只是看上去Java不再可以与时俱进让我很沮丧。
Bill Venners:发行人的观点
Artima是很多Java开发人员高度关注的站点。长久以来它的发行人Bill Venners是一个Java著作者和顾问。同时也是一个JavaWorld的专栏作家,Inside the Java Virtual Machine的作者。所以,当我们注意到Artima上的Ruby内容,我们必须找出背后的故事。
1,Artima在很多人眼中一直都是作为一个Java站点,但是你刚创建一个一个新的Ruby版面, Artima当今很多的特色文章都是关于Ruby的,是什么促使了这种改变?
没有改变。Artima曾经是一个清一色的Java站点,但是几年前我们扩展了更一般开发焦点,开始涵盖其他语言。例如,我们开始在“Python Buzz”集成Python Blogs,在“The C++ Source”刊发C++文章。我们创建了Ruby Code & Style简报来作为Ruby社区通过高质量,编辑的文章分享信息的地方。
2,你是否认为你的Ruby报道是作为一种趋势,或者服务已作出改变的开发人员?
我们创建Ruby简报仅仅是为了服务Ruby社区。我不知道是不是有一个趋势,我也没有看到很多Java开发人员转到Ruby。人们并不只是仅仅需要用一种语言编程。我想掌握一种系统语言是有好处的,例如Java或者C++,和一种脚本语言,例如Ruby或者Python,而且能够用两者工作。那样的话你就可以使用你手中最好的工具来工作了。
3,你的最初少数Ruby文章几乎没有涉及Rails。你是否认为Rails背后有一个大的Ruby故事?你还知道有什么东西使用了Ruby?
除了知道Rails在市场上很有卖点,我对Rails了解的不多。Rails商人一遍又一遍传递了这样的一个信息,就是Rails能够助你很快的创建web应用。每个人都很清楚的收到了这个信息。我认为这是一个非常好营销工作。我也相信这个信息,但是快速的创建一个web应用不仅仅是人们所关心的。有时人们也关系与数据库的集成,应用服务器的集群,在这种情形,其他工具可能比Rails更有效率。就Ruby而言,我认为它是一种适合脚本和创建系统的多用途的编程语言,与Python同种类别。
4,即使在Rails以前,对比于其他“敏捷”语言,人们都谈论到Ruby独特的吸引Java开发人员。你认为Ruby有什么特别之处呢?为什么它对于Java移民这么好?
我不相信将会有很多Java移民或者Ruby尤其适合Java程序员。现在大肆宣称围绕着Ruby,或许是因为Rails的买卖,所以或许你印象中的移民就是来自于那些宣称的印象。Ruby是一种好的语言,但是Java也是,Python也是。
5,你是否认为我们将会看到很多Java开发人员开始学习Ruby或者转到Ruby,或者我们将看到一个新一代直接跳过Java而用Ruby代之?
Java不会离我们而去。在Artima,我们选择了Java作为新的体系架构,而不是Ruby,或者Python,就是因为它是一个成熟的拥有免费和商用的大量工具和API的生态系统。相对于Java,是的,当使用Ruby或者Python编程的时候是有一些速度的提升,但是有了现代的像IntelliJ,Eclipse和NetBeans的 Java IDE,你可以在Java里走的更快。但是用Ruby编程是很惬意的,同时,如果有人可以从Ruby中找到他们的职业生涯,那么请全力以赴去实现。
结语
是否Ruby将横扫Java?不仅仅是虔诚的Ruby狂热者在预言这个场景。开发人员的需要观点, 就像Venners提出的“手上对工作最优的工具”。 至关重要的是,开发人员必须对正确理解和使用这些工具负责。也就不难看出Coopper对于EJB 1.0的大肆宣称的记忆和Davidson的预言“如今很有可能有很多垃圾的Ruby on Rails应用在编写中”的联系了。无视技术,让市场的浪潮冲走是很危险的。不仅如此,很多人正在告诉我们使用Ruby会有相当大的效率提升,它确实是一个理想的工具,因此我们应该给予一定的关注。
作者感谢Bruce Tate, James Duncan Davidson, Robert Cooper, 和 Bill Venners。感谢占用了他们的时间与ONJava的读者分享他们的思想。
Chris Adamson是ONJava和Java.net的编辑,专攻Java,Mac Os X和多媒体开发的亚特兰大地区的顾问。