缺点
现在我们来看看Java的缺点:
一个开发组织创建新的框架和组件库几乎总是在存在优点的同时也存在着不足。一个优秀的组件技术总是在不同的开发人员和组织间相互竞争和促进中成长起来的。但是在这一过程中,却使得用户(这里特指开发人员)非常困惑。尽管Sun一直在忙于应付,但是就到底是使用JDO还是EJB更好一直存在着争论。的确,我们必须确定把哪一个继续发展下去。现在我们能作的就是把这一个想法简单的提交到JCP组织。比如,如果你是一个J2EE设计师,你能100%确定当前哪一种才是完美的解决方案吗?我不能,但我的观点是“注重实际的方案就是完美的方案”。
现在有一种观点认为Java过于复杂。有谁能完全了解Java从服务器到PDA各个方面的所有知识吗?作为一个博大精深的语言,Java在人们生活的不同领域都无处不在,这不可避免的带来了它的复杂性,但同时这也更值得开发人员在其平台上使用Java来开发不同的应用。Sun的一句明言就是“嘿,我们已经给了你一个非常棒的核心技术。现在你可以用它来创建任何开发工具或健壮的产品”。其中非常活跃的Jini/JavaSpaces就是一个例子。Sun自己把这一技术作为一个学术研究的工具,它几乎没有什么技术缺陷。实际上,基于JavaSpaces的编程模型也许是最简单最强大的技术之一。
Windows 家族集成了很多繁琐的分布式客户端平台。除非与Java捆绑否则Windows技术永远无法避免这些缺点。当然,随着.Net的崛起,Java 在客户端编程(thick-client)方面将失去了很多优势。
我不认为Sun为Java投入了足够的财力。这给Java带来了潜在的隐患,那么为什么Sun应该继续对Java平台投资呢?我更乐意看到Sun通过大量的财力扮演一个“善意的独裁者”,它将通过与象BEA,IBM,HP等这样的公司而不是和开发人员或最终用户一起合作来指导Java的未来。我担心来自Sun对Java的动摇。Sun公司的健壮稳定的发展预示着Java的不断完善;如果Sun出了问题那么Java的发展和完善也将受到影响。下面的图示显示了影响Java技术平台的几个方面。
图1显示了高层的理想化的Java技术平台。其中,由Sun及其合作伙伴控制的技术显示为橙色,其他不属于Sun的为绿色。
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平台的支持应该得到重视和加强。比如象在这方面已经有所进步,但仍然有很多事要做。
把Java平台当作其他技术的基础
我非常赞赏Java把它的语义部分与运行时环境(JVM)规范分离的做法。这一点可以使Java能适应任何开发。理想情况下我希望其他技术可以以Java为基础并能与之无缝的结合(译者语:比如JPython就是一个例子)。
JCP "lite"
JCP(Java Community Process)是一个机构,它使Sun可以扮演一个 “善意的独裁者”的角色,由它来引导Java平台的不断发展,其他个体(包括公司或个人)可以在Java平台上增加新的功能。
然而现在,有关J2ME,J2SE和J2EE规范的制定在JCP中出现了巨大的阻碍,而之所以会出现这些阻碍是由于各个厂商出于商业的考虑或政治的目的等原因造成的。
每一个JSR规范一般有两个版本:一个是我们现在看到的版本另一个是大约50多页专为开发人员准备的,它们必须使用和理解并最终实现这一规范。
图2列出了当前Java存在的不足及相应的解决方案。
结论
那么,现在的Java怎么样?套用一句俗话“只要努力,就会更好”。Java有潜力成为从PDA到服务器任何领域都非常成功的平台。Java可以继续在其占优势的服务器端发展下去。还可以通过优化客户端程序的发布及安装使Java在客户端开发方面一样获得成功。
不管现在的情况如何,我相信Java有能力成为一个完美的平台。通过不断的完善,降低开发人员入门的难度,提供对所有的平台和操作系统的支持,以及提供对更多语言的支持,Java平台将可以适应任何层次任何领域的开发。通过对客户端平台的优化Java在PC和移动设备领域中也会获得巨大的成功。
Java能成为一个完美的技术平台吗(4)
内容版权声明:除非注明,否则皆为本站原创文章。