在本篇文章中,著名程序员Justin James讨论了Java的未来,以及Java与.NET的开发成本对比,和Java是否能够取代.NET。Justin在文中总结了四大要点,重点关注了两个运行时在性能和成本上的异同之处。
1、Java SE 7遭遇.NET CLR会发生什么?
从Java SE 7的功能列表中可以看出,它相比以前版本有了长足提高。那么,它是一个游戏改变者吗?我认为不会是这样。在过去数年中,JVM和.NET CLR都发生了众多改进;过去那些只有技术非常高超的程序员才能完成的许多事情,现在借助于JVM和.NET CLR的增强功能,普通程序员也能够做得到。
尽管JVM和.NET CLR并非在同一个时间实现相同的想法,但是如果在一方出现了某个好的想法,另一方也会迅速跟进,这一点不仅仅体现在运行时层面上。举例来说,对于Java来说,Hibernate项目取得了巨大成功后,.NET也迅速推出了NHibernate。而.NET的闭包(closures)功能深受众多开发者的欢迎,Java似乎不久也将实现它们,当然,这是一个语言功能,而非运行时功能。
.NET闭包大受好评,Java也将迅速跟进
2、在可以预见的未来,一个运行时是否会彻底击败另一个?
尽管从技术层面上JVM和.NET CLR非常相似,但它们都有自己的市场,两者的灵活性都不是很强。如果一个人已经围绕.NET服务器和IIS创建了他们的基础架构,他不可能第二天醒来把所有这些迁移到Java,反过来也是这样。甚至如果一个公司决定切换自己的开发平台,那它可能需要替换整个开发团队,或者从头开始对他们进行培训。即使培训完成后,在技能上还是存在严重的不足;毕竟,一个高级.NET开发者不可能在经过3个月培训后突然变成一个高级Java开发者。
另外,公司需要保留现有技术人员来维护已有的代码。你认为这些员工会坐视他们的职位被取消,或者他们的技能将变得无用或贬值吗?当然不会。对一个公司来说,完全从Java转向.NET或完全从.NET转向Java,都是一种自杀行为。最多是通过一个多年期项目来对员工进行重新教育。自从.NET发布以来,从VB6到.NET的迁移都已经花了8年时间。
程序员和项目的转型需要时间
3、Java开发的成本是否比.NET开发更具经济性,如果是这样,人们是否会转向Java来节省投资?
如果你仅仅着眼于工具,我的答案是“既对也错。”的确,只要你愿意,你可以在一个完全开源的组合上运行Java。你可以采取Linux/Tomcat/MySQL/Java组合,或者在服务器方面使用SpringSource组合(51CTO编者注:对于SpringSource服务器组合,有人却是表示不满的,可以参考这篇文章),在开发者的计算机上使用Eclipse或NetBeans。但是需要指出的是,无论出于什么原因,你都不会是开源替代产品的狂热支持者,我并非说替代产品就不好;如果是那样的话,与.NET工具相比,Java工具的价格相当,在很多情况下甚至更贵。而且从甲骨文和IBM等公司正在进行的业务来看,很明显许多公司认为有必要付费购买专有Java工具。就价格而言,在任一指定市场领域,微软几乎总是价格最低的企业类厂商。
另外,你必须考虑到如果没有切换成本公司将会省下多少钱。一个Visual Studio副本的成本要远低于一个中等收入开发者的周薪和保险金。而且同一个开发者学会Java并且达到他擅长.NET的水平,所需要的时间要远远大于一周时间。
出于公平考虑,这种分析也同样适用于从Java转向.NET。相比于平台切换的痛苦,开发工具成本实在微不足道。当然也有两种例外情况。第一种情况是新建公司,那么不存在迁移成本的问题。在这种情况下,Java依然不具有成本优势,因为微软也已经推出了免费版本的Visual Studio(Express版),而且如果你的公司是新创公司的话,通过BizSpark计划,你可以免费获得三年MSDN和微软许可,它们还不错。另外一种例外情况是,一个公司具有非常高的服务器-开发者比例,例如谷歌或雅虎。此类公司可能有许多开发者研发运行在数千台服务器上的一个应用。在这种情况下,开发者工具并非节省成本的主要因素,但服务器空间是。对于面临这种情形的公司,Java(和其它开源技术)可以具有一个决定性的成本优势。
4、一个Java开发者需要了解多少脚本语言,才能实现.NET中的效率?
首先,你是否在进行Web开发工作?如果是这样,你可能需要了解一些JavaScript知识,并熟悉相应的框架。对于后端工作来说,知道一门动态语言或脚本语言不是强制性或必需的。尽管如此,在Java领域存在许多此种用途的不错选择。对于目前还不是一名Java开发者的人来说,我没有这方面的任何实际经验来介绍,但是我听到很多关于Groovy和Scala不错评价。如果你希望选择某些更主流的技术,JRuby和Jython是不错的选择。
有各种方式提高Java应用的性能
在过去数年中,JVM已经开始大量支持非Java语言,开发者现在拥有众多选择。学会其中一种肯定有助于你成为一个更好的开发者(即便你并不在实际产品项目中使用它们),可以让你在项目陷入困境时提供另一种方向。
Java是否会取代.NET?言之尚早。同时.NET也不会消灭Java。两者都有自己的优势和劣势。我认为,你最终选择它们两个中的哪一个,这要取决于个人喜好和当地职业机遇。