计算机不是"造出来"的,是先"想出来"的:图灵 1936 年在纸上证明了通用机器可行,十年后战争把经费催了出来——ENIAC 亮相比它更有思想,但改程序要插几天电线;冯·诺依曼的"存储程序"设计让程序变成内存里的数据,从此一台机器能跑无数程序,现代计算机就此诞生。
1. 承上:路铺好了,第一台机器在哪
04 篇我们走完了器件之路(布尔 → 香农 → 继电器 → 真空管);05~07 篇拆开了机器内部(指令、CPU、流水线)。这篇补上中间那段历史:世界上第一台电子计算机,到底是谁、在哪、怎么诞生的?
先剧透一个冷知识:这个问题 1973 年是由法官判出来的,不是历史学家——因为"第一台"争了三十年。
2. 思想先行:图灵的"通用机器"(1936)
造机器之前十年,一个 24 岁的英国数学家图灵先回答了一个更根本的问题:"计算"到底是什么?有没有机器算不了的东西?
他用一条纸带 + 一个读写头构造了一个假想机器(图灵机),证明了:
- 一切"有明确步骤的问题",都能被这种机器计算
- 存在一种通用图灵机——它读入"另一台机器的描述",就能模仿那台机器工作
"读入描述 → 变成另一台机器",翻译成今天的话就是:读入程序 → 变成能干那件事的机器。你装一个 App 手机就变一种机器,这个可能性图灵在机器还没造出来时就证明了。05 篇的"存储程序"、06 篇的取指执行循环,全是他这个思想的工程化。
3. 战争催生:从 ABC 到 ENIAC
理论有了,还差两个东西:钱和急迫的需求。二战把这两样一起送来了——炮弹弹道表要算,破译密码要算,人力算不过来。
| 机器 | 年份 | 是什么 | 结局 |
|---|---|---|---|
| ABC 机(阿塔纳索夫-贝瑞) | 1942 | 首次用电子管做计算,但只能解方程,不可编程 | 没造完就散了,淡出视线 |
| 巨人 Colossus(英国) | 1944 | 电子破译密码机,快而专用 | 保密到 1970s,缺席"第一"之争 |
| ENIAC(宾夕法尼亚大学) | 1946 | 第一台通用电子计算机:可编程、电子速度、能跑不同任务 | 1946 年 2 月 14 日公开亮相,一鸣惊人 |
ENIAC 的规格(04 篇提过,这里补全):约 17,468 只真空管、30 吨、167 m²、150 kW,每秒 5,000 次加法——比人力快几千倍。但它有个致命别扭:
ENIAC 没有内存存程序。想让它算弹道?6 名女程序员要手动拔线、插线、设几千个开关,把机器"接"成那个任务的形状。换个任务,重插几天。机器每秒算 5,000 次,换脑子却要几天——算得快,"改主意"极慢。
这 6 位女程序员(吉恩·巴蒂克等)没有编程语言、没有教程,靠看电路图摸索,后来被称为世界上第一批程序员。"程序"这个词从她们手里开始有了今天的含义。
4. 关键一跃:冯·诺依曼与存储程序(1945)
数学家冯·诺依曼 1944 年加入 ENIAC 团队当顾问,1945 年起草了著名的 EDVAC 报告草案(101 页,只署他一个人的名——团队对此有意见,所以这套结构后来也叫"冯·诺依曼结构")。核心设计一句话:
把程序当作数据,和数据一起存进内存;机器按地址自动取指令执行。
对照 05、06 篇你会发现,这份 1945 年的草案就是:
- 存储程序思想(05 篇第 5 节)
- 运算器、控制器、存储器、输入、输出五大部件(未来的"五大部件"篇)
- 取指 → 译码 → 执行循环(06 篇第 3 节)
也就是说:你今天用的每一台电脑、每一部手机,结构上仍是 1945 年那份草案的直系后代——所以都叫"冯·诺依曼机"。
1948 年曼彻斯特大学的"Baby"机首次跑通存储程序,1949 年 EDSAC 成为第一台实用的存储程序计算机。ENIAC 团队自己马上按新思想造了 EDVAC——连"第一代机"自己都在换代。
ENIAC 的设计者莫奇利 1941 年参观过 ABC 机。1973 年美国法院在专利案中据此裁定:电子数字计算机的发明者应为阿塔纳索夫(ABC),ENIAC 专利无效。但历史公论是:ABC 不可编程、不算通用机;"现代计算机之父"的桂冠,公认落在"图灵(思想)+ 冯·诺依曼(结构)"两人身上,ENIAC 团队则是把通用电子计算机造出来的人。
5. 走出实验室:从一台到一门产业
- 1951 年 UNIVAC I:第一台商用计算机(美人口普查局买的)。它最出圈的一战:用 5% 的早期选票预测艾森豪威尔当选 1952 年美国总统,CBS 起初不敢播——机器赢了。计算机第一次在公众面前证明"算得比人准"。
- 1950s IBM 700 系列:蓝色巨人入场,把计算机从实验室推向企业。"计算机公司"成为一个行业。
- 再往后的晶体管、集成电路、个人电脑(04 篇已经讲过),就是把这台"诞生的机器"不断变小变便宜的故事。
6. 整条线合拢:你现在站在哪
把 01~08 串一遍,你会发现"诞生"不是某天某台机器,而是一条链:
布尔给逻辑装上数学(1854)
→ 图灵证明通用机器可行(1936,思想)
→ 香农发现开关能算布尔代数(1937,桥梁)
→ 战争出钱,ENIAC 造出来(1946,工程)
→ 冯·诺依曼设计存储程序(1945-48,结构定型)
→ 晶体管/集成电路(1947-58,器件换代)
→ 你桌上的冯·诺依曼机(今天,结构未变)
80 年过去,机器大了、快了几个数量级,但"程序即数据、取指执行"的灵魂一天没变过。
7. 常见误区
教科书老说法。按 1973 年判决,电子数字计算机的发明者是 ABC 机(1942);但 ABC 不可编程,所以"第一台通用电子计算机"仍是 ENIAC。争"第一"取决于你怎么定义。 [!warning] 误区二:冯·诺依曼一个人发明了计算机 没有。他贡献的是结构设计(存储程序),而且 EDVAC 报告基于整个团队(埃克特、莫奇利等)的讨论,只署他的名让埃克特很不服。机器是团队造的,思想源头还有图灵。 [!warning] 误区三:图灵造了图灵机 图灵机是纸上的思想实验,从来不是一台真机器。它的价值是回答"什么是可计算的",并为后来的存储程序指路。 [!warning] 误区四:计算机是和平年代的科技发明 直接受二战驱动:弹道表、密码破译、原子弹计算。冷战接着出钱。重大技术背后常有急迫的战争需求,计算机是最典型的例子。 [!warning] 误区五:程序员是软件出现之后才有的职业 ENIAC 时代就有程序员了——那 6 位插线的女工程师。硬件机器没变,她们"重插的线"后来变成了"重写的代码"。
8. 可折叠自测题
提出图灵机模型,证明"通用机器"在理论上可行——读入一台机器的描述就能模仿它。十年后(1946)第一台通用电子计算机才造出来,所以计算机是"先想出来、再造出来"的。 [!question]- Q2. ENIAC 改一次程序要多久?为什么? 几天。因为它没有内存存程序——"编程"是手动拔线、插线、设开关,把机器接成任务的形状。程序不能当数据存,换任务就得动硬件。 [!question]- Q3. 冯·诺依曼结构的核心是什么?你现在的电脑还是这个结构吗? 存储程序:程序当数据存进内存,机器按地址自动取指执行。是——今天所有主流电脑和手机在结构上仍是冯·诺依曼机,80 年没换过灵魂。 [!question]- Q4. "第一台电子计算机"的归属为什么由法院判决?判给了谁? ENIAC 设计者莫奇利参观过 ABC 机,专利案中法院据此于 1973 年裁定 ABC 的发明者阿塔纳索夫为电子数字计算机发明人。但 ABC 只能解方程、不可编程,"第一台通用电子计算机"仍归 ENIAC。 [!question]- Q5. 世界上第一批程序员是谁?他们的"编程"怎么做的? ENIAC 的 6 位女工程师。没有语言和教程,靠看电路图手动插线、设开关来"编程"。她们的"重插的线"演变成了今天的"重写的代码"。
9. 下一步学什么
- [x] 番外篇·图灵机 —— 已写成 第 09 篇:把"领先十年的思想"单独拆开讲透
- [ ] 十六进制与负数表示 —— 颜色代码
#FF8800、内存地址,原码/反码/补码为什么会演变出补码(03 已讲用法,此篇讲由来) - [ ] 数据压缩原理 —— 哈夫曼、RLE,ZIP 到底做了什么
- [ ] 计算机五大部件 —— 冯·诺依曼结构里除 CPU 之外的其余四件(本篇已埋好伏笔)
- [ ] 操作系统做什么 —— 存储程序之后的新问题:几十个程序怎么共处
- [ ] 写第一行真代码 —— 想动手的话,Python 是最好的第一门语言,说一声我带你装环境
10. 相关笔记
- 07 执行指令-一条指令的完整旅程 ← 上一篇:冯·诺依曼结构运转的细节
- 05 编程是什么-给计算机下指令 ← 存储程序思想的完整讲解
- 04 实现电路计算之路 ← 诞生背后的器件之路(布尔/香农/真空管/晶体管)
- 📇 计算机基础 · 索引
- 🏠 返回主页