Welcome 微信登录

首页 / 软件开发 / JAVA / Why Java Sucks and C# Rocks(1):比较的意义与目的

Why Java Sucks and C# Rocks(1):比较的意义与目的2012-06-08 blog.zhaojie.me 老赵为什么是Java?

这个系列我将详细比较C#和Java——语言,而不关Java平台任何事情。其实这本不想强调这一点,因为语言和平台之间是没有任何可比 性的。因为C#明显只是一门语言,因此根据“类型推断”,则Java也应该是“语言”类型才对。因此,我在标题中就不想加入“Language ”这样较长的单词了,累赘啊!

那么,我为什么选中Java来和C#进行比较,而不是其他语言呢?原因很多,主要有以下几点。

首先,Java语言足够热门。看看TIOBE语言排行榜,Java 语言风光无限,从2002年开始几乎全程领跑。如果我说这门受众如此之广的语 言一些坏话(好吧,其实是很多坏话),那响应的人一定会非常多。例如,事实上 Delphi语言在停滞发展之后,在我看来它也已经和Java 处于同一级别了。但是我不想说Delphi Sucks,因为即便这么说,可能也不会有多大影响力——当然,可能在盛大创新院里会正好相反。

其次,Java语言真的很糟糕。好吧我承认,它在诞生初期还是有重大意义的,它简化了编程难度,大大提高了生产力。但是,由于它多 年来的固步自封,它已经完全跟不上如今时代的发展了。用现在的标准来衡量Java语言,会发现它是如何拖累程序员的生产力,如何成为 Java平台上最短的一块木板。作为一次关于语言比较这种“争议性话题”来说,如果不是有一方“全面落后”的话,那一定就会陷入双方 粉丝的口水战——掺杂大量主观内容的讨论,那倒真就没有任何意义了。

还有,知道Java语言有多糟糕的人并不多。可能有不少朋友的确会感觉Java语言在使用时“挺啰嗦”的,但是由于并没有去仔细了解其 他语言的的发展情况,对Java语言的糟糕之处也说不出个所以然来。但是大部分人,真的是大部分,他们一直认为Java是一门不错,甚至 很优秀的语言了。为什么?看看排行榜咯。但是我想说,排行榜只能说明它的“热门” 程度,并不能代表Java语言有多么优秀。正所谓“ 劣币驱逐良币”,我这个系列的文章也是想告诉坚持Java语言的程序员们,您到底损失了什么。

更重要的是,那就是Java虽然糟糕,但还是有解决办法的。如果没有解决办法,那么这场讨论的价值就会大打折扣了,因为讨论了半天 我们还是只能保持现状。例如,C语言生产力高吗?当然不如如今许多高级语言。但是,C语言是不朽的,因为我们必须有一种语言来负责 底层的开发,这要求它和冯·诺依曼结构尽可能的对应,而不能有太高级的抽象(因为一高级就难以生成最为高效的机器码了)。因此, 我不会讨论C语言的特性,我会选择Java语言。当然,这个解决办法就是抛弃Java,换用一种生产力更高的语言。

最后,好吧,其实还有一点便是,我对Java语言足够熟悉。我的“职业程序员”生涯便是从Java开始的(之前都算是小打小闹),大学 里的编程课学的也是Java(期末考试时是全班最高的106分,满分是 100+10分附加题),也用它做了不少项目。我还记得最后一个Java项 目是2004年参与开发的是海关审批工作流,当时翻来覆去看的参考书是《J2EE Development without EJB》。只不过接下来我便投身 于.NET世界,用的最多的语言便是C#了。C#从2.0起突然发力,瞬间将Java语言甩开几条马路,而3.0的改进更是堪称经典。不是我不想回 到Java平台,是我实在不想在Java语言上浪费生命。

嗯嗯,其实我也挺希望许多朋友在批评一个事物的时候,先对它的现状有足够了解的。否则,真挺没意思的。

又为什么是C#?

好吧,那为啥要拿C#出来耍?直接说Java的不是就行了嘛。其实我也有几点理由:

首先,我的博客毕竟还是主要关注于.NET技术的,来看我文章的大部分朋友相信使用的还是C#语言。我这一系列文章虽说是要讲Java烂 ,但可能大部分“手法”是在说明C#和Java语言之间的差距。因此,我也会努力地在文章中体现C#的美妙之处,会展示大量C#的编程模式 。这些模式并非只是为了好看,而绝对是在生产过程中非常有用且常用的。我希望这系列文章除了鼓励别人摆脱Java语言的负累以外,也 可以给C#程序员带来同样的价值。

其次,我想改变许多朋友对C#的看法。我想大部分朋友应该了解C#语言比Java的特性多,但是您可能不太了解C#目前的发展状况,以及 C#和Java之间的真实差距。您可能会认为,C#虽然比Java特性多,但也只是一些语法糖而已,虽然可能的确比Java生产力来的高,但是优 势并不明显。我想要告诉大家的便是,C#有别于Java的特性并非这么普通,它是凝聚了Anders Hejlsberg这个天才的理想,都是对生产力 提高有重大意义的。

还有,如果要与Java语言进行比较,还有比C#合适的对手吗?我想不到很合适的。因为根据TIOBE语言排行榜的纪录,排名靠前的语言 中也只有C#和Java颇为相似。这个相似体现在多个地方,其中最重要的在于它们所在的平台所面向的应用类型几乎完全相同。C#和Java语 言也是纠缠如斯,相信这两者的碰撞会比其他情况带来更多关注。同样,至今还有些朋友认为C#只不过是在抄袭Java而已。不过我在这里 想说的是,好吧我承认C#在最初和Java颇为相似(但也有许多不同),但是自从C# 1.0诞生之日起,就只出现Java借鉴C#特性的情况,至 今已将近10年。您可以记住这句话,我会证明给您看的。:)

当然,我对C#也足够熟悉,我想这点就不用多做解释了吧。