Java,死?不死?死不死?

最近工作的重点主要在Java频道的改版方面。对于Java这一个技术体系,不同的人有不同的看法,但是有一点是一致的:Java并不仅仅是Java语言或是Sun的几个Java产品。

对于Java的定义,我认为这个是最恰当的:Java是一系列技术规范的集成。Java技术体系有一个很有意思的更新模式:由社区提出提案,然后由JCP决定是否要将一个功能加入到体系中,而每一个新加入的部分都是一个单独的JSR——Java规范。

而无论Java提出多少与Java语言相关或无关的规范,这所有的规范都是基于一个平台的,那就是JVM——所有Java技术所依附的基础。

从程序员的角度来看,讨论一个编程语言是兴盛还是衰退是一个既兴奋又无聊的话题。事实上我们都知道编程语言和中文、英文这种语言有着类似的性质,那就是只要它有人用,他就没死。拉丁语死了么?希伯来语死了么?契丹语死了么?相对应的,世界语有意义么?英语正在衰退么?

当然,语言上的承载要比编程语言的承载沉重很多,而且语言不通会引起很多的不便。但是,编程语言是另外一种情况:对于程序员而言,使用某种编程语言只是个人喜好,顶多就是上升到饭碗的问题;同时,一个Java程序员看懂PHP代码或C#代码并不是一件困难的事情。对于项目经理而言,编程语言的选择基本上只需要由成本考虑来决定(当然,这个成本的计算是多方面的),因为任何一个项目从理论上而言都可以用任何一种编程语言来实现。

不同语言之间的交流障碍在编程语言这个范畴内,对人类而言是不太值得考虑的;编程语言的沟通问题仅仅对机器重要:即使是同一个语言的升级,比如PHP 4到PHP 5,原本的项目都需要代码做一些修改。这种机器眼中的沟通障碍为很多语言带来了各种问题,比如为了向后兼容性或和原来的其他语言的兼容性(是的,我说的正是Java语言)而不得不把自己弄得臃肿而丑陋。

但是现在,交流障碍的冰墙正在融化。基于这样的观点,我写了Java的未来:百家争鸣的JVM这篇文章,做为新Java频道上线的彩礼。文中主要描述了JVM之上混合语言编程的前景。是的.NET平台也是一个理想的混合语言编程的平台,但是JVM的开源性质将使它的进展速度更快,而且能够形成一个有机的、自我修正和更新的模式。而且因为选择更加自由,找到好组合的几率将会更高。

今天看到这篇反驳Java将死的文章,论点其实就两个:1. 现在对Java程序员的需求仍然很高;2. 抛弃Java将会有很大的成本。

其实1的原因完全是因为Java很大,使用的人多,和现在全世界都在学英语的原因是一样的。英语其实说不上是多好的语言,我相信从语言学的角度而言那个世界语应该比英语更好;但是英语在很多年内确实不会死亡,也是因为抛弃英语的成本巨大。但是,还有其他的原因:无论多简单的语言,学习一门新语言都需要花费很多时间(尤其是中文这种语言),而之前掌握的语言对于学习新语言的帮助很少。

但是,对于编程而言,情况是不同的:一个专业的程序员,即使他只学过Java,他从开始接触PHP或Ruby到基本掌握这个新语言只需要两周左右的时间(证据参考这里;当然,前提是他不是那种混饭吃的程序员)。也就是说,一个Java程序员的转型对于程序员本人来说,门槛是很低的,休个年假、一个国庆假期就可以迈过去。因此,第1点的重要性登时消散了很多。至于第2点,这是真正说到点子上了:最经典的例子是COBOL。对于Java而言,也有类似的情况。

不过,大家不觉得随着开放理念的发展,抛弃一个编程语言或技术的成本已经越来越低了么?我们正逐渐进入到一个开放标准的时代,像是抛弃IE 6的这种痛苦在将来会变得越来越少。在一个基于开放标准的时代,无论是从一个产品转移到另一个产品,还是从一个平台转移到另一个平台,甚至于从一个技术转移到另一个技术,成本都会越来越低。更不用说只是区区编程语言的改变了。开发时代的理念是,不好的应该被淘汰,好的应该被使用,用户可以自由的选择往好的方向奔去,而不必被泥沼般的迁移成本绑住了脚。

如果是在十年前,我可能会认同Java语言不可能死掉的观点。但是现在,没有理由再认同这些思想古老而僵化的说法了。在未来的十年内,Java语言将告别自己的恐龙时代,而未来的Java平台将属于百家争鸣的JVM!

Advertisements
This entry was posted in developer and tagged , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s