图灵奖系列 · DoggyDad 原创

Maurice Wilkes:他建造了第一台实用计算机,发明了子程序,开创了微程序设计

Maurice Wilkes:他建造了第一台实用计算机,发明了子程序,开创了微程序设计

ANSWER-FIRST SUMMARY

本文回答什么问题

Maurice Wilkes:他建造了第一台实用计算机,发明了子程序,开创了微程序设计

  • 主题分类:图灵奖系列
  • 关键词:图灵奖、计算机历史、编程语言、操作系统、密码学
  • 人物实体:Maurice Wilkes

图灵奖第二届 | Maurice Wilkes:他建造了第一台实用计算机,发明了子程序,开创了微程序设计

一句话概括:他是计算机硬件的奠基人,让存储程序计算机从理论变成了现实

🏆 获奖简介

Maurice Vincent Wilkes(莫里斯·威尔克斯)爵士是英国计算机科学的奠基人

  • 出生时间:1913年6月26日
  • 出生地点:英国斯塔福德郡达德利
  • 获奖年份:1967年
  • 获奖原因:在计算机设计、存储程序概念实现和子程序库开发方面的突破性贡献

为什么他是第二位? 因为他是继Alan Perlis之后,第二位获得图灵奖的计算机科学家,他的EDSAC计算机证明了存储程序计算机的可行性。

🚀 他的重大贡献

1. EDSAC计算机:第一台实用的存储程序计算机

简单理解:EDSAC就像第一辆能真正上路的汽车,证明了计算机可以按照程序自动运行,而不需要人工干预。

Wilkes的贡献

  • 背景:1940年代,计算机还只是理论概念,大多数是手动操作的。
  • 成就:1949年5月6日,Wilkes在剑桥大学建造的EDSAC(Electronic Delay Storage Automatic Calculator)首次成功运行,这是世界上第一台实用的存储程序计算机。
  • 技术特点:采用冯·诺依曼架构,使用水银(汞)延迟线作为存储器,能存储和执行程序。

为什么重要? EDSAC不仅证明了存储程序计算机的可行性,还被实际用于科学计算,推动了计算机从实验室走向实际应用。没有EDSAC,我们的计算机时代可能要晚很多年。

2. 子程序库:编程的”乐高积木”

简单理解:子程序就像编程中的可重用模块,让程序员不用重复造轮子。

Wilkes的贡献

  • 发明时间:1951年,与David Wheeler和Stanley Gill合作
  • 具体内容:创建了世界上第一个子程序库,允许程序员重用代码片段
  • 影响:这本书《电子数字计算机的程序准备》成为编程的经典教材

为什么重要? 子程序库的概念是现代软件工程的基础。它让编程从”手工打造”变成了”模块化组装”,极大地提高了开发效率。今天所有的编程语言都支持函数和模块的概念,都源于这个发明。

3. 微程序设计:处理器控制的革命

简单理解:微程序设计就像给计算机大脑安装了一个”翻译器”,让复杂的指令变得更容易实现。

Wilkes的贡献

  • 提出时间:1951年
  • 核心思想:将复杂的机器指令分解为更简单的微指令序列
  • 应用:被IBM System/360等计算机广泛采用

为什么重要? 微程序设计让处理器设计更加灵活高效,影响了从1960年代到1980年代的计算机架构。今天虽然微程序已演变为其他技术,但它的思想仍然影响着现代处理器设计。

4. 计算机教育与著作:奠定学科基础

Wilkes的贡献

  • 教科书:1951年出版《程序设计:电子数字计算机的准备》,这是第一本编程教科书
  • 研究:在存储器层次结构和缓存设计方面做了开创性工作
  • 晚期贡献:参与早期计算机网络研究

为什么重要? 他的著作不仅教育了第一代程序员,还建立了计算机科学的教学体系。他的工作让计算机科学从工程实践变成了有理论基础的学科。

🌍 对世界的深远影响

证明了存储程序计算机的可行性

EDSAC的成功让全世界相信,计算机可以按照程序自动运行,这加速了计算机技术的普及。

开创了软件复用时代

子程序库的概念是现代软件工程的起点,让编程变得更高效、更模块化。

影响了处理器设计几十年

微程序设计技术被广泛应用于大型计算机,对计算机硬件发展产生了深远影响。

建立了计算机科学教育体系

他的教科书和教学理念影响了全球计算机科学教育。

🏆 获奖理由

