Seibel:你还记得你写的第一个有趣的程序是什么吗?
Bloch:噢,我记得那是1977年7月4日,我为经典的二十问游戏写了一个程序,叫“猜动物”。这个程序包含一个二叉树,是非题位于它的内部节点,动物位于它的叶节点上。如果用户所提的动物是叶节点上没有的,它会向用户提出是非题,通过区别新动物和它猜出的错误动物之间的差异来了解新动物。二叉树保存在硬盘上,这样程序可以越来越“聪明”。
我当时想,“天啊,真酷,程序真的能学习。”这是我一生难忘的瞬间。我还记得另一件事。当时我在高中,应该是10年级吧。是关于DEC system-10的。当时不允许我们编写现在叫做即时消息软件的东西,因为它们对系统资源的消耗实在太大了。
Seibel:如果时光能够倒流,可以一切从头来过,有什么东西是你真的希望改变的?Basic对你来说太简单了?其他还有什么?
Bloch:我没什么遗憾的,实际上Basic很有趣。我觉得Dijkstra对Basic的看法是完全错误的。原谅我这么评价已故的人,愿他在天堂安息。我知道很多非常好的程序员,他们是从BASIC编程开始的,因为那是他们能找到的唯一的语言。
然而我觉得使用多种语言是件好事。上大学的时候,我用很多语言编程。每门课都可以用一门语言。在数学课或者理工科课上,应该用Fortran。那时候编程课学的都是Pascal、SAIL、Simula或者类似的东西。在人工智能课上,用LISP。
不过也许我应该学更多的语言。有意思的是,一开始我对面向对象并不感冒,直到那个二十问游戏开发快结束了,我才真正对面向对象有了感觉。严格来说,Java才是我真正使用的第一种面向对象语言,某种程度上是因为我不太想用C++。
Seibel:那是什么时候?
Bloch:那是我1996年加入Sun公司时。我觉得要是我能更早学习这些概念就好了。我不认为这些概念都是好的。面向对象很有意思,它有两层含义。第一,它意味着模块化。模块化是非常好的。但是我不认为这是创造面向对象的人们的专利。你可以去看以前的文献,例如,Parnas关于信息隐藏的论述,就会发现这种概念可以看作面向对象编程中类概念的一种抽象的原型。第二,它意味着继承,我认为继承有利也有弊,这跟如今很多人的使用感受一致。
另外,我应该进入更多的领域,计算机科学领域内外都应涉猎。你学的东西越多,开始得越早,对你越好。我一直没有真正做过的就是GUI编程,在某种程度上说我应该强迫自己做做看。但是由于种种原因,如这些年来开发库代码,构建他人可以使用的代码块,这些事情已经占据了我的大部分时间。这样算来,我做数据结构和算法等方面的工作已经有几十年了。