【信奥业余科普】01:人类为什么要发明计算机?——从算盘到30吨的庞然大物
写在前面的话:这是一系列专为对信奥(信息学奥赛)感兴趣的中小学生及家长朋友们准备的业余科普文章。笔者并非计算机历史学专家,受自身学识所限,文中若存在不严谨或考证疏漏之处,还望各位读者海涵并指正。
推出本系列的初衷主要有三点:
- 拓宽视野:在动手敲代码之前,全面了解计算机软硬件的发展脉络。
- 激发兴趣:通过深入浅出地讲述前沿技术与历史故事,希望能点燃中小学生对计算机科学的好奇心。
- 课余读物:哪怕只是作为打发闲暇时光的休闲阅读,也能让大家在轻松的氛围中收获知识。
当孩子们在数学课上练习两位数的加减法,或者家长们在辅导作业时用手机计算器瞬间得出复杂的结果时,或许我们都很少去深思这样一个问题:在电子计算设备普及之前,人类到底是遇到了什么样“算不过来”的麻烦,才会驱动一代代先驱去发明出计算机呢?
为了探究这个问题,让我们将目光投向历史深处,看看前人们是如何为了提高计算效率,而不断挑战人类智力与工程极限的。追本溯源,正是理解“计算思维”的第一步,而这恰好是编程竞赛的核心。我想这也是为什么GESP考纲一级首先会将计算机相关知识作为考察范围的原因吧。
一、 早期账目与“算数神器”
在尚未掌握电力与精密机械的漫长历史中,人类最古老的计数方法大概是“结绳记事”。这种方法对于早期社会简单的生活物资尚能应付,但一旦面对国家运转、天文地理等庞大的数字,显然就捉襟见肘了。
后来,中国古人发明了算盘。从计算机科学的视角来看,算盘绝不仅仅是一个木框和几串珠子,它蕴含了非常伟大且影响深远的“位置计数法”与“逢十进一”的进位思想。在这套系统下,熟练的珠算使用者,其加减法运算速度甚至能比用早期的电子计算器还要快。这可以说是人类最早利用工具,大规模辅助大脑进行抽象计算的成功尝试之一。这段历史也提醒我们,计算思维的火花在机械时代到来之前,就已经存在了。
二、 机械时代的计算先驱
随着航海测绘、天文历法以及国家税收等领域的发展,逐渐成熟的社会对大规模、高精度计算的需求日益膨胀。单靠算盘和人脑已经难以满足时代的迫切要求,于是,一批致力于制造自动化计算机器的机械工程先驱登上了历史舞台。这种不畏艰难、试图用自动化工具解决繁重劳动的精神,也正是编程所推崇的工程师精神。
1. 尝试机器计算的布莱兹·帕斯卡 (Blaise Pascal)
1642年,著名的法国天才布莱兹·帕斯卡年仅19岁——这也是很多高中生冲刺竞赛的年纪。据历史记载,为了减轻身为税务局长的父亲每天面对海量账本的手工运算负担,帕斯卡利用一系列齿轮装置,发明了世界上第一台较为成熟的机械计算器——“帕斯卡加法器”。
其设计的核心逻辑非常精妙:它由一排互相咬合的齿轮组成,每个齿轮上标有0到9的数字。当你拨动代表“个位”的齿轮转过一整圈(即从9转回0)时,它上面的一个拨杆就会顺势拨动旁边代表“十位”的齿轮转动一格。这正是利用纯机械的物理结构,完美复刻了人类算术中“逢十进一”的数学进位法则。
只要操作者在这个盒子上按顺序转动相应的齿轮输入数字,机器便能自动累加并给出正确结果。日后,帕斯卡不仅成为了数学家,更是物理学界享有盛誉的大师(初中物理课本中的压强单位“帕斯卡”即为纪念他而命名)。
2. 具有超前视野的查尔斯·巴贝奇 (Charles Babbage)
到了19世纪,英国数学家查尔斯·巴贝奇深感当时人工编制的数学用表错误百出。由于人类在进行大量机械重复计算时极易疲劳失误,他立志要制造一种能自动持续计算且不会出错的机器,先后设计了庞大的“差分机”以及更为复杂的“分析机”。
差分机 (Difference Engine) 的定位是“全自动的数学制表机”。它的设计原理基于数学上的“微小差分法”,专门用于计算多项式函数。与帕斯卡加法器不同,差分机不需要人手一直去拨动齿轮,只要你事先设置好初始值,摇动曲柄,它就能通过成千上万个齿轮的自动咬合,连续不断地计算并打印出一张张没有任何人为错误的数学用表。
而分析机 (Analytical Engine) 则更加伟大,它的定位已经不再是单纯的加减法盒子,而是人类历史上第一台通用机械计算机的构想。令人惊叹的是,在巴贝奇“分析机”的设计里,他极具前瞻性地将机器分为了几个核心部分:用来“存储运算数据”的“仓库”(相当于今天的内存),用来“进行运算”的“作坊”(相当于今天的CPU),以及用来输入指令的穿孔纸带读取器。这种将数据存储与运算处理相互分离的设想,与一百多年后现代电子计算机的体系结构有着惊人的契合。巴贝奇也因此被学界普遍尊称为计算机历史上的重要先驱之一。
3. 编写计算指令的阿达·洛芙莱斯 (Ada Lovelace)
在巴贝奇研制分析机的漫长过程中,著名英国诗人拜伦的女儿阿达·洛芙莱斯给予了重要的学术支持。她对数学有着深刻的见解,不仅深入研究了分析机的运转逻辑,还亲自为其构思了一组用于计算伯努利数的理论算法指令。
这里的“算法指令”具体是指什么呢? 其实就是为了让分析机完成复杂的计算目标,而精确拆解出的一系列分步执行清单。在她的这套设计中,已经包含了现代编程中极为核心的 “循环(Loop)”(让机器重复执行某段操作)和 “条件分支(If/Else)”(让机器根据不同情况做出选择)的概念。
这与之前各种机器的发明有着本质的区别。如果说帕斯卡的加法器和早期的差分机只是纯粹的“自动化数学运算工具”(就像是极限升级版的算盘),那么阿达则是世界上第一个赋予了机器“软件逻辑”灵魂的人。她曾敏锐地预言,只要通过合适的指令编码,这类机器将来不仅能处理数字,甚至能处理任何遵循一定逻辑规则的符号(比如谱写音乐或处理拼写文字)。这种将“机械算数”跨越式升华为“通用信息处理”的伟大思想,正是现代软件编程的真正奠基石。
这组由打孔卡片承载的指令,被史学家公认为是人类历史上第一段专门为计算机器拟定的程序,阿达·洛芙莱斯也因此被尊为世界上的第一位程序员。(为了纪念她的卓越贡献,美国国防部后来甚至将一种高级编程语言命名为 Ada 语言)。她的故事也一直激励着无数想要学习计算机科学的女同学们,在逻辑的殿堂里,每一颗智慧的头脑都能发光。
三、 战争催生的机器巨兽:ENIAC 诞生
时间推进到20世纪40年代,第二次世界大战对计算能力提出了前所未有的迫切需求。
以当时美军的研发为例,编制一份详尽的火炮弹道表,需要针对不同的发射角度、风速等条件,进行数百万次复杂的微积分计算。如果依靠传统的人工队伍或者老式的机械计算器,计算速度根本跟不上消耗。
在这样迫在眉睫的背景下,1946年2月14日,美国宾夕法尼亚大学成功研制出了世界上第一台真正意义上的通用电子计算机——ENIAC(Electronic Numerical Integrator and Computer,电子数值积分计算机)。
(注:在 GESP 与 CSP 的计算机基础知识初赛中,ENIAC 这一历史节点常作为考点出现,同学们可以着重了解)
与之前的机械计算器不同,ENIAC 摒弃了缓慢的物理齿轮,而是使用了 18000多只真空电子管 作为核心计算元件,这标志着第一代电子计算机的正式问世。
ENIAC 的硬件规模在今天看来极其惊人:
- 重量:约 30 吨。
- 占地:约 170 平方米。
- 算力:一秒钟能执行 5000 次加法运算。
或许很多习惯了玩高画质手机游戏的小朋友们感叹,现在我们手里一部普通的智能手机芯片哪怕只有指甲盖大小,每秒也能进行数百亿乃至上万亿起步的运算。然而在 1946 年,每秒 5000 次的计算速度依然是将人类极限提升了数以千计的倍数。原本需要耗费几千小时才能勉强完成的弹道表,这台庞然大物只需极短的时间便能得出结果。
正是这台占地 170 平方米的机器巨兽,拉开了人类“电子计算机时代”的宏伟帷幕,并最终演变成了今天陪伴孩子们学习在线课程、编写代码的数字帮手。
下期预告
客观看待,尽管早期的 ENIAC 算力冠绝全球,但其软硬结合度非常原始。如果需要变更计算任务,工程人员只能通过手动重新拔插成百上千根电缆来改变线路逻辑。此时的计算机,依然像是一台体型巨大的、需要手工设定的“超级算盘”。
那么,它是如何进一步演化,逐渐形成现代计算机那样可以通过“软件”或者“代码”灵活调度指令的体系结构的呢?如今同学们在信奥培训中所写的 C++ 程序,到底又是如何在底层生根发芽的?
下一期,我们将探讨两位在计算机发展史上留下深刻印记的学者——图灵与冯·诺依曼,了解他们是如何通过理论为计算机奠定逻辑“灵魂”的。
所有代码已上传至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),考试认证学员交流,互帮互助