ACM官方表彰:“表彰他在计算机的设计和构造,以及子程序库的开发方面的成就。”

更通俗的理解:他不仅建造了第一台真正实用的计算机,还发明了让编程更高效的方法,让计算机从”玩具”变成了”工具”。

历史意义:作为第二位图灵奖得主,他延续了Perlis的传统,证明图灵奖不仅奖励理论突破,也奖励实际的技术实现。

👤 个人生平与传奇

生平时间线

  • 1913年:出生于英国斯塔福德郡达德利
  • 1930年代:在剑桥大学学习数学
  • 1940年代:参与英国计算机项目,开始EDSAC设计
  • 1949年5月6日:EDSAC首次成功运行
  • 1951年:提出微程序设计,出版编程教科书
  • 1967年:获得图灵奖
  • 1980年:从剑桥大学退休,加入DEC公司
  • 2010年11月29日:在剑桥逝世,享年97岁

人格魅力

Wilkes不仅是杰出的工程师,更是一位:

  • 务实的创新者:总是将理论与实践相结合
  • 优秀的导师:培养了许多计算机科学人才
  • 谦逊的学者:以实际贡献而非理论著称

经典语录

Wilkes曾说:

“计算机科学的发展需要理论与实践的平衡。”

💭 为什么他值得纪念?

1. 技术实现的典范

他是将计算机从理论变为现实的第一人,他的EDSAC证明了存储程序计算机的可行性。

2. 持续的技术影响

他的贡献构成了现代计算机的基础:

  • 每当你使用计算机,都在受益于存储程序的概念
  • 每当你写代码,都在使用子程序的思想
  • 每当你学习计算机,都在读他的教科书的影响

3. 精神遗产

他证明了工程师的重要性:

  • 实践精神:理论必须能落地
  • 创新思维:从小发明做起
  • 教育情怀:培养下一代技术人才

总结语:Maurice Wilkes不仅是计算机硬件的先驱,更是理论与实践结合的典范。他用EDSAC证明了计算机的潜力,用子程序改变了编程方式,用微程序设计影响了处理器发展。作为图灵奖第二人,他的意义在于让计算机科学从”可能”变成了”现实”。

🧭 时代背景:从战争到计算的黎明

二战的尾声与新需求

20世纪40年代后期,世界从战争转向重建。科学家在雷达、密码破译和弹道计算中积累的电子技术,迫切需要一种通用的、可复用的计算工具。此前的机器(如ENIAC)虽然强大,但更多依赖插线板和手动设置,变更任务成本极高。

存储程序思想的落地

冯·诺依曼报告提出“存储程序”的核心思想:程序和数据放在同一内存中,机器可以像处理数据一样处理程序。这个思想奠定了现代计算机的理论基础,但真正让它落地生根的,是像EDSAC这样的工程实践。

为什么不是“第一台”?但却是“第一用得上”

在EDSAC之前,曼彻斯特“Baby”在1948年成功运行了第一段存储程序,但它更像原型验证。EDSAC的不同之处在于:它从一开始就被设计为服务科学家、帮助研究的“公用计算机”,能够稳定、持续地为用户提供计算服务,这使它成为“第一台实用的存储程序计算机”。

🔧 EDSAC 深入拆解:一台可以“排队用”的计算机

1) 硬件理念:工程可行优先

Wilkes坚持“尽快提供服务”的工程理念。他选择当时成熟的水银延迟线存储技术,哪怕它并不完美,但足够稳定。设计中的每一个选择,都围绕“简单、可靠、可维护”展开。

2) 存储器:水银延迟线是如何工作的?

水银(汞)延迟线通过声波在水银中的传播实现数据的暂存。电子信号被转换为声脉冲注入水银管道,经过固定时间延迟后再被读出并重新注入,从而形成循环。这种方式功耗高、体积大,但在当时的工艺条件下是可靠且可实现的。

3) 指令与数据同内存:程序像数据一样被操作

EDSAC严格实践了存储程序的思想。程序可像数据一样被装载、保存、修改,编写“自动化程序”成为可能。这为后来编译器、操作系统、调试器等软件工具的诞生创造了条件。

4) 输入输出:纸带、打印机与“批处理”的雏形

用户用纸带打孔输入程序,计算完成后由打印机输出结果。EDSAC团队建立了“作业排队”的运作模式——这就是最早期的批处理思路:集中提交、统一调度、顺序运行。

5) 初始指令(Bootstrap):从无到有的“自举”

