作者 | 年素清

责编 | 李雪敬

出品 | 程序人生(ID:coder_life)

艾伦·凯(艾伦 Kay)是近代计算机革命先驱之一,他最早提出了“面向对象编程”的概念,也是“Dynabook”(笔记本电脑的雏形)的最早阐述者。

他是一个真正意义上的全才,不仅是工程技术方面的专家,还在儿童发展理论、认识论、分子生物学等领域颇有建树,他擅长将它们融合在一起,在知识的交汇点上挖掘出更具价值的东西。此外,他还是个发明家。

艾伦有一句广为人知的名言:“预测未来的最好的办法就是创造未来。”

艾伦·凯,图片来自维基百科

首次提出“面向对象”

艾伦于 1940 年出生在美国马塞诸塞州。1岁时,全家随父亲迁往澳大利亚,世界第二次世界大战爆发后,又迁回美国。

艾伦3岁就可以阅读,家里有 6000 本书和大量的绘画。大量的阅读使得童年时期的艾伦就有了自己独立的观点,他说:“到我上学的时候,我已经读过几百本书。那时我已经有了许多自己的观点,我知道一年级所教的许多东西都很幼稚和虚假。当然我已经可以用五岁的声音维护自己的观点。”

1960 年,艾伦进入 Bethany 大学就读,但在一年之后,他就因抗议学校对待犹太人的不公问题而被学校开除。退学后的艾伦加入志愿兵服务队,在军队的一次计算机的能力倾向测试中,艾伦因为表现出众而被美国空军派遣到 IBM K101 工作。正是在那里,艾伦学习到了大量计算机有关的知识。

从军队退伍后,艾伦被科罗拉多大学录取,攻读数学和分子专业,毕业后进入犹他大学学习电气工程。

在犹他大学,艾伦开始使用由 1988 年图灵奖获得者伊凡·苏泽兰(Ivan Sutherland)开发的 Sketchpad 程序,结合 Simua 仿真语言编写程序。当时的计算机是个非常罕见的物件,那个时代的程序员使用一堆别人看不懂的字符工作,因为更高级的语言还没有被开发乃至推广。

随着对计算机接触的深入,艾伦开始思考计算机和编程。受这些程序思想的启发,再加上自己生物学的背景,他提出了“生物学类比”理论。艾伦假定理想的计算机将象生物体一样工作,为完成某个任务,每个“细胞”都要与其它“细胞”协同完成,而每个“细胞”又有自己的功能。为了解决另外的难题或试验另外的功能,“细胞”们可以实现重组,这一理论成为面向对象程序设计的萌芽。他的博士毕业论文也是围绕图形面向对象方面的研究展开。

 “计算机就像一种超级纸张”

1968 年,艾伦在 MIT 人工智能实验室见到了 Logo 语言的创始人西蒙·派珀特(SeymourPapert),派珀特和同事们向孩子们演示如何使用 Logo。艾伦看完之后,他之前对于计算机的认识受到极大冲击,艾伦后来回忆起这段经历说:“我看到了第一个真正的手写体识别系统。这是一套今人难以置信的系统。它对我产生了巨大影响,因为我有种心有灵犀的感觉。当我将这些观念综合起来,计算机的概念就象是一种超级媒体,一种超级纸张。”

从这以后,艾伦开始学习 Logo 语言。

 推动苹果 Mac 机的诞生

1971 年,艾伦进入 Xerox PARC(施乐帕克研究中心)开始参与 Alto 计算机的开发。当时的位图显示器十分昂贵,艾伦成功说服 PARC 让他使用这些位图显示器,这使得艾伦和他的团队能够实现不同大小和字体的文字,使用多窗口环境,以及一些对图像处理的高端支持。基于这些操作,艾伦最后发明了重叠窗口、图标等图形用户界面。

