跳到主要内容

白话架构(1)- 一切始于大爆炸:现代计算机与软件的起源史诗

· 阅读需 15 分钟

达芬奇:“学习如何看。现实中的一切都相互关联”

我们所在的宇宙如何起源?目前科学界最主流的观点是大爆炸宇宙论——一切都源于那一声惊天动地的“嘭”。

而你或许想不到,现代计算机与软件的诞生,也藏着一场大爆炸:从核爆研究中的偶然相遇,到定义行业的经典架构,再到软件开发模式的混沌与觉醒,每一步都环环相扣,最终构筑起如今的数字世界。

1929 年,爱德文·鲍威尔·哈勃(Edwin Powell Hubble,就是冠名哈勃望远镜的那位科学家)总结了红移现象,之后爱因斯坦也来到哈勃工作的威尔逊天文台进行了红移现象的观测。在此基础上,到了 1948 年前后,乔治·伽莫夫(George Gamow)第一个建立了热大爆炸的观念。

二战期间,大名鼎鼎的曼哈顿计划,哈勃并没有直接参与,但他在二战期间为美国海军研究局(ONR)提供咨询,研究雷达技术对天文学观测的干扰问题。在哈勃研究雷达技术时,可能就在他隔壁房间,有一个人正在忙着研究原子弹。

宇宙大爆炸与核爆研究:冯·诺依曼的跨界联结

关于宇宙起源,1929 年爱德文·鲍威尔·哈勃(没错,就是哈勃望远镜的冠名者)总结了红移现象;之后爱因斯坦也专程前往哈勃工作的威尔逊天文台,亲自观测这一现象。在此基础上,1948 年前后,乔治·伽莫夫首次提出了热大爆炸的核心观念。

而同一时期的二战战场,另一场“爆炸”相关的研究正在秘密进行——曼哈顿计划。哈勃虽未直接参与,但二战期间他为美国海军研究局(ONR)提供咨询,专注于解决雷达技术对天文学观测的干扰问题。有趣的是,或许就在他隔壁的房间,另一位大佬正忙着攻克原子弹的核心难题。

这位大佬,就是约翰·冯·诺依曼(John von Neumann)。作为曼哈顿计划的核心成员,他全权负责原子弹的理论设计与计算,在洛斯阿拉莫斯实验室主导了内爆式核装置等复杂的数学建模工作。谁也没想到,一次火车站的偶遇,会让这位核物理领域的专家,跨界成为现代计算机的“架构之父”。

火车站的偶遇:改变计算机命运的对话

1944 年 8 月,冯·诺依曼参加完美国陆军阿伯丁试射场的会议后,在火车站台等候列车。这时,一位陆军中尉主动上前致意——他就是赫曼·哥尔斯廷,负责督导摩尔电机学院制作射表,同时也是一位数学家,更是冯·诺依曼的“超级迷弟”。

两人此前素未谋面,但面对偶像,哥尔斯廷自然不会错过交流的机会。聊天中,他提到自己正在负责一个计算机项目,项目成果 ENIAC 每秒能执行 333 次乘法。这句话瞬间让冯·诺依曼眼前一亮,不断追问技术细节。哥尔斯廷见状,干脆直接邀请他前往项目现场参观。

图:左二为哥尔斯廷,右一为冯·诺依曼

大佬一出手,就知有没有。参观完 ENIAC 后,冯·诺依曼立刻指出了其核心缺陷:物理接线的编程方式,严重限制了计算机的灵活性和效率。随后,他应邀加入项目顾问团队,在 ENIAC 研发后期协助改进设计。当时 ENIAC 已交付美国军方,团队正筹备全新项目 EDVAC,冯·诺依曼的加入,让这个新项目成为了现代计算机的“雏形孵化器”。

火车上的 101 页手稿:冯·诺依曼架构的诞生

1945 年 6 月,冯·诺依曼和项目小组成员开完会后,乘坐火车横穿美国返回新墨西哥州。途中,他文思泉涌,将团队过去十个月的技术讨论、改进实验进行系统总结,整理成了一份涵盖所有核心细节的书面报告。 哥尔斯廷收到这份手稿后,立即将其打印成 101 页的正式文件——这就是大名鼎鼎的《EDVAC 报告初稿》(First Draft of a Report on the EDVAC)。

图:《EDVAC 报告初稿》封面

正是这份初稿,明确了引领现代计算机发展的核心架构:运算单元、控制单元、存储单元、输入/输出装置。这一设计彻底解决了 ENIAC 编程效率低下的痛点,成为现代计算机的核心设计原则,也就是我们熟知的 冯·诺依曼架构

不过值得一提的是,哥尔斯廷 在这份报告中只署了冯·诺依曼一个人的名字,这也为后续的知识产权争端埋下了隐患。1951 年,EDVAC 正式完成,作为首个基于冯·诺依曼架构的计算机,它采用二进制和统一存储设计,成为了现代计算机的直接蓝本。

