首页 百科正文

人工智能的开发语言(怎么开发语言智能)

有不少历史学家认为,著名诗人拜伦(见图4.1)的女儿阿达·洛夫莱斯(Ada Lovelace,见图4.2)是世界上第一位程序设计师。伟大的计算机先驱查尔斯·巴贝奇(Charles Babbage,见图4.3)在19世纪30年代,设计了一台蒸汽机驱动的机械式通用计算机——分析机(Analytical Engine)。1842—1843年,阿达·洛夫莱斯花了9个月时间,翻译了意大利数学家路易吉·费德里科·米纳布里(Luigi Federico Menabrea,见图4.4)的论文《查尔斯·巴贝奇发明的分析机概论》(Sketch of the Analytical Engine Inventedby Charles Babbage)。在论文之后,她增加了许多注记,其中详细说明了使用打孔卡片程序计算伯努利数的方法,这被认为是世界上的第一个计算机程序。因此,阿达·洛夫莱斯也被认为是世界上第一个程序员。顺便说一句,米纳布里后来成为意大利著名的将军和政治家,因为战功卓著,他先后被授予伯爵和侯爵爵位,并担任了意大利的第七任首相。

人工智能的开发语言(怎么开发语言智能)

图4.1 拜伦

人工智能的开发语言(怎么开发语言智能)

图4.2 阿达·洛夫莱斯

人工智能的开发语言(怎么开发语言智能)

图4.3 巴贝奇

人工智能的开发语言(怎么开发语言智能)

图4.4 米纳布里侯爵

与更关心计算的巴贝奇相比,阿达·洛夫莱斯对计算机的未来有更多的想象,她曾经预言:“这个机器未来可以用来排版、编曲或是各种更复杂的用途。”今天,阿达·洛夫莱斯的预言已经变成现实,全世界有无数的程序员和业余的编程爱好者,正在使用各种编程语言让计算机实现前人曾经梦想的一切,并使计算机变得越来越智能。本章将回顾计算机编程语言和开发工具的演化,重点会介绍在人工智能领域比较重要的语言和开发工具。

冯·诺依曼结构与汇编语言

1945年6月,冯·诺依曼发布了划时代的《关于离散变量自动电子计算机的草案》(First Draft of a Reporton EDVAC)。1946年6月,他进一步发表了《电子计算机逻辑设计初探》。这两篇论文奠定了现代电子计算机的体系结构,被称为“冯·诺依曼结构”。根据冯·诺依曼体系结构,计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成,采用存储程序的方式,程序由一系列指令构成,数据和指令一律用二进制数表示,计算机读入程序后按顺序执行每一条指令,如图4.5所示。计算机指令中的“循环”和“按条件跳转”等指令又保证了程序执行过程的灵活性。

人工智能的开发语言(怎么开发语言智能)

图4.5 冯·诺依曼体系结构

直到今天,世界上的绝大多数计算机,仍然是采用“冯·诺依曼结构”的“存储程序通用电子计算机”。如果对应到今天的计算机,简单地说,CPU对应于“运算器和控制器”,内存和硬盘对应于“存储器”,键盘和鼠标对应于“输入设备”,屏幕和扬声器对应于“输出设备”。在发展迅速的IT行业,“冯·诺依曼结构”至今已保持了70多年的生命力,让人不得不佩服冯·诺依曼深刻总结事物本质的天才能力。

最早期的程序设计通常使用机器语言。程序员们将用“0”“1”数字编成的程序代码打在纸带或卡片上,“1”即打孔,“0”即不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算。因为人们的大脑从小不习惯以“1000100111011000”这样的语言思考,计算机的先驱很快就创造了汇编语言,汇编语言将机器语言指令写成“Add AX,BX”“Loop”“End”这样人类易于阅读和思考的形式。(这三条汇编语句分别是“加法”“循环”和“终止”语句。)实现语言之间转换的编译器(Compiler)可以将汇编指令编译成计算机可以执行的二进制代码(见图4.6)。

人工智能的开发语言(怎么开发语言智能)

图4.6 编译器将汇编指令转化为机器码

Lisp语言与Prolog语言

1958年开始,后来被并称为“人工智能之父”的麦卡锡和明斯基在麻省理工学院组织了人工智能项目组,在人工智能这个新领域开始了卓有成效的探索。1960年4月,麦卡锡在《ACM通信》上发表了题为《递归函数的符号表达式以及由机器运算的方式》的论文。在这篇论文中麦卡锡介绍了他设计的Lisp语言。Lisp是“List Processor”的缩写,意思是表处理语言。

和它的创造者麦卡锡一样,Lisp是个性非常独特的语言,它和当时比较成功的Fortran、Cobol语言完全不同。麦卡锡原来的主要目标,是应用这样一种函数计算语言来研究图灵机的原理和阿隆佐·邱奇教授(Alonzo Church)的Lambda运算,并没有计划把它作为计算机的编程语言。但是在麻省理工学院当老师的好处就是手下总有几个天才学生,麦卡锡的学生史蒂芬·罗素(Steve Russell)根据他的论文,在IBM 704机上实现了第一个Lisp解释器,使得Lisp真正成为一个在计算机中可以运行的语言。史蒂芬·罗素在网络上的绰号是“蛞蝓”(Slug),他在电子游戏行业也是个先驱者,1961年,他和朋友利用PDP-1计算机,写出第一个电子游戏——Spacewar!。