1979 年,艾伦邀请史蒂夫·乔布斯(SteveJobs)、杰夫·拉斯金(Teff Raskin)以及其它苹果公司的元老们来到 PARC 参观,乔布斯一行人对艾伦的视窗图形用户界面非常感兴趣,他们认为这就是未来的电脑。

1984 年,在乔布斯的极力邀请下,艾伦加盟苹果。同年,苹果推出 Macintosh 计算机(就是我们所知的Mac机),首次将图形用户界面应用到个人计算机之上,引起计算产业界的巨大轰动。

面向对象之父与移动计算机之父

1968 年,艾伦受派珀特启发,他构想出一台像书本一样大小的计算机,用户尤其是儿童可以用它来代替纸张,他将这个项目称之为“Kiddie Komp”,并在此基础上提出了“Dynabook”的概念,后来在 1972 年一篇名为《适合各年龄段儿童的个人计算机》的论文中发表了这个概念。“Dynabook”后来演变成了今天的超薄笔记本电脑。

为了将 Dynabook 的想法落地,艾伦开始着手 Smalltalk(面向对象的程序设计语言)的研发。之后,他率领团队对 Smalltalk 的执行效率和规模进行了优化,他们引入了继承和子类的概念并确定了语言的语法,这使得编译器能够产生高效、可执行、精炼的二进制代码,这些概念的引入使 Smalltalk 成为最早的面向对象语言。艾伦因此被誉为“面向对象之父”,2003 年4月,美国计算机学会(ACM)将当年的图灵奖授予了艾伦,以表彰他和他的 Smalltalk 语言。

此外,Smalltalk 吸取了 Mac 机原型的优秀经验,能够通过高度便携的联网方式,以编辑、授权的形式模拟所有现有媒体。1993年,苹果推出世界上第一款掌上电脑“Apple Newton”,终于将 Dynabook 理念成为了现实。艾伦也因此被后人称为“移动计算机之父”。

 “计算机革命并未真正发生”

尽管计算机自诞生之日到艾伦的时代经历了翻天覆地的变化,但是他却认为计算机革命并未真正发生,软件工程正在向和摩尔定律相反的方向发展,当硬件容量逐年递增的时候,软件则在无谓地持续膨胀,而背后的原因可能是虚弱而难于扩展的思路和工具、懒惰和缺少知识等。

当时有首搞笑的单行诗:“Andy 给予的一切,都被 Bill 夺走”。指的是每当 Intel 的 CEO 安迪·葛洛夫(Andy Grove)推出一款性能更高的芯片,微软的 CEO 比尔·盖茨(Bill Gates)都会通过升级软件使新硬件带来的更高性能消失于无形。

为了改善当前软件开发的窘境,艾伦领导了向着彻底改造编程技术的 STEP 研究课题,目标是实现摩尔定律在软件代码表达效率上的飞跃,途径是把开发系统所需要编写的代码量减少到原先的百分之一、千分之一、万分之一甚至更少。

2011 年,艾伦指出软件工程已陷入停滞,成为了迷失的学科,无法跟上硬件和其他科学技术领域发展的步伐。巨大的代码库已经沦为了一个垃圾场,大到任何人都无法看懂产生 Vista 或者 Word 的1亿行源代码,而本来只需要一小部分代码就够了。

参考链接:

https://baike.baidu.com/item/%E8%89%BE%E4%BC%A6%C2%B7%E5%87%AF/10709189?fr=aladdin

http://www.gerenjianli.com/Mingren/28/o5o1idm8om.html

http://media.people.com.cn/n1/2019/0510/c14677-31077446.html

更多精彩推荐
☞12306 背后的技术大牛:我不跟人拼智商,我就跟他们拼狠!
☞融资 2000 万美元后,他竟将核心代码全开源,这……能行吗?
☞鸿蒙加海思,麒麟加龙芯,组合拳能否渡劫“生态”危机
☞用 Python 详解《英雄联盟》游戏取胜的重要因素!
☞2020 年最厉害的 10 门编程语言
☞“善”用区块链:善是初心,链是保障
点分享点点赞点在看

