近乎完美的艺术品只在很小的方面有所改进:APL比英国教授艾伦·J·佩利斯(Alan J.Perlis)更像耶鲁大学(Yale University)教授。
我是来自阿尔戈尔的叛教者。在ALGOL编程语言环境中长大的我,在相当晚的时候就受到了APL的影响。就像所有晚年进入有趣事物的人一样,一个人往往很快就会忘乎所以。我想说一下我是如何受到APL的影响可能会很有趣,因为也许你们中的许多人都走过同样的路线。
我当时正在英国纽卡斯尔参加一个会议,我应邀在那里发表演讲,还有斯坦福大学的唐·克努斯、IBM的肯·艾弗森以及其他一些人。我坐在观众席中,中间夹着两位非常受人尊敬的计算机科学和计算界人士-弗里茨·鲍尔(Fritz Bauer)和埃茨格·迪克斯特拉(Edsger Dijkstra),前者在慕尼黑的总部负责巴伐利亚州的计算机业务,后者在荷兰的总部负责全球的计算机业务。
Ken在放映一些幻灯片-他的一张幻灯片上有一些东西,后来我才知道这是一个APL的俏皮话。他把这个作为APL符号表现力的一个例子。我相信一行代码是用来表示代数表达式中括号嵌套级别的标准代码之一。但是这一行很短--十个字符,大概十个字符--我参与了很长一段时间的编程,意识到这需要相当数量的代码才能完成,我看着它说,“天哪,这门语言肯定有什么东西。”鲍尔,在我左边。我没看到这一点。他看到或听到的是肯的话,他说APL是一种非常适合教授代数的语言,他低声对我说,“只要我活着,APL就永远不会在慕尼黑使用。”坐在我另一边的迪克斯特拉靠向鲍尔说,“在荷兰也不是。”我们三个人听的是同一堂课,但我们听到的显然是不同的东西。
因此,APL吸引我的是一种感觉,也许通过APL,一个人可以开始获得我们在自然语言中崇敬的编程的一些维度--一些组成的乐趣,说得优雅;简洁、诗意、艺术,这使得我们的自然语言对我们来说是如此珍贵。编程的这一方面是我长期以来一直感兴趣的,但在我使用FORTRAN、ALGOL、PL/I学派语言的经验中,我从未找到任何接近这一水平的语言。很明显,在那些语言中,编程实际上是一项管道工程。一个是建造一个复杂的物体,而主要的问题就是让你的头浮出水面。但是,要让你的头从这些语言中脱身是非常困难的,以至于我们在编程中使用的语言的这一方面从来没有浮出水面。对我来说,。在听肯的时候--我以前听过他的话--对我来说,在那一刻,我只能说是一种启示。
1963年,我在普林斯顿的一个编程语言会议上听过Ken的演讲,他谈到了APL。但当时APL并没有在任何一台计算机上运行,他坚决认为它没有必要在计算机上运行。对他来说,这是一种他可以用来表达算法概念的符号;而对于当时的他来说,这似乎已经足够了。对于我们这些关心让程序在真实计算机上运行的人来说,这似乎远远达不到目标。几年后,由于天上的星星--一些非常优秀的程序员,哈佛大学没有给肯终身教职而他去了IBM,360可以使用,人们认为人们应该可以用它来分时--天才程序员的结合,肯、阿丁·法尔考夫和其他几个人的出现,360给了我们所有的APL。我认为我们今天都应该意识到,APL之所以是现在的样子,是因为有了这样的连词。它运行的系统是如此坚如磐石,以至于在分时度假是一项极其不稳定的活动的时候,人们实际上可以保证合理的持续运营;在第一个360实现中所代表的语言;以及一群热心的追随者,他们将这种语言潜入了IBM之外-因为在那些日子里,IBM远没有像它应该接受的那样容易接受。但这一直是IBM的历史。像所有的大公司一样,它拥有大量的事后智慧。但这真的意味着我们--尤其是那些为IBM工作的人--必须时刻意识到IBM对好点子的顺从,但克服巨人的惰性需要时间,需要很长时间。
现在,回到APL作为一种语言的问题上来。在与人们交谈时,我经常感到惊讶-但回想起来并不惊讶-当我谈到APL时,几乎就像我们在谈论两件不同的事情:他们对A的看法