分享

程序员祖师爷麦卡锡:得LISP者得天下

 AnonymousV脸 2019-02-11

AI学说话:新语言LISP的诞生

麦卡锡考虑过和IBM合作升级现有的FORTRAN,但是IBM却在这个时候退缩了。20世纪60年代初期,在维纳党不断的蛊惑下,很多人都认为计算机可能会威胁到他们的工作岗位,IBM可不希望自己好不容易造出来的又大又笨重的计算机滞销。因此,为了打消客户的疑虑,IBM停止了所有关于人工智能的研究,把计算机说成是非智能的快速运算设备,它们百依百顺、只会按要求行事。

程序员把问题分解成更加容易管理的部分(结构化编程),因此大部分程序只需要服从“做这个,然后做那个”指令的顺序事件就行了。反反复复。

面对越变越复杂的FORTRAN,麦卡锡不再纠缠于去升级它,决定开发一个的新语言,他要设计出一种越变越简单的语言。可是IBM不可能再为他买单,该找谁要这笔研究经费呢?

苏联帮了他一臂之力。1958年,苏联发射的人造卫星刚刚进入太空,艾森豪威尔总统害怕在科技上落后苏联,迅速成立了ARPA(先进研究计划署,因特网就是在这个组织中诞生的)。ARPA就相当于一个大的政府引导基金,促进各个高校进行科技成果转移转化。政府希望这帮科学家能“出色”做点成绩出来,但其实政府自己也不知道什么才叫“出色”。连书面提案都没准备,麦卡锡和明斯基很顺利地就得到了一笔经费,并用这笔钱成立了MIT人工智能研究室。他们两个有了一个大工作室、一台键控打孔机,此外还配备了一名秘书、两个程序员和六个数学专业的研究生。

有天才的科学家,有不差钱的实验室,还有最先进的设备,打败FORTRAN的新语言很快就诞生了。

前面说了,FORTRAN语言相当于把你用纸笔计算的过程通过计算机实现,它是用一种按部就班的方式解决问题。如果真实世界要复杂的多,计算机总会遇到筋疲力尽的情况,更何况大部分事情也不是用几个简单的公式就能算出来的。比如,在客观世界里,我们能找到一个严格的圆形或者三角形吗?找不到。自然界里一个严格意义上的几何图形都没有,存在的只是几何规律。所以需要我们输入的数据非常多样化,而且通常也不会有什么固定的格式。

以下棋为例,车马炮都有各自的走法各自的规则,储存这些规则需要的结构和数据自然都不一样;再加上这些规则还是不断变化的,比如卒在没过河之前只能一步一步往前挪,过了河之后横着走竖着走都可以,这就需要卒的规则能够随时修改、增加、删除和改变。

所有的这些,都需要放开对数组空间大小的约束,允许实时动态地增加和减少数据。麦卡锡给出的解决方法是:加两个括号。

对,没错,就是括号

比如你想做计算题吗?你可以用(time 3 (plus 1+2))表示3*(1+2);再比如,你想去购物吗?你可以用(milk egg apple)表示你的购物清单。加上了括号之后,数组就变成了链表,原来只能按照规定好的顺序和步骤一步一步往下走的程序,现在可以通过指针和递归函数在链表之间自由地活动。如果需要修改的话,就分配出新的内存空间,不需要用时就把已分配的空间删掉,不会造成内存空间的浪费。

如果把程序比作货物的话,用FORTRAN编程就像是让码头工人背着沉重的货物爬上踏板,钻进货舱,按照顺序整整齐齐地码在卡车里。如果有一个货物放错地方了,或者需要调整一下堆放的位置,就必须先把其他货物都卸下来,再进行重新调整。

而麦卡锡发明的新语言就像是搬运界的集装箱,先把货物分好类,装进集装箱里,直接运输集装箱就可以了。如果需要增减货物,找到相应集装箱的序号就行。

这个新语言就叫LISP(List Processing language),也可以把它叫作“表处理语言”。

当当当~当