Lisp语言推出之后,因为比起Fortran这类专注于科学计算的语言具备更强的符号处理能力,很快成为人工智能领域的重要语言。同时,Lisp中的递归、垃圾回收等创新机制,对后续的Java、Python等语言有很大的影响。

1972年,法国艾克斯-马赛大学(Aix-Marseille Université)的阿兰·科尔默劳尔(Alain Colmerauer)与菲利普·鲁塞尔(Phillipe Roussel)等人发布了Prolog语言,这是另一个在早期人工智能研究中较广泛使用的计算机编程语言。Prolog是Programming in Logic的缩写,它建立在逻辑学的理论基础之上,被广泛地应用于自然语言理解专家系统、智能知识库等领域。相对来说,欧洲和日本的学者使用Prolog的比例更大一些,日本雄心勃勃的第五代计算机系统,也将Prolog语言作为主要的开发工具之一。

UNIX操作系统与C语言

在计算机语言的发展史上,也许C语言是影响力最大的语言,从C语言演化而来的C++、Object-C、C#,至今仍是很多软件产品的主要开发语言,C语言本身也经久不衰,仍是很多计算机系统的底层核心设计语言。C语言伴随着UNIX操作系统诞生,贝尔实验室的丹尼斯·里奇(Dennis Richie)和肯·汤普森这一对黄金搭档(见图4.7)合作开发了C语言和UNIX操作系统。1983年,他们共同获得了图灵奖。

人工智能的开发语言(怎么开发语言智能)

图4.7 黄金搭档肯·汤普森(左)和丹尼斯·里奇

汤普森,1943年出生于新奥尔良,他的父亲是一名海军飞行员。汤普森从小喜欢组装各种无线电设备,后来进入加州大学伯克利分校学习电气工程。大学时,汤普森开始迷上了计算机编程,很快展露出这方面的天分,大学和研究生期间就开始受邀讲授自己选修的课程。毕业后,被伯克利的教授推荐到贝尔实验室工作。

里奇,1941年出生于纽约州的布朗克斯维尔,他的父亲是贝尔实验室的电气工程师。里奇进入哈佛大学后,本科学习的是物理,博士学的是数学,不过他博士答辩后却没有去拿博士学位。1967年,里奇加入贝尔实验室,和汤普森开始了几十年卓有成效的合作。

1969年夏天,汤普森的妻子带着他们的儿子去加州探亲,要一个月才回来。在这一个月中,在里奇的帮助下,汤普森开始在一台过时的PDP7小型机上编写UNIX,包括操作系统核心、外壳、编辑器和汇编程序4大部分,汤普森规定自己每周解决一个部分。硬件条件的限制反而确保了UNIX系统的精致、紧凑和简单,这为后来UNIX的流行打下了良好的基础。汤普森用汇编语言完成了UNIX的第一个版本,这也许是人类历史上拿汇编语言完成的最伟大的作品。

UNIX诞生后,汤普森希望UNIX有自己的编程语言。1970年,他在马丁·理查兹(Martin Richards)开发的BCPL语言基础上设计了B语言。1973年,里奇在B语言的基础上设计了C语言。关于C语言,最经典的书籍是里奇与布瑞恩·克尼汉(Brian Kernihan)合著的《C程序设计语言》,书的序言中写道:“根据我们的经验,C语言是一种令人愉快的、具有很强表达能力的通用语言,适合于编写各种程序。它容易学习,并且随着使用经验的增加,使用者会越来越感到得心应手。”C语言的特点包括简洁的表达式、流行的控制流和数据结构、丰富的运算符集。C语言性能出众,很适合用于操作系统、编译器等底层软件的编程,常被称为“系统编程语言”。后来里奇用C语言把UNIX重写了一遍,这也使得UNIX后来可以非常方便地移植到各种硬件之上。

UNIX以开放源代码的方式,迅速从贝尔实验室开始向外传播,各大学和公司纷纷推出了自己的UNIX版本。今天,UNIX的变种已经占据了从手机到巨型机的各个平台,智能手机上最流行的Android和苹果公司的i OS都是基于UNIX核心的操作系统。

从C语言演化出的语言中,C++是人工智能领域被广泛使用的语言,很多深度学习开源工具,比如Tensor Flow、Caffe和微软公司的CNTK都支持C++语言。苹果公司的Object-C,是苹果公司系列产品iPhone、iPad、Mac上的主要编程语言。微软的C#,是微软s平台上的核心编程语言。

汤普森和里奇也许可以算得上是史上最优秀的一批程序员了,因此,汤普森一段对话很值得今天无数渴望招募优秀程序员的老板们参考。

有人问:“你如何发现有天赋的程序员?”

汤普森回答:“只看他们的激情。你问他们做过的最有趣的程序是什么,然后让他们描述程序和它的算法,等等。如果他们经不住我的盘问,那么他们就不是好程序员……你可以感觉到他们是否有热情……我要求他们描述他们花费心血所做的东西。我从来没有遇到过花费心血做了事情的人不能热情洋溢地讲述自己做了什么,怎么做的,为什么要这么做。”

——END——

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://www.chinaai.com/baike/9834.html

发表评论

评论列表(0人评论 , 3951人围观)
☹还没有评论,来说两句吧...