前言
象许多在不断发展的平台/语言一样Java让很多程序员又爱又恨当然当然这不包括那些狂热的Java爱好者对于他们来说Java比NetLAMP或任何其他语言或平台都要好但是我们还是不得不面对复杂的Swing庞大的EJB规范等对硬件的额外要求以及JME的变化多端的实现方式等等等等抛开以上这些Java的弱点我们可以说Java是一个完美的技术平台那么Java到底有没有成为一个完美的技术平台的潜力呢?这篇文章将从两个方面讨论这一主题开始我会详细的告诉你什么是完美的技术平台以及为什么Java平台能够成为完美的技术平台之后我会偏重于具体的解决方案如何通过设计的优化避免Java平台的弱点
基础
首先你为什么会关心Java是否是一个完美的沉下平台?它现在不是也很好吗?不不是的我相信在文章结束的时候我将向你展示一些列Java中可修正的缺点解决这些缺点会加快Java平台的发展提高整个开发平台的性能简而言之它将使Java不管在工业还是商业领域都成为一个实际上的技术标准成为程序员的一个超级语言什么才是完美的技术平台?在我作进一步说明之前我应该先定义一下我认为的完美的技术标准是什么简单的讲我认为完美的技术平台应该是这样一个软件系统它可以让新手或高级开发人员都能使用能够编写简单的程序也可以编写高级的应用它应该能够运行在所有的硬件平台或操作系统平台上并且应该是本地化的操作或接近本地化的操作
定义这篇文章讨论的范围
类似这篇文章的主题事先定义一个范围是很重要的首先我们不讨论任何非Java的技术平台你也许会认为这有些太狭隘了我不这么想这篇文章是要单独的讨论Java平台的各个方面并不是要和其他的语言平台进行比较我的兴趣在于那些为了完善Java平台提出的具有建设性意义的观点如果可能我希望其他技术平台的支持者能够发表类似的文章提出他们认为最完美的技术平台另外我在这里还假设Java语言已经是各种技术平台中最佳程序语言并且我也不会讨论最新的Java平台JSE尽管在JSE中我可以感觉到其中的一些变化比如标有 keeping up with the Joneses的是把矛头指向了C#语言一个语言的稳定与否至少需要将近年的不断验证才能证明它的最初设计是否是健壮的参数化集合的实用行在JDK中是显而易见的其中的一些新特性比如autoboxing enumerations和 static imports引起了开发人员的广泛关注
Java继承了来自C和C++的健壮行它一开始就被设计为一个面向对象的语言我认为这是一个成为核心语言和优秀平台的关键所在当然这并不算什么先进的思想因为从最早的Eiffel到Smalltalk都是面向对象的语言那么Java和他们之间有什么根本的不同吗?Java和那些比如功能性编程语言象LISPHaskell或象SQL这样的可以通过语义来执行的语言又有什么不同吗?因为我们学习这些语言只需要一本手册就可以了但别高兴的太早如果一个市场上主要的厂商比如SUNHP或微软想要把这些语言中的一种拿出来并围绕它开发他们的下一代技术平台你会发现这个语言的不会再进一步更新我喜欢把Java作为一个平台来看待实际上Java作为一种语言来说在Java平台中只是较少的一部分也因此我会在下面介绍作为一个完美的技术平台的重要特征
什么才是完美的平台
比较起来对于这个主题来说可以讲的很详细也可以讲的很简短概括我选择了后者对此有兴趣的读者可能会注意到有关这个主题的详细讨论很多词汇后面都会有一个ility作为结尾也明白它是ility矩阵(matrix)在我看来作为一个完美的技术平台应该具备这些条件便于开发而且提供多路访问(详见下面的讨论)
稳定性这体现它应该便于客户平台的部署还应该是本地化模式的部署操作
必须具备可靠的性能和可测试性
基于开放的标准
Java符合这些标准吗?
到现在我已经定义了一系列符合完美技术平台的标准和特征让我们看看Java的成长过程是否符合上述的特征
我不得不痛苦的承认开发Java程序并不容易相对简单的项目还好但如果项目不断增长以至于变得越来越复杂就会不断出现越来越多的问题比如JEE应用就是这样因此在项目的开发中我程序员需要花更多的时间来跟蹤底层的问题比如类引导(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而给我带来麻烦是什么时候了所以如果要作一个企业级应用的话我宁愿选择JEE而不是Net Java在服务器端的应用是足够稳定和健壮的Swing客户端的应用表现也不错但在执行速度方面比起本地的应用要差一些由于对资源限制的原因比如移动电话(或智能终端)在这里使用Java而不是用本地化的开发工具从实用性角度来说就显得有些奢侈了附加额外的MIDP比起直接调用本地的应用造成了运行时的性能损失
很明显Java有来自业界的主要软件厂商的广泛支持(除了微软)比如IBMHPOracle已经把他们自己的技术整合到了Java平台上这对关心Java的人来说是个好消息还有更多的组织和团体化大量的精力不断的晚上Java他们希望看到Java在移动设备PC服务器等各个领域不断的成长进步
优点
Java的优势在哪里?
平台支持JSDK已经可以运行在任何的操作系统和硬件平台上从金融机构到娱乐设施从科学研究到家用电脑都可以使用Java Java语言规范和Java运行时规范的明确区分允许研究人员可以通过运行一个编译器来产生程序语言的映射而不必非要使用Java来编译二进制码――也就是说它可以运行在任何的虚拟机(VM)上这一点在我后面要提到的Java战略的改变非常重要 Java是当今企业级计算和应用中相当成熟和稳定的平台微软仍然在不断的改进他们的Net而且可能最后会象Java一样好或者比Java好要好(但这只局限在Windows平台上)但现在还作不到另外还有另一个竞争激烈的领域那就是移动设备尽管在前面我们提到过Java在节省设备资源方面相对较差但是不可否认在这个领域它也占据着领导地位 Java在学术界也获得了强有力的支持如果你在大学学习你会发现Java已经成为多数科学研究和计算使用的首选语言在大学中有越来越多的人在使用Java语言越来越多的尖端学术研究完全使用Java语言各个行业的公司都有很多的Java程序员在开发他们的项目
缺点
现在我们来看看Java的缺点
一个开发组织创建新的框架和组件库几乎总是在存在优点的同时也存在着不足一个优秀的组件技术总是在不同的开发人员和组织间相互竞争和促进中成长起来的但是在这一过程中却使得用户(这里特指开发人员)非常困惑尽管Sun一直在忙于应付但是就到底是使用JDO还是EJB更好一直存在着争论的确我们必须确定把哪一个继续发展下去现在我们能作的就是把这一个想法简单的提交到JCP组织比如如果你是一个JEE设计师你能%确定当前哪一种才是完美的解决方案吗?我不能但我的观点是注重实际的方案就是完美的方案
现在有一种观点认为Java过于复杂有谁能完全了解Java从服务器到PDA各个方面的所有知识吗?作为一个博大精深的语言Java在人们生活的不同领域都无处不在这不可避免的带来了它的复杂性但同时这也更值得开发人员在其平台上使用Java来开发不同的应用Sun的一句明言就是嘿我们已经给了你一个非常棒的核心技术现在你可以用它来创建任何开发工具或健壮的产品其中非常活跃的Jini/JavaSpaces就是一个例子Sun自己把这一技术作为一个学术研究的工具它几乎没有什么技术缺陷实际上基于JavaSpaces的编程模型也许是最简单最强大的技术之一
Windows 家族集成了很多繁琐的分布式客户端平台除非与Java捆绑否则Windows技术永远无法避免这些缺点当然随着Net的崛起Java 在客户端编程(thickclient)方面将失去了很多优势
我不认为Sun为Java投入了足够的财力这给Java带来了潜在的隐患那么为什么Sun应该继续对Java平台投资呢?我更乐意看到Sun通过大量的财力扮演一个善意的独裁者它将通过与象BEAIBMHP等这样的公司而不是和开发人员或最终用户一起合作来指导Java的未来我担心来自Sun对Java的动摇Sun公司的健壮稳定的发展预示着Java的不断完善如果Sun出了问题那么Java的发展和完善也将受到影响下面的图示显示了影响Java技术平台的几个方面
图显示了高层的理想化的Java技术平台其中由Sun及其合作伙伴控制的技术显示为橙色其他不属于Sun的为绿色
Java有哪些缺点
无疑我承认Java平台是有缺陷的这必须指出下面几节将详细讲述这些问题和战略及战术上的建议