简单来说,相比FORTRAN,LISP有以下3个主要特点:

LISP特点

1. 计算用的是符号表达式而不是数;

2. 控制结构基于函数的复合;

3. 用递归作为描述问题和过程的方法。

独一无二的宏

随着工作的深入,麦卡锡希望进一步加强LISP的表达能力。为了能让LISP可以明确地表达任何可计算函数,他加入了一个叫做“求值”(eval)的功能。“求值”允许程序定义新的函数,然后在不需要暂停程序运行的情况下,将这个新定义的函数作为程序的一部分执行。

这就很厉害了。比如说,由于金融市场时刻都在变化,所以股票交易所必须每周7天、每天24小时不停地提供计算服务。如果有个分析师写了一个程序,发现可以用新的方法分析纳斯达克的股票数据,那他马上就能在不中断机器的情况下用这个新的模型。

也就是说,无论在什么时候,整个程序都是可用的。LISP并不真正区分读取期、编译期和运行期。你可以在读取期编译或运行代码;也可以在编译期读取或运行代码;还可以在运行期读取或者编译代码。

听起来很熟悉,这不就是通用图灵机吗?由于求值函数可以带动并执行任何函数,所以它扮演的是'通用图灵机' 的角色,是其他计算机的集大成者。(可戳回顾图灵之死:他拯救了世人,却被世人遗弃)

图灵机:我又来啦!

再往深处想,这是不是意味着我们可以写出一种能够自己编程的程序?这可能听起来很怪异,但是对于LISP语言却是可以实现的。最常用的做法就是使用宏。

LISP的宏是独一无二的,连现在的很多高级语言里都没有宏。一般的源代码程序经过编译器解析就会生成解析树,宏的特别之处在于,你可以通过它控制解析树,进行任意的存取操作,还可以生成其他程序。

什么是宏?就是把一些命令组织在一起,作为一个单独命令完成一个特定任务。玩过《魔兽世界》的人可能会发现,游戏里面有多达13个种族和11大职业,每个角色的表情动作都十分繁杂。这个时候该怎么同时激活2种以上的法术,或者施法的同时用游戏中的聊天系统发送信息呢?解决方式是“宏命令”。通过建立宏命令,你就能让暗夜精灵在喝水的同时施放影遁,也能让猎人在标记敌对目标的同时喊话提醒队友。

所以通过宏,我们既可以改进某个程序让它变得更短,也可以加入一种新语言进来,让它成为LISP的一部分。LISP就像是修炼了吸星大法的任我行,通过吸收别人的内功让自己变得越来越强大。宏让LISP拥有了一种很奇特的语法,或者说它根本就没有语法。

其实说到底,不管是机器语言还是汇编语言,他们共同的问题都在于一写就容易写很长,写长了就容易出现BUG,但是用高级语言就可以写的很短,可读性也很强。而且不同型号计算机的机器语言是不完全相同的,如果用高级语言就不用针对每种机型写代码,重新写编译器就行。

编译器处理的高级语言代码叫做源码,处理之后的机器码叫做目标码。后来又出现了开放源代码的潮流:公开源码并且可以随意修改。开源让我们可以修改软件,同时也能自己动手修正BUG。

电影《源代码》海报,这是一部2011年的美国科幻惊悚片

到今天,高级语言大概有几百种,但是最高级的主流语言,也只是刚刚接近LISP的水平,而且根本做不到像LISP那样强大。Java、Perl、Python、Ruby……你会发现,排在越后面的语言,越像LISP。Python模仿LISP,甚至把很多设计错误的功能都一起模仿了。至于Ruby,如果回到1975年,你声称它是一种LISP方言,没有人会反对。编程语言现在的发展,不过刚刚赶上1958年LISP语言的水平。

埃里克·雷蒙德在《如何成为一名黑客》这本书里说,如果你想当个黑客,可以从Python和Java开始入手,因为比较容易掌握。然后开始学C和Perl,前者用来对付Unix系统,后者可以用来管理系统和开发CGI脚本。最后,他建议,如果你把黑客当做自己的人生目标,就必须要学LISP。即使实际工作中很少会用到LISP,但只要一旦掌握了LISP,就会感觉到它带给你的极大启发。