身为面向对象编程、移动计算机之父的他,为何说“计算机革命还没真正到来”?...相关推荐

  1. php控制器面向对象编程,PHP 面向对象编程(2)

    一些内建方法: class Person { public $isAlive = true; function __construct($name) { //这里我们创建了一个name的属性 $thi ...

  2. python定义一个人类_python基础课程 第9章 面向对象编程(上) 一场人类进化史

    日月灿烂,若出其中,星汉灿烂,若出其里. -- 曹操.观沧海 东汉末年 人类文明以降,总会有无数的人通过对世界的观察和思考去总结我们从哪里来,要往哪里去. 遥远的古代我们的祖先通过想象力把数字变成了符 ...

  3. 【面向对象编程】(4) 类的继承,重构父类中的方法

    各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...

  4. C#编程概念系列(一):面向对象编程

    系列文章索引目录:http://www.cnblogs.com/loner/archive/2013/05/09/3068211.html 引子: 面向对象编程:这个在当下已不是什么时髦的概念,但通过 ...

  5. ruby 新建对象_Ruby面向对象编程的简介

    ruby 新建对象 by Saul Costa 由Saul Costa Object-oriented programming (OOP) is a programming paradigm orga ...

  6. 面向对象编程概念_如何向6岁的孩子解释面向对象的编程概念

    面向对象编程概念 by Alexander Petkov 通过亚历山大·佩特科夫(Alexander Petkov) Have you noticed how the same cliche ques ...

  7. 如何通俗的理解面向对象编程

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:磐创AI 面向对象编程或OOP对于初学者来说可能是一个很 ...

  8. 我问占小狼到底什么是面向对象编程?他转头就走。

    你好,我是 yes. 面向对象编程想必大家都耳熟能详,但是写了这么多代码你对面向对象有清晰的认识吗? 来看看这几个问题: 到底什么是面向对象编程? 和面向过程编程有什么区别? 什么又称为面向对象语言. ...

  9. python面相对象编程指南_Python面向对象编程指南

    抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...

最新文章

  1. 2017-2019年全国大学生智能汽车竞赛获奖数据分析
  2. 基于按annotation的hibernate主键生成策略
  3. 【SSH网上商城项目实战05】完成数据库的级联查询和分页
  4. 『JavaScript』核心
  5. 也谈如何构建高性能服务端程序
  6. 常用的python测试脚本_详解Python的单元测试
  7. Oralce 时间TIMESTAMP的比较
  8. 斗鱼上市首日低开平收 总市值37.3亿美元
  9. 提高Android Studio运行、编译速度方案
  10. java数据区_Java运行时数据区域介绍
  11. python csv 格式文件导出 中文乱码问题解决方法
  12. 车牌字符识别算法原理
  13. kafka消费者报错:Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
  14. iOS UIWebView的基本用法
  15. c语言用星号输出大写字母H,如何在C语言中用星号或自定义字符打印方形图案
  16. android屏幕 录制检测,Android 录制屏幕的实现方法
  17. day34-WEB框架
  18. 【UOJ311】【UNR #2】积劳成疾
  19. mysql8之MGR
  20. 关于vscode安装包下载太慢解决方法(详解)

热门文章

  1. memcache缓存失效
  2. 区域链实践第一步——区域链测试环境搭建
  3. 普通帧,关键帧,空白关键帧的区别
  4. 余承东安卓鸿蒙,鸿蒙亮点多,网友嗨了!华为P50还没定,余承东:最强大操作系统...
  5. php mysql zend linux_在Linux系统中安装Apache+MySQL+php+phpMyAdmin+Zend
  6. 2020-10-09
  7. 自动驾驶汽车数据闭环方法分析
  8. Python+Anaconda中库的安装
  9. Linux服务之Samba服务篇
  10. idea(2)快捷键