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不再可以与时俱进让我很沮丧。