如果你是投资人,想要评估一家技术公司的水平怎么样,偷偷教你一个诀窍:看他们的程序员招聘启事。如果要求应聘者有Oracle数据库经验的公司,你可以直接放弃了;如果招聘C++或者Java,说明水平一般;如果招聘Perl或者Python,说明技术还有点门槛;如果你遇到一家技术公司里面的程序员都会写LISP,相信我,不管这家公司是做什么的,都千万千万不要错过它!

一句话,LISP是目前最强大的编程语言。为什么LISP会如此强大?因为这种语言本质上不是一种技术,而是数学。数学,永远是时代的弄潮儿。

麦卡锡其(奇)人

继续说麦卡锡。

LISP编程语言的创造者,人工智能领域的泰斗——麦卡锡

1927年9月4日,麦卡锡生于波士顿。他的父亲是一个爱尔兰移民,做过木匠和渔夫,但同时也是一个发明家和工会积极分子,拥有两项很冷门的专利,一个是捻船缝机技术,还有一个是桔汁冷冻机。麦卡锡的母亲是来自立陶宛的犹太人,热心于女权运动,还当过记者。

麦卡锡的父母在20世纪30年代都曾参加美国共产党。受到父母的影响,麦卡锡对社会问题也比较关注,还倡仪过修改“人权法案” 。

麦卡锡还是个特别喜欢刺激的人,他对攀岩、跳伞、驾驶滑翔机这些运动情有独钟,曾和他的第二任妻子维拉·沃特森一起攀登过世界上不少大山高峰。这个沃特森也是一位程序员,但她更知名的身份却是登山运动员。她是第一位独自攀上西半球第一高峰阿空加瓜山(海拔6960米)的女性,但不幸的是,她随后在一次攀登位于尼泊尔中部的阿那波尔那峰(海拔8075米)的探险活动中不幸遇难。

麦卡锡的性格决定了他不是个循规蹈矩的人。因此当MIT没有对LISP语言采取足够重视时,他决定前往美国西海岸——那里有新兴的反主流文化,教授可以扎着长发,穿有破洞的牛仔裤上课。

后来,麦卡锡对MIT的评价是:跟那里的人解释LISP语言,就像是跟挖沟工人说明蒸汽铲子有什么价值一样费劲。

People prefer dealing with machinery to dealing with bureaucracies.– jmc 1986

相比起应付官僚制度,人们更愿应付机器。——麦卡锡(1986)

在西海岸,麦卡锡发现这里不存在官僚保护,如鱼得水的他迅速在斯坦福大学建立起了第二个人工智能实验室,跟原先MIT的那个分庭抗礼。很快,斯坦福大学的这个实验室成为了加州黑客的天堂,并催生了黑客情怀。在之后15年的时间里,一个由硬件和软件工程师组成的惊人阵容迅速涌入了这个实验室,苹果创始人史蒂夫·乔布斯多年以后都还对这个设立在山上的实验室念念不忘。这里保留了反主流文化氛围,透过它,一股对人工智能领域乐观的情绪蔓延开来,充斥着整个20世纪60年代。

1971年,麦卡锡获得图灵奖,在颁奖典礼致辞中,他宣称:每个人都需要编程,因为这将是我们与仆人对话的方式。只需要十年的时间,就能打造出“全智能机器”。

其实,麦卡锡一直都只是把LISP看做一种手段,目的是达到他的主要目标:制造一台像人那样有智慧的机器。

我们后面可以看到,在人工智能历史上的第一个十年中,这种乐观无处不在。

参考文献:

[1]黑客与画家(Hackers & Painters: Big Ideas from the Computer Age);Paul Graham;译者:阮一峰;ISBN:9787115249494

[2]Google面试官Gayle McDowell:找一家能让你开心的公司(图灵访谈)http://www./article/66910

前文回顾(图灵系列)

50年代~60年代

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多