我在http://www.manageability.org网站上偶尔看到这篇文章,觉得很有意思,对广大的开发者也算是个指引,所以翻译了出来。虽然有一些理由在我看来并不是十分正确,但大部分都是很有道理的。有些地方我加了一些说明,主要是我的看法和引证。
下面就是该篇文章的译文:
我列出了一个清单,做这个清单的原因主要来源自“Mozilla浏览器能做但IE不能做的事情”。说101条理由显得有些雄心勃勃,然而给予一个高的目标总是一件好事。如果不是这样,那么你总会放宽成功的标准。
我已经收集了71条理由。
1. 运行于多个平台,从最小的设备到最大的大型机。
运行在多个平台,从智能卡、嵌入设备(JStamp),手机(诺基亚、摩托罗拉、爱立信等等)、PDA(Palm、Symbian、Sharp)、笔记本电脑和台式机(MacOS、Linux)、服务器(基于UNIX)、到不停止运行的大型机(IBM)。
2. 运行动态语言。
运行象Python(JPython)、Scheme(JScheme、SISC、Kawa)、Ruby(JRuby)、Smalltalk(Bistro)这样的动态语言。对比的是,移植到.NET上的只有一个Python的商业开发工具(译者注:是ActiveState公司出品的,python.org也出了一个在.NET平台上运行的版本,但这个版本不是以first-class方式出现的。以前曾听过ActiveState是被微软控股的,如果这样,它积极响应.NET倒是很正常的事。),而且性能让人失望。此外,对比CLR和JVM也会得出相似的结论(译者注:这个我并不认同)。
3. 在一个平台上编译可以运行于另一个平台
Visual Studio.NET和.NET SDK最终用户协定已经指明通过它们编译的代码不能运行于非微软平台。
4. 更小的运行时下载
JRE的运行时环境下载只有8M,而.NET则超过它的两倍(例如20M)。
5. 没有强制升级,没有签署费用,没有软件保险费用。
有多少MIS组织被微软严格的许可协议掌控着?
6. 同一台计算机上可以运行多个版本的VM。
同时运行JVM的多个版本在同一台计算机上是很常见的事情。这在你想测试你的程序在不同版本的JVM下运行的情况时是很有用的。但在.NET上呢?
通常基于微软技术的产品都需要几台计算机运行不同版本的Windows去做测试。事实上还有一个很大的问题,那就是微软甚至限制许可去用VMWare(允许某个产品运行在多虚拟机上),为了它的6000个销售员(参见http://news.com.com/2100-1001-272789.html?tag=rn)。
7. 开源社区的巨大革命。
庞大的开源项目代码的存在价值是不能被忽略的。这提供给了开发者一个巨大的可重用的代码库。而事实上许多.NET的开源项目都是重写了Java的项目而已(译者注:这是一个事实,比如.NET上比较著名的几个开源项目NAnt、NDoc、NUnit等等)。
8. 商业质量的低成本IDE
Eclipse和Netbeans开发环境是免费的,并可用于任意类型的软件开发。JBuilder和JDeveloper在教育领域上的使用是免费的。而Visual Studio.NET则需要花费500美元。而且,如果你认为SharpDevelop是属于商业软件,那么继续这样认为。(译者注:SharpDevelop是一个开源的基于C#编写的IDE,但它的许多组件都是.NET FrameWork SDK提供的,比如属性编辑器等等,而且它包含了商业组件,如Magic那一系列的控件,我曾经研究过SharpDevelop的源码,具有一定的参考价值,但和Eclipse的意义相比,天壤之别。)
9. 更多的职位需求
在Monster.com上查询一下会很快发现Java的职位比C#的多十倍。事实上,许多C#的工作也需要具有Java的技能。
10.对遗留系统具有更好的更标准的集成性
JCA(Java连接器架构)是连接企业信息系统(EIS)的一个标准,JCA支持操作如SAP、IBM CICS、PeopleSoft、Oracle、Siebel、Screens 3270、AS/400, Unisys, ADABAS-C, VSAM, Codasyl, IMS, Tuxedo等等。这样级别的集成性在.NET上并不具备。
11、制造商和技术支持的更多选择
Java技术被许多制造商支持,这样你可以选择更好的符合你项目需求的产品。Java标准API总是设计成支持多种不同的实现。(译者注:SUN曾经说微软是在做一个小蛋糕,自己吃掉大半,而SUN是在做一个大蛋糕自己吃掉一小部分)。
例如JMS(Java消息服务)标准被不同的制造商如IBM、TibCo、Progress、SpiritSoft、Fiorina、Swift、Open3、JBOSS等支持,你可以有选择任何一款适合你的产品,而在微软的平台上,你只有选择MSMQ。
12、编译成机器码
Java有几个编译成机器码的解决方案,编译成机器码主要是为了保护知识产权或提高运行质量。TowerJ、Instantiations的Jove、Excelsior JET和GNU GCC都提供了编译成本地机器码的解决方案。(译者注:编译成机器码在很多时候都不是好的提升运行效率的方式,而JIT的好坏才应该是关键,所以我认为这一方面倒是微软的JIT更出色一些,这主要是因为.NET的字节码设计的更合理先进一点。但这也是牺牲了跨平台性而得来的。)
13、未来的考验
Java可以胜任未来的考验,或者说能够导向未来。这样你现有的代码将不会过时,为什么?因为我能运行Java在今天和将来的计算机上。你不能确保微软的.NET也能够做到这一点。一个鲜活的例子就是他们对VB6的支持,现在VB6已经过时了。对每个项目来说,能够延续多年是一个至关重要的问题。你想过没有,当微软声称DNA已经过时之前你应用DNA多长时间了?(译者注:DNA大概活了不到两年,呵呵)。
14、企业最流行的语言
………………
下面还有很多条,以后再翻译吧,翻译实在是件累人的事情,如果等不及的话就自己到http://www.manageability.org/blog/why%20java/view上看看,顺便也可以看看《Top Ten Reasons to Use .NET Debunked!》这篇文章