InfoQ

技术访谈

Guy Steele采访Lisp之父John McCarthy

受访人 John McCarthy 采访人 Guy Steele 发布于 2009年8月6日 上午12时3分

社区
Architecture,
Java,
.NET,
Ruby
主题
语言设计,
语言
标签
人工智能,
LISP
概要
本采访视频由黄璜翻译,马国耀审校。
在这次OOPSLA 2008会议上,Guy Steele在观众面前对John McCarthy作了一次电话采访。 Guy Steele跟他天南海北的阔论起来,试图发现这一语言如何在五十年代形成与其后续演变的一些细节。

个人简介
John McCarthy自1948年就投身于人工智能的研究,这个术语也是他在1955年提出的。他主要关注在对于普遍常识的形式化研究。他于1958年设计了LISP并发展了分时这一概念。特别地是,他是图灵奖,研究杰出奖,与京都奖的获得者。

关于会议
我是Guy Steele同时也代表Alan Kay,您已经有一张问题列表了,P.Gabriel转给你的而且我相信你也浏览过了。我打算把其中一些问题过一遍,当然不一定要按照原来的顺序,让它自由连贯会更好。同时我还准备了一些你没有看到的问题,比较简短,我想可以把它留到这次谈话的最后来进行。那不如让我们从这个列表上第4个问题开始:在 Lisp的早期概念与早期开发中,谁对你的帮助最大?
你能告诉我,在Phyllis fox之后,手册的后续版本是由谁负责的吗?
现在让我们来看列表上的第3个问题。如果时光能够倒转,你会为Lisp加入什么?你将会删去哪些部分,而哪些部分又需要修改呢?
经年以来又不少的项目试图将Lisp与Prolog以某种方法组合起来,以加入逻辑。你有没有注意过它们呢?
能否举一例说明一下Lisp里面什么样的英语化特性是你所不愿使用的呢?
也许你想到的是LOOP。我只是想知道你用“英语化”来指代什么。
现在我们上到第2号问题:一个好的编程语言与一个不太好的编程语言区分在哪点?
当然,你在Lisp中加入抽象语法的一个重要目的之一就是让它可以编写自己的分析器。与此同时,你还有其它的目的吗?
让我们继续,看看列表上第一个问题:编程在AI研究中扮演一个什么样的角色,它应该是一个什么样的角色?
我见过其它编程语言所定义的抽象语法的数据结构,比如Ada。看起来还是少用它们或者少学它们为妙,因为它牵涉了许许多多非常特殊数据结构,每一个对应一种抽象语法,而不是一般性的使用一个表达式来表示所有的抽象语法。你对使用统一的表达式表示的利与弊有什么评价吗?
这是指的维也纳定义语言(Vienna Definition Language),不是吗?与之相关的一些书都是30年前写就的了?
那个时候我还太小。我准备暂时抛开你面前的这个问题列表,问问大家提出来的一些相对简短的问题。其中有些人在1958年曾经参与过Lisp的一些相关的早期活动,希望你能让他们满意。第一个问题是,特性表(property list)这一想法是从何而来的?
你原本是怎么想的呢,又发生了怎样的出入呢?
你的评述引起我了两个问题。一个是,如John所说,人们会在50年之后问这个房间里的人:“你当时在想什么呢?”。我希望你们能够从历史学家那里学到,把东西记下来,或者你可以保存你的电子邮件,甚至是将它打印出来以保存得更长久。实际上这就引出了一个列表上的问题:John,你在standord时期的笔记和手写材料还在吗?你仍然还保留得有MIT时期的笔记吗?在你致力于Lisp的时候你是否有记录某种形式的实验笔记的习惯?
我希望Brewster Kahle的因特网档案库能够有助于填补这个空缺,但如果你真想把它们保存下来的话,我仍然建议人们打印出纸质文件。我们将会见证这是否能有成效。回到特性表这个问题,我注意到特性表使用键值对来记录信息,这似乎是一个重要的编程指南。关联表(association list)同样提供了一个有着键值的对应。这多用于变量查找与环境。十分有趣的是,特性表与关联表,尽管都是服务于同一个相同的目的,但在控制台来说却有着两个截然不同的结构。这是Lisp当中的一个历史巧合,还是重复发明的轮子呢?发生了什么事?
两个不同的程序员,又相互都比较粗枝大叶——似乎说不通。
这是一个很小的点,但却引起我的好奇,你在1958年之前有什么样的实际编程经验,在你处理Lisp之前?
当你开始Lisp的工作时,特别是从1958年的9月到11月这段时间,你每天投入多少时间在Lisp上呢?你是100%的投入呢,还是说在进行其它项目的同时投入部分的时间在它上面?
在50年代末期,你也参与了ALGOL的设计工作。我们想知道你是否考虑过以ALGOL 58作为基础来设计Lisp而不是使用FORTRAN,或者Lisp是否因为你对ALGOL 58的参与而带来的间接影响?
有时候这是处于正确性的原因。实际上,我们现在对它们的使用已经是习惯了,或者从更早开始,1965年吧。以这种条件的方式对逻辑连接求值对于程序的正确性来说是十分重要的,有鉴于此我们就习惯这种惯用的方式。这样的话,如果a不通过而去对b求值的话,就可能不正确了。
你第一次接受递归风格的编程是什么时候?
这一将计算机程序以递归的方式组织起来的想法也是随着Lisp本身逐步进行的吗?
你所不想照搬的不好的方面指的是什么呢?
我看过一些IPL-V的代码,看起来它确实是非常声明式和命令式的语言,而命令又夹杂着十分神秘的名字和数字,这让我想起Lisp机器上的汇编语言。你现在相信S表达式或者以S表达式编程不是一个好主意。对此你有改变看法吗,如果是的话,是什么时候?
听你这样说很有趣,因为你作为Lisp的发明者,你在很多方面都被认为是一个出色的创新者,所以你将自己描述为保守派确实令我们有一点吃惊。
我现在准备回到你面前的问题列表。从第5个问题开始,然后向前进行。编程语言应当为理论家的推理而设计呢,还是为实践者构建系统而设计呢?或者对于这两种目标各有语言呢?不同的语言设计者的技术集是不同的吗?
这实际上让我想起了ALGOL项目早期的机器可读的语法与用于发布中的参考语法之间的区别,这一区别是从你这里来的吗?
我所提到的ALGOL格式中没有做到至少像S表达式那样符合抽象语法?
你认为这些不同类型的程序表现方式是否会对设计者提出不同的技术要求呢?你是否建议作为一个设计专家,在核心抽象语法之上,可以上加不同的修饰呢,比如说“口红”——“口红”(Lipstick)在当前的美国特定的政治时令中是非常流行的。
你在回答前面的问题的时候,你指出人编写程序是重要的,同样,能编写程序的程序也是重要的。你认为同样的编程语言可以很好的服务于这两个目的吗,或者它们具有同样的抽象语法,而人类也许想使用不同的具体语法?
让我们来看列表上的第6个问题。Lisp有着很奇怪的历史,有着许多的变种(方言),许多的实现,和许多的争议。你认为Lisp所尝试的这些思想的平台,对于它本身以及编程语言整体来说,是有益的吗?
实验效果好吗?你认为Lisp的设计有什么特别的地方可以促进了实验或者说让实验更容易?
现在Python有它的老大,Guido van Rossum,C#也有它的老大——Heilsberg在那儿呢——还有James Gosling——他不再想扮演Java的老大了,但他仍被看作是老大一样的角色。
我一直以来都拒绝扮演这种角色,也许是本能的参照你的例子又或者只是我不想当这个老大——我也不知道。有意思的事情是在过去的10到15年以来,编程语言都有一种关于领导的文化,而如你所说,这对语言的发展来讲也许不是个好主意。让我们来看看第7个问题。你认为Lisp所作出的最重要的贡献是什么?
当然,你使用Lisp结构作为程序的展现方式,因此它们是相关的?
我想知道的是最重要的一个贡献。我会列出4到5个其它我能想到的点并且征求你的意见。与Lisp程序以及Lisp数据密切相关的是它支持编码,应用与求值(eval),就好像作为这一语言的普遍实现一样。求值(eval)的思想是一个通用的图灵完备函数,这也许是一个重要的思想。它还包括了面向表达的语言,对于递归函数的支持,影响到其它所有语言的麦卡锡条件表达式——甚至是C,虽然有着怪异的语法,但也支持了它——,以及垃圾回收。我有没有漏掉什么重要的概念?也许有。我准备问问观众:我的列表上遗漏了什么吗?高阶函数,符号,动态编程。我想请问你,John,你对于这些概念有什么评论吗,比如它们是如何适应于Lisp这一宏图的,而你当时想要完成的目标是什么呢?
回首往事,在你职业生涯中最值得你骄傲的是什么?而你想收回想法的又是什么?还有没有什么思想是你提出来的而没有被注意,但你想让它产生更多影响的?
我听到观众都在说:“阿门”。这里有一个稍微奇怪一点的问题,列表上的第9个问题。斯坦福的AI实验室是一个独特的地方,远离校园,而且由一组不拘一格的组成,包括了搞软件的人,搞硬件的人,还有音乐家,每天都有排球比赛,而且有自己的计算设施。这些因素对于做这种有深远影响的研究有所帮助吗,或者这些因素其实没什么相关?
这也是你不想做领导,让人们做他们想做的事情的又一例子吗?
我认为,形式化常理是一个非常困难的问题,到现在仍是。
如果没记错的话,60年代末期,MIT也在进行机器人的研究,特别是解决视觉的问题,他们声称“我们在这个夏天就可以解决视觉问题”因此它们有了 Summer Vision项目,到了夏天结束时他们有了一些不错的关于摄像机的子例程,但我并不认为在这一点上解决了视觉的问题。直到1967年,花了一年的时间,John White用Lisp为这个项目写了一些矩阵与版本的例程。
计算机视觉仍然是一个困难的问题。现在我将再一次把这个列表放到一边,让我们的观众有机会向你直接的交流。在这个房间里我们准备了麦克风。如果有谁想向 John直接提问的,那就来吧。(Herbert Sterns提问):在Lisp的发展中,Marvin Minsky产生了什么影响?
(John White提问)Marvin因为在1960年左右编写了将内存转储到二级存储,再取回内存的垃圾回收器而受到赞扬。这比我要早,但我读到的文献是这样说的。我想这可能是他对Lisp作出的主要贡献。
我直到六年之后才参与进来,所以我不知道——不是我所工作于的那个Lisp。
(Kent Pitman提问)我想知道,Lisp这个名字,现在对你而言,在多大程度上表示这一语言是以列表处理为中心的?作为我个人来讲,我想关于 identity或者dynamic typing对于这一语言的贡献比列表更为重要,所以我很好奇,如果我们回溯过去你是否还会叫它Lisp?你认为其中心的特点是什么?
前一个问题是关于Marvin Minsky对于Lisp的影响。
这是Kent Pitman的问题,关于Lisp是名字是来自列表处理。你再回首的时候是否觉得列表处理是这一语言最中心或最突出的部分,或者说你会因为其它的一些更为重要的东西给它另起一个名字吗?
(Kent Pitman)我没有一个专门的名字好建议,不过我还有一个与此相关的问题。你如何评价动态类型,我认为这是这一语言的中心之一,而静态类型的缺失是一种特性呢还是一个bug呢?
(John White)当我在卡耐基念本科的时候,Perlis所追求的圣杯就是用符合和代数来对数学进行形式化,但他走的是ALGOL的道路。而你确实提到了关于 ALGOL的一些事以及对于它的一些想像,于是他长时间寻求公式化的ALGOL以成为Slagle工作的竞争者,直到很多年之后他个人致歉并表示他对 Lisp的赞同。我想知道的是你是否听过“formula ALGOL”这一术语,如果是的话,那么这种工作以及它在符合代数,数学实验室,极值等等方面产生的分支,是否可以以一种类似于ALGOL的语法和语义来实现?
John,现在我回到这一问题列表。你能看一下第14个问题吗?你认为好的标记能促进好的思想而不好的标记会妨碍它这一说法吗?
你如何评价好的抽象语法能促进好的思想,而不良的抽象语法会妨碍它这一说法?
OK。我只是想知道:抽象语法只是抽象的吗还是它是其他样子的,或者对于抽象语法是否也有良好的设计与不良的设计呢?
这是一个比较奇怪的问题,我想看一下我能得到怎样的结果。最后一个问题了。你对于现在的青年研究员有什么建议吗?你觉得最重要的一个研究课题是什么?
在当时是一个重要的问题,而如今仍是如此。OK,非常感谢你,John。我们占用了你一个小时的时间,我们也非常感谢你能打进来。我们对于你发明了 Lisp以及在逻辑方面所做的其它工作表示崇敬。我想在这个房间里几乎所有的人都可以说他或她的职业多多少少是站在了你的肩膀之上——我自己毫无疑问。我们只想表达我们的感谢。再次感谢你!
show all  show all
如果InfoQ英文站上的视频也能搬过来就好了 发表人 Jeffrey Zhao 发表于 2009年8月7日 上午10时11分
很有料 发表人 Anders Cui 发表于 2009年8月10日 上午12时4分
感觉很学术化 发表人 John Lee 发表于 2009年8月17日 下午9时4分
  1. 返回顶部

    如果InfoQ英文站上的视频也能搬过来就好了

    2009年8月7日 上午10时11分 发表人 Jeffrey Zhao

    很多有价值的内容。

  2. 返回顶部

    很有料

    2009年8月10日 上午12时4分 发表人 Anders Cui

    了解了不少Lisp作者的设计思路和设计过程以及其它的一些观点。

  3. 返回顶部

    感觉很学术化

    2009年8月17日 下午9时4分 发表人 John Lee

    没怎么看懂,对我来说还是很阳春白雪的......

