Java之父James Gosling谈计算机编程艺术

2002年,著名的”Java2虚拟机内幕”作者对Java之父詹姆斯·高斯林进行了访谈,谈话中,高斯林就软件设计的复杂性和算法发表了他的一些看法。对有志于从事IT软件行业的童鞋来说,听听专家的意见,应该还是不无裨益的。

Java之父James Gosling谈计算机编程艺术

Java之父James Gosling

2002年3月22日,Bill Venners采访了Java之父,谈论了有关企业软件,算法,用户界面友好软件等话题。以下为全文:

James Gosling不在布道Java语言的时候,通常躲在Sun实验室的一个安静角落,一连好几天都在思索一些新方式,以协助程序员更好地处理程序的复杂性。 他的书架上还挂着一个里的博格人面具,上次JavaOne演讲中他就带在脸上,在面具的低垂注视下,他对Bill Venners款款道来,话题涉及当前的编程趋势,以及对软件系统设计和构建的看法。

企业编程和设备编程(Enterprise vs. devices)

Bill Venners: Java在那么多的手机和智能卡上普及,可是为什么大多数都在用Java编写服务器端的程序?

James Gosling: 我觉得这是北美中心论者的观点. 你要是参加北美的会议,处处可闻人们在讨论企业软件。可是我最近去参加欧洲和日本的一些Java会议,没有人讨论企业软件。

Venners: 那他们在用Java做什么?

Gosling: 他们关注设备,手机上的编程,以及如何实现端到端系统。如果北美的记者有机会去日本最近的JavaOne会议的话,一定会大开眼界,在那里,基本上没企业 软件什么事儿。到处都是嵌入式系统,实时系统,有些稍显笨拙,有些却十分精妙。他们使用Java,让计算无处不在。

企业软件当然有其精髓之处,但是除非和别的领域沾边,否则毫无意义。企业软件已经被边缘化了,要想有所意义,得有端到端的思想。

计算机编程艺术 (The art of computer programming)

Venners: 最近我翻了翻唐纳德的计算机编程艺术,那套书尘封已久,主要讲得都是算法. 可是在我一生的IT事业中,貌似很少用到这些艰深的算法知识。你觉得编程是一种艺术吗?或者说,自从上世纪60年代和70年代以来,我们所理解的算法概念已经有所改变?

Gosling: 不管你在写代码时有没有用到算法,不可否认的是,计算机编程确实是一门艺术。当有性能瓶颈需要解决时,许多人束手无策,毫无办法,他们不理解算法性能的具体含义,他们不懂如何定量地去分析算法复杂度。

很少有人问:”怎样提高程序的运行速率呢”。码农们总喜欢调用现成的APIs函数,封装了一层又一层。有时你会看到深达10层甚至100层的调用堆 栈,不由地呼叫起来,”天哪!”。他们就是一味地在抽象层上垒抽象层,恨不得不断地就这么垒上去。写出来的程序可想而知,复杂繁琐得让人难以理解。

Venners: 你曾说过,那么多人一点算法都不懂,就直接投身到软件开发大军中,这让你倍感惊讶. 你还说,他们编写的程序笨拙而低效,你觉得原因是什么,是糟糕的算法设计导致的?还是他们基于面向对象的设计过于拙劣,抑或还有其他原因?(译注:这种情 形在中国也越来越普遍,近年来的很多IT培训机构速造了大量的低级程序员,以及所谓的一些测试人员。但是优秀的程序员,对很多公司而言,还是可遇而不可 求)

Gosling: 不管是算法设计还是系统设计,这些方面都有问题。低效的算法设计来源于对算法知识的一知半解,比方说啊,你设计动态数组的时候,如何增长数组呢?是每次增 长10个比特,还是每次按原有大小的10%增长?听起来好像是一回事啊,其实不然。若按每次10个byte的增长,加入n个元素的时间复杂度就是 O(n2),但是后者的时间复杂度只有O(n), 你看,高下立判吧

复杂度(Complexity)

