阿伦凯(Alan Kay)

我过去给大家介绍过sun公司的神人Bill Joy(《Bill Joy》),今天我也给大家介绍另外一位神人:Alan Kay。

这位老兄母亲是音乐家,父亲是设计假肢的生理学家,父亲一直有个梦想:那就是设计出人工智能控制的假肢。阿伦凯是学校唱诗班的童声高音独唱,还是一名十分出色的吉他手,他曾经梦想过很多职业:如医生、音乐家、甚至哲学家,没想到在美国越战时当志愿兵服务的时候,在一次计算机能力潜力测试中表现出众,被军队安排去搞计算机了。

退伍后,阿伦凯被科罗拉多大学录取,学习数学和分子生物专业。毕业后他又进入犹他大学学习电气工程。在犹他大学拿到博士学位后,他到斯坦福大学人工智能实验室担任教学工作。1971年,他加入施乐实验室。

有电气工程博士专业的人可能会干出点啥事呢?肯定想搞个集成电路板之类的东西啊。有数学+人工智能+生物学专业的人可能会干出点啥事呢?肯定想搞个人工智能的东西啊。

IT业界有句著名的话叫:预测未来最好的方式,那就是把它创造出来。对,这句话就是阿伦凯说的。所谓神人就是:要有光,于是光就有了。就这么简单。

说干就干。

其实我们回顾阿伦凯干的事,我们会惊讶地发现:他其实是想把日本政府曾经在1986年-1991年之间搞的以人工智能为核心的第五代计算机体系,凭他一人之力全搞出来。这就是神人的想法。

不过也不怪阿伦凯这么想。因为当时大家都好像有能力制造计算机。当时IBM和七个小矮人还存在,通用电气、霍尼韦尔这些强电气厂商也都在制造计算机,当时强电气、弱电气、微电子、计算机并没有分家太严重。你看乔布斯在1976年搞个人计算机的时候也是自己把Intel CPU芯片焊到集成电路板上。所以1971年的阿伦凯也是撸起袖子就干。

要知道IBM是1964年才发布革命性的S/360大型计算机,有了世界第一款现代意义上的操作系统。而在1971年,可移植性的编程语言C语言还没产生呢(当然Unix也没产生呢)。

阿伦凯先搞了一个计算机硬件:Alto,这可以称得上个人电脑的前身。因为阿伦凯的终极梦想是做人工智能硬件,和他父亲一直研究的假肢一样,以后计算机是要穿戴到人们身上的,所以他一直的追求是:做2磅以内的计算机硬件。所以,个人电脑-笔记本电脑-平板电脑-智能手机-可穿戴智能设备,其实都是他老人家曾经就想到的。

计算机是有了,但是这个计算机的运行速度很慢,所以他们编程的时候还是使用DEC的小型机在编程,想着编写完了再移植到Alto这个小计算机上。但是当时也没有可移植性的C语言供他们使用(还没发明呢),于是他们想啊想啊:怎么把小型机编写的程序容易移植到连个人电脑都不如的Alto上呢。

于是他们天才般地想出了一个方法:搞个类似虚拟机的东西,这个虚拟机能屏蔽下层硬件的差异,向上提供统一的方式。这样不就一次编程到处运行,连移植都不需要移植了啊。

对,世界上第一个基于虚拟机的编程语言就这样诞生了:Smalltalk。这是1972年的事情了。而Java编程语言和JVM虚拟机,那已经是1995年的事情了。而Java当年搞虚拟机,也是为了响应日本政府以人工智能为中心的第五代计算机体系战略,搞智能家电,为了屏蔽家电硬件的千差万别而统一编程,Java才采用了阿伦凯的虚拟机机制。而阿伦凯发明编程语言虚拟机,也是为了屏蔽小型机和个人电脑的硬件差异性。我想了想,Java后来分为J2ME版本、J2SE版本、J2EE版本,不就是这个意思吗。

但是,等等,虚拟机的作用是:向下屏蔽下层硬件的差异,向上提供统一方式。咦,这不就是操作系统要干的活儿么?

嘿嘿嘿,在当时,硬件、操作系统、虚拟机、编译器、高级编程语言之间的边界还没那么清晰。其实按本质来说:操作系统不也是软件化的计算机么,虚拟机的本质不也是软件化的计算机么。嘿嘿嘿,你这么一想,你就能想明白起家搞个人电脑上的BASIC编程语言解释器的盖茨为啥后来搞了操作系统(当然也有IBM的机遇给他),你这么一想,你也就能想明白当年NT研发项目负责人保罗马里茨后来离开微软到了虚拟化技术公司VMWare(当然,编程语言虚拟机技术和操作系统虚拟化技术是两个技术,大家千万不要混淆)。

