Java能够成为完美的技术平台吗?
译者语:在网上有关Java与其他语言或平台熟优熟劣的讨论一直没有停止过,甚至现在还是有人会提出这样的问题,特别是一些初学者,对此更是迷茫。这篇文章比较客观全面的评价了Java的各个方面,它既谈了Java的优点也讨论了Java的一些缺陷和有待改进的地方。我认为很值得大家参考所以翻译了出来,希望对关心Java的人有所帮助。
前言
象许多在不断发展的平台/语言一样,Java让很多程序员又爱又狠。当然,这不包括那些狂热的Java爱好者,对于他们来说Java比.Net,LAMP或任何其他语言或平台都要好。但是,我们还是不得不面对复杂的Swing,庞大的EJB规范等对硬件的额外要求,以及J2ME的变化多端的实现方式等等等等。抛开以上这些Java的弱点,我们可以说Java是一个完美的技术平台,那么Java到底有没有成为一个完美的技术平台的潜力呢?
这篇文章将从两个方面讨论这一主题,开始,我会详细的告诉你什么是完美的技术平台以及为什么Java平台能够成为完美的技术平台。之后我会偏重于具体的解决方案,如何通过设计的优化避免Java平台的弱点。
基础
首先,你为什么会关心Java是否是一个完美的沉下平台?它现在不是也很好吗?不,不是的。我相信在文章结束的时候,我将向你展示一些列Java中可修正的缺点。解决这些缺点会加快Java平台的发展,提高整个开发平台的性能。简而言之,它将使Java不管在工业还是商业领域都成为一个实际上的技术标准---成为程序员的一个超级语言。
什么才是完美的技术平台?
在我作进一步说明之前,我应该先定义一下我认为的完美的技术标准是什么。简单的讲,我认为完美的技术平台应该是这样一个软件系统,它可以让新手或高级开发人员都能使用,能够编写简单的程序也可以编写高级的应用,它应该能够运行在所有的硬件平台或操作系统平台上,并且应该是本地化的操作或接近本地化的操作。
定义这篇文章讨论的范围
类似这篇文章的主题,事先定义一个范围是很重要的。首先,我们不讨论任何非Java的技术平台。你也许会认为这有些太狭隘了。我不这么想,这篇文章是要单独的讨论Java平台的各个方面,并不是要和其他的语言平台进行比较。我的兴趣在于那些为了完善Java平台提出的具有建设性意义的观点。如果可能,我希望其他技术平台的支持者能够发表类似的文章提出他们认为最完美的技术平台。
另外,我在这里还假设Java语言已经是各种技术平台中最佳程序语言。并且我也不会讨论最新的Java2平台J2SE1.5,尽管在J2SE1.5中我可以感觉到其中的一些变化比如标有” keeping up with the Joneses”的是把矛头指向了C#语言。一个语言的稳定与否至少需要将近8年的不断验证才能证明它的最初设计是否是健壮的。参数化集合的实用性在JDK1.5中是显而易见的,其中的一些新特性比如autoboxing, enumerations和 static imports引起了开发人员的广泛关注。
Java继承了来自C和C++的健壮行,它一开始就被设计为一个面向对象的语言,我认为这是一个成为核心语言和优秀平台的关键所在。当然这并不算什么先进的思想因为从最早的Eiffel到Smalltalk都是面向对象的语言,那么Java和他们之间有什么根本的不同吗?Java和那些比如功能性编程语言象LISP、Haskell或象SQL这样的可以通过语义来执行的语言又有什么不同吗?毕竟我们学习这些语言只需要一本手册就可以了,但别高兴的太早,如果一个市场上主要的厂商比如SUN,HP或微软想要把这些语言中的一种拿出来,并围绕它开发他们的下一代技术平台,你会发现这个语言将不会再进一步更新;
我喜欢把Java作为一个平台来看待;实际上Java作为一种语言来说在Java平台中只是较少的一部分。也因此我会在下面介绍作为一个完美技术平台的重要特征。
什么才是完美的平台
比较起来,对于这个主题来说可以讲的很详细也可以讲的很简短概括,我选择了后者。对此有兴趣的读者可能会注意到,在有关这个主题的详细讨论中很多词汇后面都会有一个”ility”作为结尾,你知道它是ility矩阵(matrix)的意思。在我看来作为一个完美的技术平台应该具备这些条件:
l 便于开发,而且提供多路访问(详见下面的讨论)
l 稳定性,这体现它应该便于客户平台的部署;还应该是本地化模式的部署操作。
l 必须具备可靠的性能和可测试性。
l 基于开放的标准。
Java符合这些标准吗?
到现在我已经定义了一系列符合完美技术平台的标准和特征,让我们看看Java的成长过程是否符合上述的特征。
我不得不痛苦的承认,开发Java程序并不容易。相对简单的项目还好,但如果项目不断增长以至于变得越来越复杂就会不断出现越来越多的问题。比如J2EE应用就是这样。因此在项目的开发中程序员需要花更多的时间来跟踪底层的问题----比如类引导(classloading)问题而不是解决实际的业务逻辑问题;还有令很多程序员头疼的EJB(查看我过去的文章To EJB, Or Not To EJB?),通常情况下他们都是在清除一系列的警告信息。EJB也许想把复杂的问题简单化,但是它并没有更贴近于现实中的持久化问题或业务逻辑的解决方案,这也与Java开发工具的不足有关。坦率的说,微软的Visual Studio在这方面比Java作的要好,Java应该向它学习。
我曾经提出过一个多层次访问的想法,它允许开发人员或者用户可以工作在Java中的不同层次。比如核心开发人员可能使用emacs/vi以命令行调试器的方式开发和部署以Java为基础的系统,而业务分析师或最终用户应该能通过使用WYSIWYG这样的工具来访问和修改这个系统。
Java在这两方面的开发并不是很容易。当然applet和JavaWeb Start技术在这方面作出了一定改善,但这两种技术也有自己的不足---运行他们必须在客户端安装配置JRE。Java平台是想当稳定的,我已经不记得上一次因为Java本身的bug而给我带来麻烦是在什么时候了。所以如果要作一个企业级应用的话我宁愿选择J2EE而不是.Net。
Java在服务器端的应用是足够稳定和健壮的。Swing客户端的应用表现也不错,但在执行速度方面比起本地的应用要差一些。由于资源限制的原因比如移动电话(或智能终端),如果使用Java而不是用本地化的开发工具,从实用性角度来说就显得有些奢侈了。附加额外的MIDP加载比起直接调用本地的应用造成了运行时的性能损失。
很明显,Java有来自业界的主要软件厂商的广泛支持(除了微软)。比如IBM,HP,Oracle已经把他们自己的技术整合到了Java平台上,这对关心Java的人来说是个好消息。还有更多的组织和团体花大量的精力不断的完善Java,他们希望看到Java在移动设备,PC,服务器等各个领域不断的成长、进步。
优点
Java的优势在哪里?
l 平台支持:J2SDK已经可以运行在任何的操作系统和硬件平台上,从金融机构到娱乐设施,从科学研究到家用电脑都可以使用Java。
l Java语言规范和Java运行时规范的明确分离允许研究人员可以通过运行一个编译器来产生程序语言的映射,而不必非要使用Java来编译二进制码――也就是说它可以运行在任何的虚拟机(VM)上。这一点在我后面要提到的Java战略的改变非常重要。
l Java是当今企业级计算和应用中相当成熟和稳定的平台。微软仍然在不断的改进他们的.Net,而且可能最后会象Java一样好或者比Java好要好(但这只局限在Windows平台上),但现在还作不到;另外,还有另一个竞争激烈的领域,那就是移动设备。尽管在前面我们提到过Java在节省设备资源方面相对较差,但是不可否认在这个领域它也占据着领导地位。
l Java在学术界也获得了强有力的支持。如果你在大学学习你会发现Java已经成为多数科学研究和计算使用的首选语言。在大学中有越来越多的人在使用Java语言,越来越多的尖端学术研究完全使用Java语言;各个行业的公司都有很多的Java程序员在开发他们的项目。
缺点
现在我们来看看Java的缺点:
l 一个开发组织创建新的框架和组件库几乎总是在存在优点的同时也存在着不足。一个优秀的组件技术总是在不同的开发人员和组织间相互竞争和促进中成长起来的。但是在这一过程中,却使得用户(这里特指开发人员)非常困惑。尽管Sun一直在忙于应付,但是就到底是使用JDO还是EJB更好一直存在着争论。的确,我们必须确定把哪一个继续发展下去。现在我们能作的就是把这一个想法简单的提交到JCP组织。比如,如果你是一个J2EE设计师,你能100%确定当前哪一种才是完美的解决方案吗?我不能,但我的观点是“注重实际的方案就是完美的方案”。
l 现在有一种观点认为Java过于复杂。有谁能完全了解Java从服务器到PDA各个方面的所有知识吗?作为一个博大精深的语言,Java在人们生活的不同领域都无处不在,这不可避免的带来了它的复杂性,但同时这也更值得开发人员在其平台上使用Java来开发不同的应用。Sun的一句明言就是“嘿,我们已经给了你一个非常棒的核心技术。现在你可以用它来创建任何开发工具或健壮的产品”。其中非常活跃的Jini/JavaSpaces就是一个例子。Sun自己把这一技术作为一个学术研究的工具,它几乎没有什么技术缺陷。实际上,基于JavaSpaces的编程模型也许是最简单最强大的技术之一。
l Windows 家族集成了很多繁琐的分布式客户端平台。除非与Java捆绑否则Windows技术永远无法避免这些缺点。当然,随着.Net的崛起,Java 在客户端编程(thick-client)方面将失去了很多优势。
l 我不认为Sun为Java投入了足够的财力。这给Java带来了潜在的隐患,那么为什么Sun应该继续对Java平台投资呢?我更乐意看到Sun通过大量的财力扮演一个“善意的独裁者”,它将通过与象BEA,IBM,HP等这样的公司而不是和开发人员或最终用户一起合作来指导Java的未来。我担心来自Sun对Java的动摇。Sun公司的健壮稳定的发展预示着Java的不断完善;如果Sun出了问题那么Java的发展和完善也将受到影响。下面的图示显示了影响Java技术平台的几个方面。
图1显示了高层的理想化的Java技术平台。其中,由Sun及其合作伙伴控制的技术显示为橙色,其他不属于Sun的为绿色。
图 1
Java有哪些缺点
无疑,我承认Java平台是有缺陷的,这必须指出。下面几节将详细讲述这些问题和战略及战术上的建议。
有关J2SE
对于大多数开发人员来说,谁使用Ant作为他们的编译工具;谁出于执行效率的原因使用了Jikes编译器而不是javac编译器。如果J2SE包含Ant不是更好吗?Xdoclet怎么样?争论的焦点在于,这些工具应该是IDE的一部分而不是核心SDK的一部分,我很高兴这样。但是我以为Sun应该把这些工具集合到一起使他们可以安装在现有的SDK上。
最优产品
这是一个痛苦的抉择。当我提到把当前的javac换成Jikes时我总是觉得很不好受,但是这里我把它当作Java平台的一个通用规则来看待。Java平台需要成为一种技术权威,比如,它应该成为一个实际上的技术标准。当存在两个健壮的规范或工具的话他们应该相互合并。比如一个较为突出的例子,NetBeans-Eclipse之间相互竞争,我们就应该只留下一个最好的。
我使用Eclipse,但是为什么我们要在一个项目中使用两种Java IDE,而且还不得不使它们相互谐调工作,而不能有一个集合了每个工具的优点的合并的工具呢?Eclipse 的SWT在执行效率上要优于Swing/AWT,而NetBeans对JSP有很好的支持,它可以使开发人员的工作变得轻松。
Sun:发出一致的技术讯息!
想想持久化架构:EJB(BMP和CMP),JDO以及Hibernate。还有WEB架构领域的Struts和WebWork。这些对于一个企业来说都是很好的选择。但在他们之间作出取舍却让人头疼。作为一个系统设计师,我有理由作出选择。比如,什么才是理想的J2EE架构?简单的回答师“它取决于需求”,但这是在逃避问题。一个三层结构的企业级应用中了包括显示层,业务逻辑,以及持久化层。对于上面提到的技术我们应该可能会选择其中之一或者有可能是两种。
作为企业同样会遇到选择应用服务器的问题。我很欣喜的看到现在有很多厂商的应用服务器都支持J2EE1.3规范,但是我认为首选的应用服务器应该具备下面的条件:它应该能够减少开发的难度和工作量并且能够满足复杂的测试还要提供更简单的小组控制支持。假设我在使用过程中碰到产品的Bug或者干脆这个应用服务器的厂商倒闭了,那么根据J2EE规范应该能够允许我很容易的移植到新的服务器平台上。
新规范和应用实现的制定者有义务创建一个应用程序设计蓝图,它要示意这个应用进一步的发展方向是什么。
有关Java的一个新的观点:让一切变得简单
2002年JavaOne大会上James Gosling在谈到Swing API 时说道,不管是对于一个新手还是一个有经验的程序员来说Swing API就像波音747客机的驾驶员坐舱――结构复杂。
谈到这,我认为解决这类问题的根本在于Sun、JSR和那些开源项目的主管们,他们应该减少软件的复杂性。不论是规范API,软件安装的模式或配备的文档等等都应该符合这一原则。
Java World需要采纳KISS的观点,即保持简单化,傻瓜化(Keep It Simple,Silly)。
选择Windows作为客户端开发的平台
这一观点有可能会带来争论!直说吧,Java在Windows平台上并没有产生多大影响,不是吗?实际上,我认为在Windows平台上Eclipse项目的SWT是强制使用了本地化的外观样式和运行环境,并且与Windows的剪贴板及OLE机制紧密的结合。
不要误会我的意思。我并不是说Java应该支持Windows平台而忽略其他的平台比如Mac或Linux,我是说对于Windows平台的支持应该得到重视和加强。比如象www.java.com在这方面已经有所进步,但仍然有很多事要做。
把Java平台当作其他技术的基础
我非常赞赏Java把它的语义部分与运行时环境(JVM)规范分离的做法。这一点可以使Java能适应任何开发。理想情况下我希望其他技术可以以Java为基础并能与之无缝的结合(译者语:比如Jpython就是一个例子)。
JCP "lite"
JCP(Java Community Process)是一个机构,它使Sun可以扮演一个 “善意的独裁者”的角色,由它来引导Java平台的不断发展,其他个体(包括公司或个人)可以在Java平台上增加新的功能。
然而现在,有关J2ME,J2SE和J2EE规范的制定在JCP中出现了巨大的阻碍,而之所以会出现这些阻碍是由于各个厂商出于商业的考虑或政治的目的等原因造成的。
每一个JSR规范一般有两个版本:一个是我们现在看到的版本另一个是大约50多页专为开发人员准备的,它们必须使用和理解并最终实现这一规范。
图2列出了当前Java存在的不足及相应的解决方案。
图2
结论
那么,现在的Java怎么样?套用一句俗话“只要努力,就会更好。”。Java有潜力成为从PDA到服务器任何领域都非常成功的平台。Java可以继续在其占优势的服务器端发展下去。还可以通过优化客户端程序的发布及安装使Java在客户端开发方面一样获得成功。
不管现在的情况如何,我相信Java有能力成为一个完美的平台。通过不断的完善,降低开发人员入门的难度,提供对所有的平台和操作系统的支持,以及提供对更多语言的支持,Java平台将可以适应任何层次任何领域的开发。通过对客户端平台的优化Java在PC和移动设备领域中也会获得巨大的成功。
本文地址:http://com.8s8s.com/it/it16757.htm