Java与C#谁是英雄?

来源:互联网 发布:jdk 7u45 linux 编辑:程序博客网 时间:2024/04/28 14:51



  互联网的崛起,使得PC从产业中心向边缘过渡,而历经20余年的发展,PC市场也趋于饱和,唇亡齿寒,这叫靠PC吃饭的微软如何不急?吸取了当年开发浏览器软件的教训,2000年6月,微软启动.Net计划,进军网络服务市场,比尔·盖茨自信地称:"世界上所有一切都将包括在互联网服务中。" 

  .NET的思想其实是来源于浏览器,即今后的电脑里面将没有其它的应用软件,只需要一个超级浏览器。用户就可以从网上下载所需要的软件。C#是用来开发这类应用程序和服务的编程语言,被认为是Sun公司Java编程语言的竞争对手。C#语言除了可以使电脑之间的通信更简便、更直接外,还能使手机、PDA等掌上设备快捷地显示互联网上的信息。SUN公司也力推SUN One来抗衡微软的.NET,SUN ONE平台的基础包括Solaris操作系统、Java编程语言。以及相应的软件开发工具。Sun还试图把各种不同的软件集成到这个平台中,包括它的电子商务软件,并计划使它所有的产品全都兼容新的互联网服务技术标准。 

  去年的这个时候,微软的死对头SUN公司的CEO斯科特·麦克尼利也来华访问,推销其SUN One技术。有意思的是,就在麦克尼利访华的前几天,SUN将微软推上法庭,要为其Java语言受到排挤而上诉,一开口就要微软赔10亿美元!一年的时间匆匆而过,这场官司也打得没完没了,虽然莫兹法官在2003年1月中旬判决微软必须在120天内在其操作系统中嵌入Java语言,然而,微软不服,已经提请上诉。诉讼战的车轮又转动了起来,有关Java与C#的话题再一次热了起来。 

  Java风靡惊动微软 

  20世纪90年代初,SUN在PC市场上所占份额还很有限,可是当时它就断言,PC命不久矣,即将被类似机顶盒那样的消费类电子产品所取代,为了抢占先机,SUN将公司里十几名最优秀出众的工程师召集在硅谷的某个地方,搞起了封闭式的开发,一年半之后,这些天才们创造出一个叫做STARSEVEN的设备,可以通过它控制许多家用电器,STARSEVEN的核心就是一种新的编程语言:OAK。SUN很快意识到不是机顶盒,而是互联网将统治未来的数字世界,1995年,OAK被改名为Java正式发布,它后来被誉为是互联网时代第一个编程系统,Java在两个方面有所创新。首先,Java是所谓的"解释性语言",也就是说Java程序不直接向运行它的机器发出指令,而是Java代码先告诉一个"解释器"要做什么,再由解释器告诉计算机。正是这种解释方法,允许Java程序能够运行在许多不同的计算机系统上,包括装有各种各样操作系统的PC机、移动电话、大型服务器,因此,要在某个特定的系统上运行Java程序,只需要为该系统编写解释器即可。 

  对编程者来说,Java是很有趣的语言,因为它是最早的"面向对象"的语言之一。当时OOP(面向对象程序设计)是个热点,简单地说,OOP是一种设计构想,它帮助编程者把一个应用软件分解成若干个小部分来单独编程,并且把代码分成一些可以重复使用的称为"类"或者"模块"的信息单元。在Java之前,C++是最主要的面向对象的编程语言--但是,尽管OOP被认为能够使编程更加容易,但是学习C++面向对象课程却是件很困难的事情。Java出现之后,立刻受到学生们的欢迎,它成为C++的替代品而爆发,很快,Java被认为是大学校园里首选的入门语言,微软心惊又心动。 

  Java的替代者C# 

  微软意识到来自于Java的威胁之后,它准备了一个Java的替代品:C#。许多人认为C#只是Java的改良品种;C#在某些方面表现优异,某些方面则不如Java,但总体上两种语言非常接近。有编程者称:C#之与Java就象Windows之与MAC操作系统(苹果电脑的操作系统)。C#也是面向对象的、也是解释性语言。作为.NET框架编程模型的一部分,C#语言的外观酷似Java。微软说像Java一样,C#也能够运行在非Windows机器中。欧洲某标准制定团体甚至还赞C#是开放的语言,并且脱离了微软的直接控制。 

  那么Java与C#谁更能打动编程者的心? 

  某调查公司曾经使用Google搜索引擎来统计以下指标:熟练使用某种语言的工程师数量、某种语言课程教学的可用性、有多少公司在出售用某种语言编写的软件。最后,综合这几个方面进行打分。Java以45.2分排名第一;第二名是C,得分是32.2;C++以24.6分排在第三位;C#远远地落在第九位,得分为4.6,只有Java得分的十分之一。 

  然而,在调查中也发现,跟过去相比,C#的受欢迎程度正在急剧上升;而Java的则相对稳定。"C#正在向在两年内成为头号编程语言的目标发展。"在某种意义上,C#的未来更令人期待,因为有更多的人开始使用这种新的语言。 

  很显然,看了上述数据之后,IT评论家们又要面对这样的两个问题了,Java为什么如此受到大家的欢迎?既然Java人气很旺,为什么它无法彻底打败C#? 

  .NET最美妙之处在于它允许使用多种编程语言,而不象Java那样,限制人们只能使用一种语言,开发者能够使用包括C++、C、C#甚至Java在内的几乎任何语言来编写代码,然后把这些代码翻译成机器看得懂的CLR代码(微软称其为公共语言运行时)。这样,.NET可以让开发者保护自己的"代码投资",也就是说,过去,他们用C++或C编写的代码都能够再次被利用,而且为了增加新功能,可以用C#编写新的程序段,同样,这些C#语言也将被编译成CLR。Java则正好相反,重新使用"代码投资"的Java解决方案却是扔掉所有旧代码,然后用Java语言重写一遍! 

  饶是如此,一些开发者仍然愿意为了Java做出重写代码的牺牲,因为他们认为.NET有一个重大的缺点:这种语言只能在Windows环境中运行。可微软一直否认这种指责,还指出C#通过ISO标准化就是一个反证。但是许多一直在使用C#的程序员认为,虽然他们喜爱C#,可也只把C#看作是只能运行在Windows上的一种语言,大概习惯使然。 

  在所有编程语言中,C#和JAVA可能是最好的,也可能是相类似的语言,但是它们之间仍然有一道理性的鸿沟。选择Java的人可能更加重视兼容性,而不愿意为每个系统专门创建程序,他们更喜欢程序能够在任何地方运行,即使他们不得不失去自己的代码投资。选择.NET的人可能也关心跨平台,但是他们更喜欢在这件事情上有点灵活性,他们想要创建只能运行在Windows上运行的程序,从而这个程序能够与其它也只能运行在Windows上的程序一起合作。 

  迟来的判决 

  微软感到了威胁与危险之后,先是对嵌入在Windows内的Java语言做些小动作之外,影响某些Java程序的性能与表现,最后干脆宣布不提供对Java的支持,正如前面所说,只有Windows中安装了解释器(Java虚拟机),Java程序才能够正常运行。SUN一怒之下将微软告上法庭。虽然目前看来,它取得暂时性的胜利,莫兹法官在2003年1月中旬判决微软必须在120天内在其操作系统中嵌入Java语言,然而,微软不服,已经提请上诉。 

  可就算SUN最后赢了官司,伤害也已经造成了。 

  就在Java发布之后不久,人们发现Java程序在Windows上的运行速度太慢了,虽然SUN一直坚信这是微软在其中做了手脚,事到如今,Java仍然背着这个不良的第一印象。尽管Java在非Windows环境中取得了相当大的成功,它是网络服务器和移动设备中最广泛使用的语言。SUN估计目前已经有三百万的Java开发者,如果微软在其销售的每一份Windows操作系统软件中安装新的、高级的、快速的Java语言,那么不会缺乏使用Java来开发Windows程序的编程者。因此,这次诉讼所围绕的问题就是:究竟是Java自己性能不佳,导致其在PC机上的失败,还是因为微软利用其在操作系统市场的垄断地位,从中作梗呢?但有一点很明白,Java已经诞生8年了,它在微软无法垄断的所有市场中都做得很好,大获成功。 

  SUN与微软的这场官司似乎并没有引起太多的反应,一方面可能是因为事情发生在假期,另一方面似乎也和SUN和微软之间的争斗已经持续了好几年有关。评论界的人士仍然比较悲观,他们认为即使SUN最终获胜,Java的普及程度也不见得大幅度增长,微软在早期反对Java的行动中已经确定了它的命运,并且,在那段岁月里,已经为微软节省宝贵的时间,用.NET接管另一领域的软件市场铺平了道路。但是这毕竟是一件有意义的事情,无论是Java还是C#,从理论上来说,都是有能力在多种平台上运行,而且都很出色,仍然奢望如果今后能够在Windows中同时支持Java和.NET,编程者将拥有自由选择的权利。 

  当许多程序员被问及最喜欢C#还是Java时,他们都有迟疑,有几位说编程语言就象宗教,一旦对其中一种或者一系列语言慢慢习惯后,就不顾所有的逻辑、论据或者什么实际需要,他们会坚持使用,因为那是他们所熟悉的、所信任的。