EDSAC设置了简短的“初始指令”(Initial Orders),相当于一个极小的引导加载程序,用以从纸带读入更大的程序。这是“自举”(bootstrap)的最早工程实践之一。

6) 真实应用:让科学研究第一次“算得起”

EDSAC很快为剑桥的物理学、生物学、天文学等学科提供计算支持。例如:

  • 天体力学中的数值积分
  • 遗传学中的概率模拟
  • 微分方程的数值求解 这让计算机从“实验室玩具”变成了“科研工具”。

🧩 子程序库 细说:从“重复劳动”到“模块复用”

1) 为什么会想到“子程序”?

在没有子程序之前,程序员为不同程序反复编写同样的代码段,既低效又容易出错。Wilkes与Wheeler、Gill意识到:这些通用功能完全可以抽离出来,作为“随取随用”的库。

2) Wheeler 技巧:早期的“调用约定”

最初的机器没有“堆栈”“返回地址寄存器”这些现代设施。为了实现“调用—返回”,团队发明了巧妙的约定(俗称“Wheeler Jump”):调用方将返回地址写入子程序预留的位置,子程序末尾再跳回该地址。虽然原始,却极具工程美感。

3) 库的组织与分发:用纸带“包管理”

子程序以纸带形式分发,附带文档说明“输入是什么、输出是什么、使用注意事项”。这与我们今天的包管理器(如各语言的标准库与第三方库)有异曲同工之妙。

4) 对软件工程的启示

  • 复用优先:写一次,多处用
  • 接口优先:清晰的输入输出契约
  • 文档优先:没有文档等于没有库 这些朴素原则,构成了现代软件工程的三块基石。

🧠 微程序设计 深入:把“复杂指令”分解成“微操作”

1) 问题出在哪里?

随着指令集变得复杂,硬接线控制逻辑越来越臃肿、难以更改且容易出错。Wilkes提出:不如把控制逻辑写成一段“更底层的程序”,存入只读的控制存储器——这就是“微程序”。

2) 水平与垂直微码

  • 水平微码:一条微指令直接控制多条硬件信号,执行并行度高,但编码冗长
  • 垂直微码:微指令更像“宏指令”,需要解码后再驱动硬件,编码紧凑但并行度低 不同机器在二者之间权衡取舍,形成了丰富的实现流派。

3) 控制存储与微序列器

微程序存放在“控制存储器”中(早期多为二极管阵列、磁芯、后期为ROM/PLA)。“微序列器”负责按条件跳转、循环等方式推进微指令序列,使复杂的机器指令以“微指令流程图”的方式被执行。

4) 工程收益:可维护、可移植、可扩展

  • 维护:修改微程序即可修复控制逻辑缺陷
  • 兼容:在同一硬件上实现多个指令集的兼容(历史上广为采用)
  • 扩展:通过新微程序,引入新指令或优化热点路径 这为后来大型机和商用系统的快速演进提供了强大支撑。

5) 代表性应用:EDSAC 2 与 System/360

EDSAC 2把微程序从理念带入工程实践,展示了复杂控制逻辑可被“程序化”管理的强大优势;IBM System/360则在产业规模上普及了微代码,让一整个产品线实现指令级兼容,重塑了计算机工业版图。

🏫 教育与学术共同体:一所实验室影响半个世纪

1) 剑桥计算机实验室的传统

Wilkes长期领导剑桥大学计算机实验室,形成“工程先行、理论支撑”的传统。这里走出了David Wheeler、Roger Needham、Andy Hopper等一批计算机科学家。

2) 《程序设计:电子数字计算机的准备》

这本1951年的小册子,像是早期的“程序员手册”。它从如何组织程序、如何调用子程序、如何管理纸带与输入输出等细节入手,首次把“编程”系统地教授给非电子工程背景的学生。

3) 时间共享与操作系统思想

在随后几十年中,Wilkes关注计算资源的共享与交互使用,推动时间共享系统理念的传播。他撰写了关于时间共享的教材,强调交互式计算的重要性,这影响了后来的操作系统设计与人机交互研究。

4) Cambridge Ring:早期局域网探索

在网络领域,剑桥团队提出了环形令牌传递的局域网结构(Cambridge Ring)。它在工程上探索了“确定性共享介质”的思路,为随后各类局域网技术(包括令牌环与以太网的竞争与互鉴)提供了宝贵经验。

⚖️ 与同时代机器的对照:他真正解决了什么?