其实计算机这个东西吧没大家想的那么复杂,核心就两个:计算和存储。计算就是如何调度CPU的计算器,存储就是如何管理多级存储(寄存器-内存-外存)。而现代意义上的操作系统除了管理计算和存储这两大核心资源以外,其实是个大管家,还管和存储密切相关的文件系统,和外存类似相关的其他输入输出IO外设设备(通过IO驱动程序来连接和操控)。操作系统把这些硬件资源都管理起来,通过统一规范的API向上层提供统一支持,上层应用编写的时候简单调用API就能控制这些硬件资源和文件系统了。当然,对于普通人来说不会通过API进行编程,那他们咋办?

嘿嘿嘿,所以咱们绕了这么大一个弯子,又绕回到阿伦凯了。他也想到了这个问题。于是,神说要有GUI,于是就有了GUI。对,乔布斯和盖茨到施乐实验室去参观图形界面,就是参观阿伦凯的发明。所以说阿伦凯是GUI的发明人。

这家伙发明了GUI图形界面、Smalltalk编程语言、语言虚拟机还不够。

大家要知道,咱们看到的GUI上的输入框、按钮、菜单,在计算机这个硬件眼里它根本不认识,它的输出屏幕外设就把这所有一切都认为是一个个像素点。这些无数个细小的像素点排列组合在一起,先构成了简单的线段,然后又构成了更近一步复杂的正方形长方形、圆形、三角形,这些正方形长方形圆形三角形又更进一步构成了复杂的输入框、按钮、菜单。

如果让你编写GUI程序,从像素组成线段进而组成长方形进而组成输入框,你愿意不愿意?你当然不愿意了,因为这太麻烦了。对,阿伦凯也是这么想的。所以他搞了很多基本函数库,把这些像素组成线段等等基本操作都封装起来,你一调用就可以很容易画出一个长方形甚至一个输入框。

但是光有函数库,编程还是不方便,都是一堆函数调来调去,太复杂了。有没有更自然的一些方法呢?阿伦凯想:既然我操作的都是一个个输入框、按钮、菜单,那我何不把它们都当做一个个整体来看待,里面的细节我就不关心,我只对这一个个整体进行操作。

嗯,好。为了简化编程实现他的想法,他改造了Smalltalk编程语言语法和编译器,于是:面向对象编程范式-面向对象编程语言产生了。当然Smalltalk不算世界上第一个面向对象编程语言,面向对象编程语言的鼻祖应该是1962年产生的Simula。后来1980年发明的C++就是借鉴Simlua的,而Apple公司的Object C和Sun公司的Java是借鉴Smalltalk的。嘿嘿嘿,各位看官,为啥Apple公司的Object C是借鉴Smalltalk的呢?因为世界上第一个GUI图形界面就是Smalltalk编程语言实现的啊,苹果公司的GUI图形界面电脑就是参考的施乐实验室阿伦凯的发明啊。

嘿嘿嘿,有了Alto计算机、GUI图形界面、Smalltalk面向对象编程语言和编译器、编程函数库类库、字节码虚拟指令集和语言虚拟机,这还不算完。

因为阿伦凯不仅想用Smalltalk编程语言编写GUI图形界面,他还想让Smalltalk编程实现可视化。嘿嘿嘿,世界上第一个可视化编程和IDE产生了。

但是,有了图形化的应用程序界面,那和后台的应用逻辑怎么关联上呢?这点大神早就给你考虑好了。因为大神又发明了MVC架构模式和代码框架。

你瞧大神给你准备的这桌饭:

  • 可视化编程-图形界面

  • MVC架构模式-类库框架

  • IDE集成开发环境、Smalltalk面向对象编程语言-编译器

  • 字节码虚拟指令集-语言虚拟机

这是1976年的事了。

大家如果不了解历史,会觉得很多都是创新。但是在我看来,计算机行业的创新,在70年代已经结束了。太乏味了,大家都是一遍遍地重写,以为比过去更好比过去更轻巧,其实发展到后来:屠龙的勇士仍然变成了恶龙,你仍然变成了你最讨厌的那类人。曾经你说:我才和你不一样呢。但是到了后来你还是说:唉,原来我和你还是一样。

阿伦凯(Alan Kay)_第1张图片

你可能感兴趣的:(阿伦凯(Alan Kay))