记者:熊建国 孟言
【按:】 大约八年前的今天,Java刚刚诞生后不久,《经济学家》在一篇题为“Will your next computer be a tin can and awire?”的报道中画了一副有趣的漫画,一个人怀抱着一台电脑,电脑的一端连着一条线,线的另一端是一张网络(蜘蛛网),蜘蛛网上蹲坐着一只硕大无比的“戴着一副眼镜的蜘蛛”。今天,这只“蜘蛛”就笑眯眯的坐在我们面前,他就是Java 之父James Gosling。
James Gosling,是一位非常杰出的程序员。他1957 年出生于加拿大,于1984 年加盟Sun Microsystem 公司,之前在一家IBM 研究机构工作。他是SunNeWs窗口系统的总设计师,也是第一个用C 实现的E M A C S 文本编辑器COSMACS 的开发者。他曾开发了卫星数据拦截软件系统、Unix多处理器版本、编译器、邮件系统
和视窗管理器等。此外,他还创建了WYSIWYG“所见即所得”测试编译器。
James Gosling先生在8年前亲手设计了Java 语言,并开发了Java 编译器和 Java虚拟机,使Java成为了世界上最流行的开发语言。Java 支持的计算模式,已经成为了互联网的标准编程模式以及分布式企业级应用的实施标准。
今天,这只“蜘蛛”依然在吐丝,而这张用Java编织的网也越来越大,目前大约有300万人(开发者)聚集在这张网上,而且增长的势头十分强劲,在未来3年内,全球的Java程序员可能会发展到1000 万。Java 的应用也渗透到各个领域,从企业服务器端大型复杂应用的J2EE到普通桌面应用的J2SE 以及嵌入式应用的J2ME。
年近50岁的James Gosling看起来很平易近人,从外表上看,他就像一位艺术家——金色的头发、花白的络腮胡。但是我并不认为他是个有趣的人,尽管有时他也能说上两句幽默的话。严格来说,拥有卡耐基·梅隆大学博士学位的他更像一个学者或是科学家。作为SUN公司的副总裁,你甚至很难从他身上看到商人的气息(我指的是那种商人的狡黠和做秀),尽管他在访谈中也多次提到J2ME 能为手机或游戏开发商带来丰厚的利润这一事实。
正如Gosling先生来华前所言,此次来中国,他最想见的只有两类人:开发者(developer)和学生,而这两类人,的确不是一个真正的商人最愿意见的。
记者:Gosling先生,您好!首先对您来华表示热烈的欢迎!我们是《程序员》杂志社和网站的记者,网站是目前中国最大的开发者社区,今天,我们带着开发者们关心的诸多问题,向您做一次技术方面的专访,非常感谢您能够接受我们的专访!
James:ok! 我昨天在网上会议(聊天)的现场听工作人员对你们做过介绍。感谢你们对Java技术的推广所做的努力和贡献。
记者:您知道,这可以说是一个迟到的采访,本来应该在半年以前也就是今年4 月份进行的,由于“非典”的原因,推迟到现在。我们中国的Java 开发者们一直焦急的等待今天的到来,他们希望亲耳听到您来回答许多问题。
James:(smile)这样的事件的确能够影响许多工作的进行。Ok,let’s begin!
关于Java 技术的过去和未来
记者:Gosling 先生,我们知道,Java最初被认为是一种比C++ 简单的语言,现在它是否简单?如果不是,那么Java的优势究竟在哪里呢?
James:首先,我不得不说,从语言层面来讲,Java仍然是简单的。人们往往会产生Java越来越复杂的错觉,是因为Java 日益发展并增加了满足各种场合应用的API,再就是在这个Java世界里,许多其它的提供商正在提供越来越多的Java产品和工具。面对这许多形形色色的产品,人们错误地认为是Java变得越来越复杂了,我想应该说是Java的应用变得越来越复杂了,并且Java能够胜任这些复杂的应用,也正是它的优势所在。
记者:我们注意到,Java 开发队伍也在不断分化,他们不得不走向J2EE、J2SE和J2ME三条不同的道路,甚至不得不在这三条线上同时作战,我想问的是SUN 公司是否有将这三条线统一起来的计划?
James:首先,我想说说这种统一的可能性。仅仅是在7、8 年以前,我们如果拥有一台具有16M内存的计算机,就觉得相当不错了。而今天,在我的手机上,就拥有了这样大小的内存。我一直觉得,一部手机上能够拥有这样的内存是件不可思议的事情。这就告诉我们,能够在诸如手机这样的设备上做过去只能在PC机上做的事情。比如,我们可以在手机上安装一个J2SE的应用,帮助我们处理更多的事情,它真的可以运行得很好。作为一个开发者,你不得不面对许多技术和变化,我想说的是,你有时的确需要选择一条道路。我们力求把Java Card、J2ME、J2SE 和J2EE整合为一套彼此连结成网络的系统,填补这些版本之间的隔阂,我们最终希望提供给用户的是统一的Java,而不是许多各行其是、互不兼容的Java,这的确是我们的长远战略。
记者:我们注意到,SUN公司计划在一年以后推出新的Java版本——J2SE1.5。现在有些开发者在抱怨,当他们把旧系统移植到新的版本中去时,会碰到一些兼容性问题。另外,我们想知道,在新版本中,SUN 公司会做哪些改进?
James:我不知道你所说的兼容性问题有多严重,但我相信绝对是很少或几乎是没有的。在1.5版即将发布的产品当中,我们的重点会放在易于应用性方面。我们会给出一些API 的简化版本,我通过各种各样易于使用的API 让软件的编写更加容易,让API 更加直截了当。换句话说,我认为Java在性能和所具备的特性上已经足够好了,我们希望的是人们能够更快的用Java构建他们的应用。当然,在新版本中也会包含一些新的语言方面的特性,如泛型、列举、格式化I/O和新代码元数据工具等。
记者:我听说SUN公司有用Java编写操作系统的计划。您对这个主意怎么看?
James:我帮助过这个Java操作系统的计划,事实上,在几年以前,我们的确做过这么一个东西,而且它工作得不错。我们有这样的想法,一是想打破一些控制和垄断,另一方面想证明Java的确能够做很多事情。后来,我们便问自己,我们真的需要这样一个操作系统吗?事实上,我们有自己的操作系统,它在各个行业和各个地方运行得很好。
记者:我们注意到,在企业应用的服务器端市场,Java 的确取得了不小的成绩。但对Java桌面应用(desktop application),许多人持悲观的态度,对此您怎么看?
James:应该说,这的确是一个问题。我们也注意到了人们对Java桌面应用的抱怨。问题主要集中在性能和时间上。最大的一个问题就是大家认为运行Java太耗时间,也就是要启动Java程序的时间花的稍微长了一点。其实花一点启动时间是有好处的,你一旦运行之后,速度就快得多了。另一方面,Java可以实现很多优化,可以让服务器运行得非常快,关键是你需要知道这些优化的办法。我们在下一版本发布的1.5 产品中就做了大量工作来缩短启动时间,这样启动时间会比以前好得多。1.5 桌面系统的应用会有很大的改进。另外,大家经常问到的另一个问题就是我们的界面工具包。这是一个饱受指责的工具包,我们应该看看这当中性能问题究竟是什么。此外,原来Java类库不少地方的设计确实存在问题,影响效率,而在“Tiger(Java 1.5 开发代号)”中,我们花了很大的精力来改进库设计,大家应该可以看到明显的效果。
记者:.NET发布以后,您认为它会影响Java 在服务器端和企业级的应用市场吗?
James: 我认为不会。我不得不承认,.NET在做一些小型的、简单的应用时的确很快也很好。我们知道Java的优点就是能够做大型的、复杂的、成熟的系统,但过多的加强这些,恰恰又成了Java的弱点之一,因为这些大规模集成的先进性、成熟性会带来一系列的复杂问题,所以使得利用Java建立一些简单的应用就比.NET更加麻烦。我们常常听到很多人谈.NET的开发经历。他们开始利用.NET 做一个应用,一段时间以后,就会发现他们不能够走得更远。因为他们用.NET工具主要是做一些简单应用,而且无法升级。为解决这个问题,我们做了一个快速应用开发的系统,还有其他一些提供开发工具的厂商也在努力。当然有些因素是和API 相关的,我们也在改进,特别是在下一版本即将发布的平台中。换句话说,我们也应该多关注一下低端的开发市场。
记者:您能够给我们简单描绘一下您心目中Java 的未来吗?
James:要准确描绘Java的未来的确是困难的。中国刚刚成功的发射了载人的航天飞船,美国国家航天局大型太空项目当中已经使用Java来开发他们的软件和控制系统,我相信有一天中国也会,甚至会把这种技术带到月球上去(指的是登月探测器上用Java 来写相应的软件)。经常有人问我,Java最终是否会永久地存在?Java是否会被其他的语言所取代?如果人类文明不会吸收其他程序,它就会,当然这是不可能的。我想显然Java 现在是我们的一大进步。那么下一步是什么我们很难知道。目前来说,面向对象是我所知最好的软件开发方法,如果有一个更好的方法出现,我想会有新的语言崛起。应该说,是无数象你们一样的开发者决定着Java的未来。在过去的几年时间里,Java社团不断壮大,已经发展成为拥有数百万之众的群体,他们以聪明才智协同作战,为Java 作出巨大的贡献。将来,这一技术将发展到怎样的程度,只有开发商群体才有资格回答这一问题。
Java 的使用
记者:我先后学习Java 和C#,觉得尽管C# 比较新,但是相比之下,还是Java显得简洁优雅。不过有一个地方,我觉得C # 的确设计得比较好,那就是delegate。C#的Delegate机制使得事件的处理变得非常容易。Java 是否有计划纳入delegate 机制?
James:不。我认为C#设计delegate是一个不小的错误。Anders 这么做,是因为他原来在Borland设计Object Pascal加入了delegate,所以在C#里也这么干。实际上在事件处理这件事情上,根本没有必要另外设计机制,Java的interface和内部类处理非常好,事件处理机制设计很漂亮。我的原则是,能够用现有语言机制做好的事情,就不引入新的机制。显然C#的设计者跟我有不同的原则。
记者:如您所知,大多数Java开发者都十分关心Java的性能。Java程序通常都会占据大量的内存。垃圾回收器(garbage collector)是Java 性能的瓶颈吗?如果不是,您能够告诉我,究竟是什么东西成为Java 性能的瓶颈呢?
James:Java 并不慢,很多测试都表明Java的性能很好,达到甚至超过C++的水平。如果说Java存在性能瓶颈,那也绝对不是GC。事实上,由于GC 的存在,Java在内存分配和回收上要比C++快。因为在C/C++中分配内存,需要查找空闲链,而Java在分配内存时可以直接全速分配,无需查找空闲链。至于回收,C++是分多次回收,Java是一次性回收,其实并不慢,只是在运行速度上有突然的变化,无法满足实时性要求。我们在Real-time Java的研究中考虑了很多GC的算法,就是要满足实时系统的要求。你知道,现在美国已经有不少军用系统开发使用了Java 语言。GC 有很多算法,各自的优势和缺点不同。总的来说,比较耗费内存是GC一个明显的缺点,而速度上的问题通常不是GC 带来的。
记者:您曾经多次提到过J2ME激动人心的应用,但是据我所知,有些J2ME的开发者认为,J2ME中95%左右的API都和游戏相关,而在BREW 中这一比例就相对要小。难道SUN的意图是希望人们仅仅利用J2ME 来开发游戏吗?对此,您怎么看?
James:对这个数据,我们既要看到相对数,也要比较绝对数。据我所知,J2ME的API的确是多得不能再多了。即便我们只有5%的其他的API,但绝对数量都要比高通他们多得多。因为游戏开发能够给提供商带来丰厚的利润,所以我们在上面投入的要多一些。我的确认为J2ME 的未来是充满光明的。这个系统的性能正在以越来越快的速度增长,这是令人惊奇的。同时,J2ME的规格也在不断地进化,但是我们的规划过程主要的推动器就是手机性能不断地增长。J2ME新的版本实际上是带有一些可以让手持设备变成更强大的机器的特性,比如说手机在这上面的应用。
记者:不久前,中国联通刚和Sun结成了技术联盟,Sun渴望在中国这个最大的手机市场普及Java 应用。我们注意到,Sun公司近来与中国各移动厂商积极合作,发展无线增值服务。而微软也刚刚开发了一组智能手机产品,我们想知道,您对此是如何评价的?
James:我不得不说,有时你会发现微软是一个非常有意思的竞争对手。Sun 的强大武器是Java 技术本身,同时,Sun 和合作伙伴达成紧密合作,极大的支持软件开发团队。不久前,我们和联通宣布结成联盟,这是因为联通看到了Java 在手机市场的专有性以及Java具有的开放性和标准性。Java 欢迎竞争,因为只有这样才能最大限度的提高领域内的技术。很多人,经常问我.NET和Java比较、竞争之类的问题,我想我们和他们最大的区别在于,在Java这个世界里,或者说Java这个舞台上,我们有很多的演员;而在.NET的舞台上,你只能看到一个演员,那就是微软他们自己!
其他问题
记者:在我看来,Java的确是一门伟大的语言,我的问题是,如果您现在有机会重新设计Java,您最希望改变的哪一部分?
James:(沉吟思考了几秒)怎么说呢?如果我重新设计Java的话,应该说当初考虑的一些问题在今天依然存在。在许多时候,你都需要在简单和性能上作一个二者选一的决定。不管我今天怎么改变,它依然是个二者选一的决定,你要做的只是在这些因素中找一个最佳的平衡点。如果有人告诉我,在这门语言的某些方面的设计上,他找到了更好的办法,我希望他能够第一个告诉我。当然,作为一门语言,它许多特性又是在不断发展的,因为你要利用它解决新出现的问题。
记者:在今年六月份您和Bill Venners的对话中谈到了一个代号为“Jackpot”的项目,您能给我们简单介绍一下您目前正从事的这个研究项目的情况么?
James:我现在SUN公司实验室进行大型软件开发工具的研究。这的确是个十分有趣的项目,过去的几年中,我一直扑在上面,的确花了许多时间。简单的说,这是一种能够分析和操纵程序代码的工具,使之能够以有注解的目录树形式呈现。我们是希望将编译期执行的一部分事情拿到程序编码时完成。在研究过程中,我们也遇到一些问题。
记者:您怎么看中国的程序员?您觉得中国的程序员和美国的程序员有什么区别吗?
James:我想中国的程序员和美国的程序员最大的区别就是他们的胡子和喝的啤酒不一样(笑)!另外,我认为中国的程序员应该更多的参与到JCP的过程中来,一起帮助我们确定Java的发展和未来。其实这并不难,而且真的可以试一下,看看你们是否可以发挥自己的影响。
James Gosling 推荐书目(附其评论)
《Barbarians Led by Bill Gates:How the World's Richest Corporation Wields Its Power》
《比尔·盖茨的野蛮领导:世界上最富有的公司如何施展他们的权利》
这是我推荐的第一本书,它不是一本技术书籍,但比技术书籍更重要。由Marlin Eller、JenniferEdstrom、
Martin Eller 合写。如果你曾经困惑于微软为什么会缺乏商业道德,这本书也许会解开你的谜团。当然,真正有趣的故事是永远也不会被讲出的。
《Serendipity:Accidental Discoveries in Science》
《发现珍宝的运气:科学中的偶然发现》
这本书收集了许多有趣的故事,关于偶然事件是如何导致了重大的发现。包括诸如聚四氟乙烯(塑料、
绝缘材料)、青霉素、摄影术、脉冲星和x 射线等。
《The Evolution of Cooperation》by Robert Axelrod
《协作的演变》
这是我读过的最有希望的书。如果你想了解为什么Internet 是个好东西,这本书是必读的。它的核心是用博弈论来分析“囚徒的困境“这个著名的问题,并且将与此相关的东西引申到现实世界。此书关键的结论是,随着接触频度的增长(无论是两个国家,人还是细菌),最优的策略都是从敌意走向协作。
《Applied Cryptography》by Bruce Schneier
《实用密码技术》
所有上网的人都应该拥有这本书。我在演讲中经常会提到这本书,它的主要内容是关于密码使用法的技术和策略。这本书是我们理解许多关于在计算机系统和网络上的个人自由和隐私之类问题的基础。此外,该书作者也出了一本配套新书《The Electronic Privacy Papers:Documents on the Battle for Privacy in the Age of Surveillance》,同样必读。
《Garbage Collection:Algorithms for Automatic Dynamic Memory Management》by Richard Jones and Rafael Lins
《垃圾回收:自动动态内存管理》
对许多人而言,Java是他们第一门使用过的、使术,实际上Java很早就出现了。这本书是一个优秀教程,讨论了许多垃圾回收算法的细节以及区分它们的折衷策略。