图灵奖系列 · 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与剑桥实验室的影响与人才输送。
🧩 易错点与澄清
-
“冯·诺依曼发明了计算机?”——不准确。 冯·诺依曼提出了关键理论,但具体机器的研制来自多个团队。Wilkes的贡献是把思想变成可靠的工程。
-
“子程序=函数?”——不完全等同。 今天的“函数”包含参数、栈帧、返回值等丰富结构。早期的“子程序”更多是一段可跳转的可复用代码块,调用与返回依赖约定与手工管理。
-
“微程序已经过时?”——过于武断。 虽然现代处理器采用更复杂的流水线、乱序与解码技术,但把复杂指令拆成内部微操作的思想仍广泛存在,很多架构仍以不同形式保留微码或等价机制。
💡 给今天开发者的启示
- 从最小可行出发(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
评论与补充