【IT168 专稿】
任何一种语言总是存在其有限的技术领先周期,Java也不例外。在某种意义上看,能超过Java技术会是一种非常有趣的事情。-Bruce Tate
Java将继续作为一股巨大的力量存在于IT业中,但是一些瞄准市场的脚本语言将会在某些行业中进一步发展壮大。-Doug Tillman
美国纽约大学的两位计算机科学系退休教授发表一篇公开文章,尤为注意的是,文中以“Java作为第一编程语言的诸多缺陷”为小标题对Java进行了批判。
新年伊始面对各种批判和预言的狂轰乱炸,Java技术面临着其他语言前所未有的挑战和冲击,如何突出重围;今后将如何发展与改进;Java和Ruby等脚本语言相比优势何在? 带着这些疑问记者采访了SUN中国工程研究院Java技术推广经理李涛。
李涛认为“全球有500万的开发人员正在用Java进行开发,所以说Java语言是名副其实的第一大开发语言这并不过分”。
李涛也坦言承认Java存在一些挑战,“2005年就有人提出Ruby会代替Java,Java会死掉,有没有谁同意Java五年之后死掉?没有!十年呢?十五年之后大家都退休了,我们就不谈了。我们只谈十年以内,现在可以看得见的挑战和改进”。

Java与Ruby、Python、Perl对比分析
Java已经有十二年的历史,而当前Java面临的挑战主要来自动态语言,比如说Ruby、Python、Perl。为什么会有这样的挑战?李涛做了一个简单的例子如下(D12.JAVA):“S1,就是一个1的组成,N2是一个数字,它有一个数值是2。然后做一个新的字符串是S1和N2通过简单的组合,再做一个N3,就是1和2的相加,答案是3,所以新的字符串是1、2,N3值是3。大家看怎么做,定一个S1,然后N2,N3就是加一下。
D12.java class D12 { public static void main(String args[]) { String s1 = "1"; int n2 = 2; String s12 = s1 + Integer.toString(n2); int n3 = Integer.parseInt(s1) + n2; System.out.println("s12: " + s12 + ", n3: " + n3); } }
如果你用Perl用,字符串加起来就是点,然后做组合计算。
D12.pl $s1 = '1'; $n2 = 2; $s12 = $s1 . $n2; $n3 = $s1 + $n2; print "s12: $s12, n3: $n3\n";
Python跟Perl差不多,就是调用PRINT的方法,S1换成数字用IN的方法。
D12.py s1 = '1' n2 = 2 s12 = s1 + str(n2) n3 = int(s1) + n2 print "s12: " + s12 + ", n3:", n3
最后你发现对比起来,Java做这一件同样的事用了11行的代码,240个字符,Perl是5行,85个字符。Python也是5行,80个字符。”
通过上面这个简单的例子可以很容易看出动态语言的特点。
第一,可以用很短的字符编程,开发速度很快。
第二,编程的时候,要用一个变量的时候不需要静态的提出来,用之前不需要定义,就把一个变量拿过来直接用,具体什么类型,定义的时候不用管它,只是在运行的时候,运行机制自动的找到它是什么类型来做。
第三,可以用动态语言编程。
在业界有很多人不喜欢动态的脚本语言,李涛归纳主要有以下两个因素:
第一个,没有Static Typing容易出BUG,不容易调整。
第二个,不容易在虚拟机上运行,灵活性差一些。
“实际上Static Typing的观点有点夸大了,它是有维护困难的问题。但是它维护困难以什么方式实现呢?就是以敏捷开发的方式实现的,所以业界老大SEAN McGrath,说它是一个双刃剑,你定义的时候必须提前告诉它”李涛说道。
Java保存的时候有很多的信息,Java5比Java4性能有一个很大的提高。Java4的时候保存性是不存在的,在运行的时候,是看谁来运行,然后再来运行。Java5里面就改变了编译的过程,在编译文件里面存了一些安全信息。所以运行的时候,就会很快。因为它把安全信息已经做完了,存储起来了。李涛有点感慨道“编译可以说是Java的缺点,也可以说Java的优点,因为它在你以后运行的时候一些好处的。”
既然动态脚本语言也有很多的优点,开发起来快,Java也有优势,那到底用什么呢?李涛说“这个没有最好的,只有最合适的。比如你有一个项目,你会Java,你就Java开发,因为你学一个新的语言,也不现实。如果一个语言不是很复杂,用动态脚本来做,的确使你的开发效率大大提高。这是对的。如果你做一个银行的项目,做一个保险的,非常大的项目,代码不是几行,几十行,而是几百万行了。所以选择编程语言,还是根据自己的实践,根据自己的具体需要来决定。”
Java之所以能跨平台,不是因为Java本身,而是JVM,在不同的平台上有相同的JVM,输入不一样,输出是一样的。另外还有API,Java语言,一共是三个部分组成的。
李涛透露“Java未来,不仅有跨平台的特性,还有跨语言的特性,这是以后的一个发展方向。”
“JSR-223有一个规范,现在做服务必须有Java,以后就不需要Java,只要你做的Java模型上带一个交换语言的接口,就可以做Service。它带来的优点是可以拿到Java的接口,还可以拿到其他的脚本语言API,而且不需要编译,开发的成本节省了很多。从平台方面来说,Java是会赢的。”李涛自信的说。
目前JVM已经是6.0了,不管是Windows还是Linux,Unix,91%的机器已经装了Java的JVM,因为世界上前十个PC制造商和Java都有协议,装系统的时候就把JVM6.0装了进去。
但是JRE存在很多的问题,程序部署出去的时候不知道终端用户的版本,第一次运行JRE的时候很慢,怎么提高速度呢?李涛表示目前为了解决这些问题。SUN准备要推出一个JRE的新版本。
李涛指出“新的JRE版本里面带着一个工具箱,这个工具箱帮助你测试你的终端用户用的是哪个Java的版本。在你分发程序的时候,可以运行这里拿到版本。当然这只是对新的JRE版本有效,比如说JRE1.4的话,其需要更新一下。Java快速启动服务,JRE第一次读进来很慢,需要十多秒,所以新版JRE,在你支持的情况下,把很多东西放在缓冲区上,跟你的内存冲突不是很大,你运行起来就会发现第一次也不是很慢。把它的内容放在磁盘缓冲区上,达到加快速度的目的。”
JavaEE6的特点
Java已经12年了,JavaEE也有是11年了,JavaEE每个版本有不同的侧重点,JavaEE5功能非常强大,可以做企业级的开发,安全性很高,但是功能强大并不意味着好开发,我们知道JavaEE太复杂了,所以JavaEE5的要求就是简化开发,而对于JavaEE6的特点李涛概括为以下四个方面:
第一个,JavaEE6比JavaEE5要小一些,只有几M。
第二个,简易程度方面,JavaEE6也比JavaEE5简单了。如果你做一个企业级的应用,你需要两个包,现在不需要两个包。
第三个,现在是开放平台了,提供一些接口,用的很多开放源代码,可以很容易融入到平台当中来。
现在有人观察JavaEE6是十年以来最成功的一个版本。我们拭目以待。
“我相信群众”套用葛优在神州行广告中的一句经典台词。Java作为第一编程语言受到众多开发者以及厂商的青睐不是没有道理的,虽然java有诸多缺陷。正所谓人无完人。何况Java并不仅是语言,更是平台。我们已经看到很多语言扩展或者专门运行在JVM上。JRuby和Scala 的成就已表明即使没有Java语法甚至没有Java库,平台仍可继续生存。尤其近期SUN收购MySQL 杀入数据库战场,表现相当亮眼。Sun最近几年积极发展开放源码产品,包括Java、Solaris和OpenOffice 等产品,都向开放源码靠拢。买下MySQL后,Sun俨然成为市场上最大的开放源码厂商,对开放源码支持者而言,无异是很大的吸引力,而Sun的软件开发策略,也正式与微软、IBM走向不同的道路。
李涛
现任SUN公司Java技术推广经理
毕业于清华大学,并于2000年获美国坦普大学计机硕士学位。曾在美国Independence Blun Cross保险公司和Broadreach Consulting公司任职,从事软件开发和架构师工作,有的大型商业网站开发经验。目前李涛在SUN公司担任Java技术推广经理,是多个世界性技术会议的专题讲师,目前他专著的领域是JavaEE和Web2.0。