Venners: 那么,编程这门艺术应该能让人们的生活更便捷吧.

Gosling: 正解! 这就像过去四五十年间,汽车行业发生的改变一样。以前打开汽车的发动机罩,你还能搞清楚里边的装置,现在呢,你一打开发动机罩,瞧见里面,不茫然无知才怪呢。

Venners: 可能是因为里边有太多软件装置的缘故吧。软件这玩意儿,可不能硬拉胡扯。

Gosling: 有一部分是软件吧。还遍布着很多细小的管子,从这串到那,有些司职管理引擎的效率,有些调控空气质量,反正它们包办一切,不用再劳你身架了。再者,现在的 汽车完全是自动型的,人们只要钻进去,启动,就开路了。而不像以前那么麻烦,比如像这样,”喂,外面有40度啊,我得预热下发动机,还得把熄火装置放身 边, 你别一味加油了,空气有点潮湿,没必要再加了.”,可不是忒麻烦。

大多数人才不想管发动机罩后的事情呢。他们只关心达到目的地。类似的,人们只关注自己的业务,才不愿纠缠什么软件问题呢。

Venners: 你以前说过,Java被设计用于分布式的可靠人机交互软件系统。我知道Java的架构有助于实现可靠的分布式系统,但是Java是如何帮助提高人机交互体验的。

Gosling: 很多是语言的API层在作用,但如你所见,大部分还是语言的底层部分的功劳。你提到的很多其他方面也有利于改善用户的使用体验。举个例子,经常崩溃的软件 当然用起来很不爽。而依赖于机器CPU的软件系统则更难使用。软件零售商将软件的苹果版本和PC版本分类摆放,其实本身就是整个市场结构的大错。而在日 本,人们在不同的CPU和不同的操作系统下,生产了很多Java手机,但他们之间的软件都能互相移植。比方说你想装一个俄罗斯方块 游戏,那就装好了,可移植性为用户带来了莫大的便利。

Venners: 您曾说过,打造一个高度灵活适应的编程系统是你毕生的追求。而我在编写系统的时候,团队成员经常会提出程序适应性的问题。有些 会增强程序的适应性,但复杂度也随之增加. 当你在编写软件的某一模块时,你是如何在适应性和复杂度之间权衡的。

Gosling: 这个就是体现计算机编程艺术性的地方了。向程序添加一部分代码,当然会增加程序的复杂性,可是如果你不加呢,用户用你的软件时就会繁琐得多。精力守恒定理 适用于此,你投入到程序中的精力越多,用户使用时遇到的麻烦和折腾的精力就会越少。程序员做的,正是在开发端和用户端之间尽量平衡开发和用户的复杂度。

Venners: 有人问过你对开发工具有何看法,当时你回答更愿意和程序的复杂性做搏斗,你喜欢程序复杂性的哪一部分呢?

Gosling: 这个问题可难倒我了。恩,这么说吧,你买个手表,那它就是块手表,带分针时针的手表,对吧?可是有些公司最近生产了一种手表,它们的外壳是透明的,里边的 机械装置一览无遗。我也不知道为什么,看着它们,我不得不说,”看起来很酷,不是吗”,打第一眼看到它们,我就买了一个。当我在构思完软件模型后,我就找 一些复杂的模块,将它们整合起来,最后它们啮合成一曲完美的软件旋律—这种感觉实在是太美好了。而就在昨天,我在即安装了一对新的扬声器,立体音响系 统背后的电线一团乱麻,简直像个迷宫。但我却乐在其中,正是这种复杂性,才让我如此着迷。

本文作者简介

Bill Venners, Artima软件公司的头头。该公司提供公共和私人训练和咨询服务。Venners是一位Java程序开发者,并致力于Jini技术。他写作 了”Java2 虚拟机内幕”一书,并创办了Java和jini开发者的资源网站Artima.com。同时他还在撰写一本新书”API设计”,用以指导设计面向对象的 API。

 

本文摘自:http://www.redbots.cn/skills/2009/07/05/11534.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章