事实上,EDVAC 是团队集体努力的成果。冯·诺依曼个人的核心创见只有“可变内存地址”,而团队中的普雷斯伯·埃克特早就提出了“储存程序”的想法,作为内存核心的水银延迟线也是他的发明。如今荣誉却由冯·诺依曼一人独享(架构以他的名字命名),这让埃克特难以接受。

更严重的分歧在于,哥尔斯廷未征得团队同意,就将报告分发给了美、英两国的 24 个单位。在他和冯·诺依曼看来,这份报告是学术成果,公开能推动高速计算机的发展;但对约翰·莫克利埃克特而言,这直接导致他们的相关专利无法获批。

双雄并立:冯·诺依曼架构与哈佛架构

冯·诺依曼架构 奠定了现代计算机的基础,但它并非唯一的经典架构。与之齐名的,还有哈佛架构

哈佛架构最早起源于 1944 年哈佛大学的哈佛Mark I计算机,直到 1947 年的 哈佛Mark III计算机,这一架构才得到完整实践。该计算机采用真空管技术,首次实现了“程序存储器”与“数据存储器”的物理分离,并通过独立总线并行访问指令和数据——这也是哈佛架构的核心优势。

如今,哈佛架构广泛应用于数字信号处理器(DSP)、微控制器(MCU)、实时控制系统和专用计算设备。凭借存储分离和并行访问的特性,它成为了实时计算与嵌入式系统的核心基石。随着技术发展,两种架构也并非完全割裂,在实践中常常相互混合、借鉴,共同服务于不同的应用场景。

从二进制到 Go 语言:编程语言的进化之路

有了计算机硬件作为基础,编程语言的发展才有了土壤。从最原始的二进制指令,到如今简洁易用的高级语言,每一次迭代都让“人与计算机的对话”更高效。

在机器语言时代,用户只能用二进制指令直接操控硬件——比如 ENIAC 通过打孔卡编程。这种方式的优势是执行速度最快,但开发效率极低,堪称“程序员的噩梦”。

为了改善这一现状,1949 年英国计算机科学家莫里斯·威尔克斯提出“符号地址”概念:用字母或符号(如 LOAD、ADD)代替二进制操作码,用 X、Y 等符号表示内存地址,大大降低了记忆难度。

之后,IBM 的纳撒尼尔·罗切斯特领导团队,为美国首台批量生产的商用科学计算机IBM 701,开发了符号化编程系统Short Code。尽管它严格来说只是“半汇编”工具,但“用符号替代机器码”的核心思想,为汇编语言的诞生奠定了基础。

随着计算机架构的标准化,汇编语言逐渐成熟。它需要通过汇编器将助记符转换为二进制,性能略低于机器语言,但胜在易记易用,程序员的开发效率大幅提升。

再往后,高级编程语言陆续登场,开启了编程的“黄金时代”:1957 年的 FORTRAN、1958 年的 LISP、1959 年的 COBOL、1972 年的 C……

随后,面向对象和脚本化语言应运而生:1983 年的 C++、1991 年的 Python、1995 年的 JavaJavaScript……

进入新世纪,更适配新时代需求的语言不断涌现:2009 年的 Go、2010 年的 Rust、2014 年的 Swift……

注:以上仅列出各时期代表性编程语言,未覆盖全部。

从“个人英雄”到“工程体系”:软件工程的觉醒

编程语言的发展,推动了程序的迭代。早期的程序简单、规模小,通常只有数千行代码,多由单个程序员手工编写,依赖机器语言或汇编语言,无需系统化设计——只要个人能力足够强,就能完成开发。

但随着软件规模扩大,这种“个人英雄式”的开发模式彻底失灵。1964 年的 IBM OS/360 操作系统,成为了转折点:作为首个大规模复杂软件,它包含 500 万行代码,由 3000 人协作开发,最终却超预算 5 倍、延期 4 年才发布。

这就是软件开发中最典型的“大爆炸模式”:缺乏团队协作方法论,过度依赖“天才程序员”的个人能力,文档和规范严重缺失,最终导致项目失控。

这场“灾难”也唤醒了学术界和工业界。此后,大家从理论和实践双维度出发,不断完善软件开发的方法论和管理模型,最终形成了“现代软件工程”的核心概念与体系,且至今仍在持续发展。其中不少思想,至今仍是软件开发的宝贵财富。比如 1975 年布鲁克斯的著作《人月神话》,就深刻剖析了大型软件项目的管理难题,至今仍是行业经典。

一切始于大爆炸

宇宙大爆炸中,粒子在未知的命运中碰撞聚合,最终形成了我们赖以生存的世界;软件开发的“大爆炸模式”,虽充满混沌与失控,却也孕育出了如今丰富多彩的软件生态,以及背后完善的开发方法论与实践经验。

一切始于大爆炸。软件开发的方法论、系统架构等,也始于它自身的“大爆炸”。

接下来的系列文章中,我们将顺着时间线继续展开,带你走进四代计算机的迭代历程,认识软件浪潮中的英雄人物,最终领略系统架构的完整脉络。敬请期待!