第一个计算机 bug 真的是一只蛾子——1947年哈佛 Mark II 的真实故事

"Debug"这个词怎么来的?1947年哈佛Mark II计算机里真的夹出了一只死飞蛾,被贴进操作日志。但"bug"这个词其实比这只蛾子老得多——这是一个著名玩笑的真实起源。
1947年9月9日下午,哈佛大学马克二型计算机(Harvard Mark II)突然停止工作。这不是什么罕见的事——这台重达25吨、用了超过3000个继电器和数百英里电线的巨兽,每天都要出好几次故障。
但这一次的故障原因,成为了计算机历史上最著名的一页。
技术人员打开继电器面板,在一组触点的缝隙里夹出了一只死飞蛾。操作日志上,当天值班的程序员用透明胶带把这只蛾子贴在了日志本上,旁边写了一行字:
"First actual case of bug being found."("首次发现bug的真实案例。")
那只蛾子,至今保存在华盛顿的史密森尼国家历史博物馆里。胶带已经泛黄,蛾子的翅膀有些碎裂,但你可以清楚地看到它——计算机历史上最有名的一只昆虫。
"bug"这个词,其实比这只蛾子老得多
很多人以为"bug"这个词是1947年这次事件之后才被用来描述计算机故障的。事实正好相反——程序员在蛾子出现之前就已经在用"bug"了。
"bug"指代"机械故障"的历史远比计算机古老。爱迪生早在1878年就在一封信中抱怨他的电报系统里有"bugs"——意思是小的故障和干扰。二战期间的雷达工程师也用"bugs"来形容设备故障。1946年的一份备忘录里,Mark II的工程师写道:"我们正在消灭(debugging)这台机器。"
但1947年9月9日那次不一样:程序员在日志里故意玩了一个双关语——"First actual case"=第一个"字面意义上的"bug。他们当然知道这个词早就在用了,正因为如此,这次发现才显得好玩。
所以准确的说法是:程序员没有"发明"bug这个词,而是发现了一只真正的bug,然后开了个玩笑。这个玩笑后来传遍了全世界。
那只蛾子的日志上写了谁的名字?
日志上签名的程序员是威廉·伯克(William Burke)。但很多人把这件事归功于格雷斯·霍珀(Grace Hopper)——计算机科学史上最重要的女性之一,COBOL语言的设计者。
霍珀本人多次在各种场合讲述这个故事。1981年她在一次采访中说:"我们发现了第一只bug,真的是一只飞蛾,我们把胶带贴在日志上。"她确实当时在Mark II的编程团队中,但直接操作的不是她。
不过这不那么重要。重要的是霍珀把这个故事变成了计算机文化的一部分。她后来在无数演讲中用这个例子来说明:编程不仅需要逻辑,还需要幽默和人性。
Mark II 到底是什么?
这个名字很酷的"哈佛马克二型"实际上是一台机电式计算机——不是我们现在理解的电子计算机。它用继电器(电磁开关)来存储和处理数据,每秒钟能做大概8次加法。作为对比,你手机上的处理器每秒能做大约100亿次。
但1947年的8次/秒已经相当快了。这台机器主要被美国海军用来计算弹道轨迹。它的体积大约相当于一整个房间——而今天你能在指甲盖上放十几个比它快几百万倍的处理器。
飞蛾跑进继电器的原因是:Mark II的继电器会产生热量和微弱的光——在哈佛那个没有空调的地下室里,对一只到处乱飞的蛾子来说,继电器面板简直像一个温暖的洞穴。
这也揭示了早期计算机的一个核心特征:它们不仅是数学机器,也是物理机器。继电器会磨损、电线会松动、蛾子会跑进去——今天的程序员只需要担心逻辑错误,那时候的程序员还得担心物理世界实实在在入侵他们的计算空间。
"debug"的文化遗产
从1947年到现在,"debug"从一个玩笑变成了计算机科学的核心术语。但如果你仔细想,这个词其实很微妙:它暗示软件的错误是外来的、临时的——像一只跑进机器的蛾子——而不是你在逻辑上犯了错误。
这可能是程序员群体的一种心理防御机制:当代码不工作时,与其说"我写错了",不如说"有个bug"。就像如果厨房着火了,你说"有个火情"比"我把厨房烧了"要好听。
但无论如何,下一次当你花三小时"debug"的时候,想想那只1947年9月的飞蛾。它可能只是想让继电器面板暖和一下——然后就不小心定义了整个行业最常用的比喻。
评论 (0)
加载评论中…