全世界程序员都在讲一个假故事-Bug不是来自那只飞蛾

你学编程的时候,一定听过这个故事。

1947 年,哈佛大学的计算机 Mark II 出了故障。工程师们翻遍了整台机器,最后在一个继电器里找到了一只飞蛾。Grace Hopper 把这只蛾子用胶带贴在工作日志上,旁边写了一句,「First actual case of bug being found.」

从此,计算机领域的故障就叫 bug,调试就叫 debug。

这个故事写在几乎每一本计算机入门教材里。你的大学老师大概率在第一堂课就讲过。我自己也是这么记住的,一直觉得这是计算机史上最浪漫的细节之一。

但这个故事有一个问题。

它是假的。

不是说飞蛾是假的。那只蛾子是真的,日志也是真的,到现在还收藏在史密森尼博物馆。假的是「从此故障叫 bug」这个因果关系。

翻一下 IEEE Spectrum 的文章,你会发现一个让人有点懵的事实,bug 这个词在飞蛾事件之前已经在工程师圈子里用了将近 70 年。

1878 年,爱迪生给西联电报公司总裁写了一封信。他正在调试四重电报机,进展不顺。信里有这么一段,

「Bugs,就像人们对这类小毛病和小麻烦的称呼那样,不断冒出来,需要好几个月的焦虑观察、研究和劳作,才能确定到底是成功还是失败。」

1878 年。距离 Hopper 贴飞蛾还有 69 年。

而且你看爱迪生的措辞,「就像人们对这类小毛病的称呼那样」。他不是在发明这个词,他是在引用一个已经流行的说法。说明 1878 年的时候,bug 已经是工程师之间的日常口语了。

那这个词到底从哪来的?

再往前追,追到中世纪。

Bug 的词根来自威尔士语 bwg,苏格兰语 bogill,中古英语 bugge。这几个词都是一个意思,妖精,鬼怪,夜里出没捣乱的小东西。

你在黑暗中干活,机器突然不转了,你找不到原因,就好像有个看不见的小鬼在跟你作对。

机器里的妖精。这就是 bug。

爱迪生大概是第一个把这个中世纪的鬼怪比喻正式搬进工程领域的人。到了 1888 年,工程师 William Maver 已经在文章里把这个词归功于爱迪生。1892 年,Sloane 编的《标准电气词典》正式收录了定义,「电气设备的连接或工作中的任何故障或问题」。1895 年,这个定义进了通用英语词典。

这一切,都发生在 Hopper 和那只飞蛾之前。

那为什么全世界偏偏记住了飞蛾?

你想想看。

一边是「爱迪生在 1878 年的一封信里用了这个词」。

一边是「一个女工程师在世界上最先进的计算机里找到了一只真的虫子,还把它贴在了日志上」。

哪个更好讲?

飞蛾的故事有画面感,有人物,有实物证据,有一种命运般的巧合。一个本来用于比喻的词,居然被一只真的虫子给实体化了。

其实 Hopper 自己从来没声称她发明了 bug 这个词。她在日志上写的是「First actual case of bug being found」,注意那个 actual。她在开一个圈内玩笑,意思是,我们天天说 bug,今天终于抓到了一只「真的」bug。

这个玩笑只有在 bug 这个词已经流行了几十年的前提下才成立。

但故事在传播的过程中,玩笑的前提被省略了,只剩下了结论。就像牛顿和苹果,苹果是真的,但砸在头上是后人加的。哥伦布竖鸡蛋,鸡蛋是真的,但故事是编的。我们总是选择更有画面感的版本来记忆,丢掉真实但无聊的版本。

有些时候,事情的真相并不重要,重要的是我们愿意相信什么

程序员这个群体挺有意思的。天天跟逻辑和精确性打交道,却在自己行业的起源故事上,集体选了一个更好听的版本。

也许这就是人的本能吧。比起事实,我们更需要故事。

一只贴在日志上的飞蛾,确实比爱迪生写给电报公司总裁的一封商业信函,更像一个值得传下去的故事。

只不过,下次再有人跟你讲飞蛾的故事,你可以告诉他,那只蛾子是真的,但「从此叫 bug」这五个字,是我们自己加的。

bug 这个词,是一群 19 世纪的工程师在深夜跟机器较劲的时候,从中世纪的鬼故事里借来的。

署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
位旅人路过 次翻阅 初次见面