深度内容

2010年大规模技术架构的思路

相比其他行业,IT技术由于信息流动便捷,新技术更新非常频繁。架构师经常面临新技术及传统方案选择的困惑。架构师应如何抓住本质构建新一代的应用?本文从几个方面提出一些思路供架构师参考。

功能小组模型的过程与质量控制

InfoQ中文站最近采访了微软的Ramesh,在采访中,Ramesh从过程控制、架构与设计的控制以及测试组织等方面分享了他所带领Visual Studio软件生命周期管理工具团队使用敏捷方式组织管理大规模软件团队方面的经验。

张文钿谈Rails开发及台湾Ruby社区

在去年10月份的Kungfurails大会上,InfoQ中文站有幸采访了从台湾专程赶过来的张文钿,与他探讨了关于台湾Ruby社区的发展、Rails的商业化,Restful Design等话题。

Scrum与策略

如果Scrum只关乎短期行为,战略人士又该如何去适应这种生态系统呢?更重要的是,它如何帮助企业领导人做出并且履行重要的承诺?

书评:《代码之道》

《代码之道》以一位微软内部人士的视角,揭示了关于软件编码、软件测试和项目管理的残酷现实。针对每一个话题,I.M.Wright都根据丰富的工作经验提出了自己的观点,并介绍了来龙去脉,令人信服。

洪强宁谈豆瓣网技术架构

如何应对高并发、大访问量?如何保证数据的安全性以及数据库大吞吐量?在海量数据下,如何进行数据表变更?DoubanFS以及DoubanDB的特点以及技术实现?在QConBeijing 2009期间,InfoQ中文站有幸采访了洪强宁,探讨了相关话题。

淘宝网架构师岳旭强的年度展望

淘宝网资深架构师岳旭强结合自己的实际工作,从数据扩展性、关注系统和人的交互,以及关注可用性等方面做了总结和展望。

大型团队中的敏捷开发

在1月份举办的Scrum敏捷实战营中,钟鸣从微软研发团队敏捷开发的最佳实践角度与大家探讨了大型团队中的敏捷开发。