【信奥业余科普】02:给机器注入灵魂的两位天才——图灵与冯·诺依曼
第二篇信奥基础知识科普:了解“计算机科学之父”图灵与“现代计算机之父”冯·诺依曼的伟大构想,以及现代计算机体系结构的基础奠定。
写在前面的话:这是一系列专为对信奥(信息学奥赛)感兴趣的中小学生及家长朋友们准备的业余科普文章。笔者并非计算机历史学专家,受自身学识所限,文中若存在不严谨或考证疏漏之处,还望各位读者海涵并指正。
推出本系列的初衷主要有三点:
- 拓宽视野:在动手敲代码之前,全面了解计算机软硬件的发展脉络。
- 激发兴趣:通过深入浅出地讲述前沿技术与历史故事,希望能点燃中小学生对计算机科学的好奇心。
- 课余读物:哪怕只是作为打发闲暇时光的休闲阅读,也能让大家在轻松的氛围中收获知识。
本系列文章往期回顾:
一、 黎明前的尴尬:ENIAC 的逻辑原理与致命短板
在上一篇文章中,我们见证了人类从古老的算盘一路狂奔,最终造出了占地170平方米的庞然大物——世界上第一台通用电子计算机 ENIAC。
ENIAC 的逻辑原理在当时看来是极具创新的:它使用了多达18000多只真空电子管作为核心元件。在通电状态下,电子管可以表现出“通”和“断”两种状态。
ENIAC 在设计时,为了迎合当时人类十进制的习惯,硬生生地把 10 个电子管串联成一组(称为一个“环形计数器”),用来表示数字 0 到 9 中的某一位。比如,一排 10 个管子中,第 4 个管子灯亮了,其他 9 个没亮,那么这排管子代表的就是数字“4”。因此可见: 虽然电子管只有通断两种状态,但 ENIAC 并不是像现在的电脑一样用“二进制”在算数,而是用 “十进制” 在算数。
当遇到数学运算如“计算火炮弹道抛物线”时,工程师会把这个复杂大问题拆解成一步步的加减乘除,然后利用机器内部各组件对应的物理线路进行电信号传送与处理,最终在运算器中得出结果。
然而,尽管 ENIAC 拥有当时惊世骇俗的算力(每秒5000次加法),但它在实际使用中却存在着一个致命的短板:它没有“软件程序”的概念,所有的计算逻辑全靠物理接线(硬连线)来决定。
也就是说,如果昨天 ENIAC 被设置用来计算火炮弹道,今天你想让它帮你算个简单的公司账目,它是无法直接胜任的。你需要让几十位拿着厚厚图纸的工程师,像老式电话接线员一样,耗费好几天时间去重新拔掉并插上机器上那成百上千根错综复杂的电缆,重新布置物理线路。
此时的计算机,更像是一个只能靠人工改变物理元件状态来“硬连接”的超级算盘,每换一道题就要把机器“重新组装”一次。它没有属于自己的智慧,还远谈不上我们如今所理解的“智能”。
那么,计算机是如何摆脱这种物理接线的束缚,演变成今天可以通过“敲键盘写代码”就能自如控制的智能设备的呢?如今同学们在信奥培训中所写的 C++ 程序,到底又是如何在底层生根发芽的?
这得归功于现代计算机历史上的两位旷世奇才:一位是从纯理论上定义了“计算”边界的艾伦·图灵,另一位则是为现代计算机画下了标准硬件骨架的约翰·冯·诺依曼。正是他们二位思想的碰撞与交汇,才为冰冷的机器注入了逻辑的“灵魂”。
二、 艾伦·图灵 (Alan Turing):定义什么是“通用机器”
对于学习信息学的同学来说,“图灵”这个名字绝对如雷贯耳。不仅仅是因为他在二战期间协助军方破解密码的传奇经历,更是因为在真正的电子计算机问世之前,他就已经凭超凡的想象力在脑海中完成了一项极其伟大的纯理论设计——“图灵机” (Turing Machine)。
在20世纪30年代(请注意,此时距离真实机器 ENIAC 的诞生还有十年之久),数学界正在苦苦思索一个深刻的哲学问题:到底什么是“计算”?有没有一种通用的、机械化的方法,可以解决所有能被严谨定义的数学问题?
为了解答这个问题,年仅24岁的英国天才图灵,在论文中构思出了一种极其不可思议的虚构机器。这台“机器”的构造极其简单,它仅仅由以下几个部分组成:
- 一条无限长的纸带,纸带被划分成了一个个小格子。
- 一个读写头,它可以在纸带上左右移动,并且能在格子里读取符号、擦除符号或写下新符号。
- 一套控制规则表,告诉读写头在遇到什么符号、处于什么状态时,该往左走还是往右走,该写下什么新符号。
在这之前,无论是帕斯卡的加法器,还是被寄予厚望的差分机,它们都是专门为了解决某一种或某几类特定的数学运算而物理定制的。
而图灵的这台脑爆机器的超前之处在于:他从严格的数学逻辑上证明了,只要给这台极其简陋的“图灵机”喂入合适的“控制规则表”,它就能模拟任何人类可以进行的确定的数学运算步骤。
💡 延伸阅读:图灵是如何从数学上证明这一点的?
简单来说,图灵的证明逻辑可以分为极其精妙的三步:
- 抽象计算行为:他先将人类做算术的复杂动作,用数学语言极简地抽象成了“看纸带、脑记状态、改写符号”这几个确定的机械步骤。
- 规则转为数据:接着他在数学上证明了,控制机器如何动作的“规则表(程序)”,本身也可以被编码变成一串数字(也就是数据),写在纸带上。
- 构造终极模拟器:最后,他在纸上用纯粹的数学符号推演出了一个完美的模拟器——通用图灵机。它能去读懂并执行纸带上的任何“规则代码”。图灵用严丝合缝的推导证明了,这台通用机器的计算结果,与专门造一台特定的物理机器去算,在数学上是100%完全等效的。
这正是他在理论上带给人类最伟大的启示:“通用机器” 的概念。图灵彻底剥离了“硬件”(读写头和纸带)和“软件/指令”(控制规则表),指出我们不需要为每一种新的运算去制造一台新的纯机械。我们完全可以只制造一台“通用机器”,然后通过改变喂给它的“规则指令(也就是我们今天说的程序代码)”,让它去执行完全不同的任务。
今天,我们能用同一台电脑既写文档、又看电影、还能运行用代码编写的小游戏。本质上,我们的电脑就是这套“通用图灵机”理论在现实世界的杰出产物。为了表彰图灵在计算机科学领域的开拓性贡献,计算机界最高荣誉的奖项便被命名为 “图灵奖”(Turing Award),它享有“计算机界的诺贝尔奖”之盛誉。
三、 约翰·冯·诺依曼 (John von Neumann):现代计算机的“建筑师”
图灵在 1936 年的论文中首次从纯逻辑层面证明了:“指令(程序)和数据本质上是一回事,都可以被编码输入到机器里”。然而,图灵机终究只是一台存在于纸面上的伟大思想实验。
如果说图灵是在云端之上,赋予了计算机 “通用”的灵魂;那么另一位美籍匈牙利籍的天才数学家——约翰·冯·诺依曼,就是那位在这个灵魂理论的启发下,亲手画下工程图纸,将其变成物理现实的终极建筑师。
正如之前所述,早年间的 ENIAC 仍然需要人工频繁插拔线缆来改变物理接线,以此代表不同的计算任务。冯·诺依曼在二战期间早已熟读过图灵的论文,当他受邀参与 ENIAC 的后续改进计划时,面对满机器乱接的电线,他立刻敏锐地联想到了图灵的结论:既然程序本质上也是一种数据,我们为什么不造一个内部的“数字容器”,把程序像数据一样,直接存放在机器内部呢?
于是,在这份跨越纯理论与硬工程的灵感碰撞下,他高瞻远瞩地提交了一份极具历史穿透力的设计报告,提出了一种全新的计算机体系结构:“冯·诺依曼体系结构” (Von Neumann Architecture)。
这种结构的伟大的创新,用最核心的话来概括,主要是以下两点革命性突破:
1. 全面引入二进制 (Binary System)
面对当时计算机该用什么进制来表示数据的争论,冯·诺依曼一锤定音:计算机的内部不应该采用人类习惯的“逢十进一”的十进制,而应该全面采用二进制(即只有 0 和 1)。
其背后的工程逻辑非常务实:在当时的电子及物理世界中,要制造能非常稳定地表示10个精准刻度的电子元件极度困难,极容易因为电压波动而出错。相反,要表示两个状态(比如电子管的亮和灭、电路的高低电平)却极其简单、清晰且不容易受干扰。这也是为什么,现今世界上一切眼花缭乱的数字化表象(包括视频、音频、3D模型),在底层的机器眼中,都是一串串极其单纯可靠的 0 和 1。
2. 最伟大的创举:“存储程序” (Stored-program) 思想
这可以说是冯·诺依曼体系结构中最精髓的灵魂指令。
以前的机器,只有“数据”会被存储在机器内部,而“程序”(也就是计算这些数据的步骤清单)则被挡在机器外部,依靠人工临时拨动开关、插拔线缆“输入”进去。
冯·诺依曼做出了一个大胆的反问:既然“程序”本身也是一段信息,我们为什么不把它也当作数据的一种,和需要处理的数据一起,直接存放在计算机内部的“存储器”(也就是今天说的内存)里呢?
这样一来,计算机在通电运行的时候,就彻底解放了人力。它只需从存储器中读取一条指令,顺从地执行它;然后再取下一条指令,接着执行……只要有电,这套循环就能以迅雷不及掩耳之势无休止地运转下去。这也是同学们今天写下的 C++ 代码能够被电脑自动、高速运行的底层核心逻辑。
在冯·诺依曼的报告中,他清晰地将现代计算机严格划分为了五个相互协作的基石部件:
- 运算器(算术与逻辑运算的执行中心)
- 控制器(指挥、调度程序依次执行的大脑)
- 存储器(相当于记忆,用来存放数据和程序)
- 输入设备(比如今天的键盘、鼠标)
- 输出设备(比如今天的显示器、打印机)
对于参加信奥考试的孩子们,可以想象一下:时至今日,无论是你家里轻薄的笔记本电脑、你手掌里的智能手机,还是那些庞大如山的超级计算机,绝大多数依然在忠实地沿用着几十年前这套经典的“冯·诺依曼体系结构”。 它极其优雅、清晰、稳固,历经岁月洗礼,光芒至今不减。
下期预告
图灵和冯·诺依曼两位巨匠,为现代计算机奠定了“可编程”与“存储程序”的底层逻辑。
但既然计算机内部只能处理枯燥的 0 和 1,那它是如何理解我们在键盘上敲击的英文字母、屏幕上显示的汉字,甚至各种图像和声音的?
下一期,我们将探讨计算机底层的数据表示机制:《【信奥业余科普】03:计算机的数据表示,从 0 和 1 到大千世界》。
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