ENIAC vs. EDSAC

  • ENIAC:以十进制运算和插线板为主,任务切换代价高
  • EDSAC:程序与数据同存,切换任务只需装入新程序 → EDSAC让“通用计算”从口号变为现实。

Manchester Baby/Mark I vs. EDSAC

  • Baby:概念验证性质更强
  • EDSAC:强调稳定运行与服务科研 → EDSAC的“可服务性”与“可维护性”成为后续计算中心的范式。

LEO I(莱昂)与商用应用

英国的LEO I把存储程序思想用于商业管理,但其背后的技术文化土壤,离不开EDSAC与剑桥实验室的影响与人才输送。

🧩 易错点与澄清

  1. “冯·诺依曼发明了计算机?”——不准确。 冯·诺依曼提出了关键理论,但具体机器的研制来自多个团队。Wilkes的贡献是把思想变成可靠的工程。

  2. “子程序=函数?”——不完全等同。 今天的“函数”包含参数、栈帧、返回值等丰富结构。早期的“子程序”更多是一段可跳转的可复用代码块,调用与返回依赖约定与手工管理。

  3. “微程序已经过时?”——过于武断。 虽然现代处理器采用更复杂的流水线、乱序与解码技术,但把复杂指令拆成内部微操作的思想仍广泛存在,很多架构仍以不同形式保留微码或等价机制。

💡 给今天开发者的启示

  • 从最小可行出发(MVP):EDSAC优先选择可落地的技术路径
  • 重视复用与接口:子程序库的“契约精神”值得反复咀嚼
  • 用“程序化”驯服复杂性:微程序把复杂控制转化为可管理的软件
  • 建设共同体:期刊、教材、实验室文化决定学科的长期生命力
  • 把技术做成“服务”:EDSAC的队列与批处理思路,今日仍体现在云计算的作业调度中

🗂️ 时间线(扩展版)

  • 1913:出生于英国达德利
  • 1930年代:剑桥学习并加入无线电研究
  • 1940年代:参与早期电子计算研究,筹划EDSAC
  • 1949年5月6日:EDSAC投入使用,开启”公用计算服务”模式
  • 1951:提出微程序设计;与Wheeler、Gill出版子程序与程序准备的经典教材
  • 1950-60年代:推动存储层次、缓存等思想;打造实验室文化
  • 1967:因在计算机设计与子程序库方面的贡献获图灵奖
  • 1970年代:支持Cambridge Ring等网络研究
  • 1980:退休后加入DEC研究,持续活跃
  • 2010年11月29日:逝世于剑桥

📚 推荐阅读与资料

  • Maurice V. Wilkes:《Memoirs of a Computer Pioneer》——回忆录,见证早期计算机诞生
  • Wilkes, Wheeler, Gill:《The Preparation of Programs for an Electronic Digital Computer》——子程序与程序组织的奠基之作
  • 历史综述:剑桥大学计算机实验室档案、ACM与IEEE历史回顾文章

🧪 小案例:如何把“子程序思维”用到今天?

以数据处理为例:

  • 抽象出“读源数据—清洗—转换—验证—写入”的通用流程
  • 为每一步提供标准输入输出与错误约定
  • 以库形式发布,并配套文档与示例 → 这就是Wilkes倡导的“复用—接口—文档”三位一体的现代化实践。

🙋 常见问答(FAQ)

Q1:EDSAC为什么不用更先进的存储技术? 当时“更先进”往往意味着“不够成熟”。Wilkes选择能快速稳定上线的方案,以便尽早服务科研。

Q2:微程序会不会降低性能? 视实现而定。微程序提供了可维护性与灵活性,性能可通过并行微码、缓存和专用通路等手段优化。

Q3:子程序与现代库管理有什么联系? 逻辑上高度一致:把常用能力抽象为模块,形成标准接口与文档,供他人复用。

Q4:Wilkes在网络上的工作重要吗? 他本人更偏工程组织与方向引导,但Cambridge Ring的探索为后续网络技术提供了重要工程经验。

🧾 致敬:工程的温度与学科的脊梁

阅读Wilkes的故事,你会发现两个关键词:

  • “把可能做成现实”
  • “让复杂可被管理”

他的工作提醒我们:计算机科学不仅是公式与电路,更是面向人的服务,是可被组织、可被复用、可被传承的“集体工程”。当我们在云端提交一份作业、在包管理器中安装一个库、在处理器里运行一条复杂指令时,都在与这位老人的思想悄然握手。

DISCUSSION

评论与补充