计算机行业一句流行格言
“It’s not a bug,it’s a feature”——中文意思:“这不是一个故障,而是一种功能”。
没人知道是哪位计算机专家首次说出了上面的这句话,但每个人都知道这句漫不经心的调侃已经成为了计算机领域中最流行的格言。每当工程师和科学家遇到硬件或软件的故障时,都不免用这句格言自嘲一下。
不过,这句格言中有一个词语显得非常奇怪,那就是“bug”。这个词的本意是指“昆虫”,如今在计算机科学中却专指“故障”,而且相应地,修复故障的工作——“调试”,也被称为“debug”——“bug”的衍生词。
那么,形容昆虫的名词——“bug”,如何成为了计算机科学的术语?一个流传最广的说法是,1947年9月9日,美国哈佛大学的科学家在使用艾肯继电器式计算机(由美国海军制造的早期计算机,体型庞大)时遇到了电气故障。当科学家打开机器检查时,发现有一只飞蛾飞进了计算机,并导致计算机的一个继电器短路了。因此,这次计算机故障的确是一个“bug”,然后,“bug”也就成了“故障”的代名词。
爱迪生才是“发明者”
虽然上述事情确实发生过,但历史的真相告诉我们,这个故事并不是科学中“bug”的起源。实际上,在此之前,“bug”用于表示“故障”已有70多年的时间了。
早在1878年3月3日,美国发明家托马斯·爱迪生在给美国西部联盟电话公司的一封信件中写道:“你在一定程度上是对的,我确实在我的仪器中发现了一种新型昆虫(bug),但我不能叫它‘电话虫’,而应该叫它‘callbellum’,这种昆虫在所有电话呼叫装置中都能见到。”
爱迪生信中提到的这个“callbellum”并不是真正的昆虫,而是一种带有拉丁风格的幽默比喻。“call”指的是电话,“bellum”在拉丁语中是“战争”的意思。所以,爱迪生的意思是,自己正在和电话装置的故障问题做斗争。
到了晚年,爱迪生更加明确地将“故障”比作“bug”。在给好友西奥多·普斯卡斯的信中,爱迪生写道:“我所有的发明都是如此,第一步是直觉,伴随着灵感一起爆发,然后困难就出现了——这玩意产生了各种昆虫(bug),也就是五花八门的故障和小毛病。在一项发明取得商业成功或被定义为失败之前,都需要经历几个月的观察、测试和实践来寻找这些故障。毕竟,你在找房子的时候从来不会注意到蟑螂,只有真正住进去之后,它们才会暴露出来。”
灵感竟与电报有关
那么,爱迪生为何偏偏会想到“bug”这个词呢?爱迪生本人并没有解释这一点。但很多科学家猜想,这或许和电报技术的发展有关。
在电报问世以来的40多年时间里,有一个问题一直困扰着这项通信技术,那就是一条电线一次只能发送一条电报信息。19世纪中叶,随着电报通信在欧美的普及,上述问题变得越来越让人头痛,因为唯一允许发送更多电报信息的方法就是安装更多的电线。这样做不仅昂贵,也使电报装置显得极为臃肿复杂。
所以,世界各地的发明家希望找到一种可以通过一条电线传送多条信息的方法,这种方法如今被称为“多路复用”技术。到了19世纪70年代,多位发明家成功开发出了最早的“多路复用”技术——“声学”电报。这种电报通常用特定的声波频率来编码每一条单独的电报信息,可以允许多条信息沿着同一条电线发送。只要用一个设定好声波频率的接收器,就可以将电线中对应频率的信息提取出来。在“声学”电报的众多发明者之中,有一个人就是亚历山大·格拉汉姆·贝尔——他也是电话的发明者。
但电报的不足之处仍然存在,搭载各种声波频率的电报信息不停地产生响亮的咔哒声,这让许多电报操作员仿佛时刻在听一群昆虫的吵闹声,工作体验感非常差。1873年,爱迪生花了点力气,发明了一种电子设备,可以解决电报的噪音问题。他将自己的发明称为“bug catcher”或“bug trap”(两个词的意思都是“捕虫器”)。科学家猜想,这可能就是爱迪生习惯使用“bug”这个词的最初由来。
广泛而漫长的推广
爱迪生越来越频繁地使用“bug”,导致这个词开始频繁地出现在科技报刊中。1892年,“bug”正式收录进了美国工程师所编著的《标准电气词典》中,它首次成为了电气领域中的标准术语,被释义为:电器在工作或连接过程中出现的任何故障和麻烦。
到了20世纪,“bug”这个词逐渐在科学界得到了更多的认可,而且这种用法也开始进入到日常生活中。科学家注意到,1931年的一则“Baffle Ball”(世界上第一台商用弹球机)广告中,它自豪地宣称“在这个游戏中没有‘bug’”。1944年,科幻作家艾萨克·阿西莫夫也在短篇小说《抓兔子》中写道:“美国机器人必须从高级机器人中取出bug,而且那里的bug实在太多了,只要稍微测试一下就至少能找到六个”。
既然“bug”最初由爱迪生引入,而且在70多年里由许多出色的推广者来推广,那么为何人们一说起“bug”,总会最先想到1947年的飞蛾事件呢?这就要归功于检查时发现飞蛾的那位科学家了,她就是大名鼎鼎的格蕾丝·赫柏——计算机科学的先驱、程序员的鼻祖、同时也是美国海军的第一位女将军。
1947年9月9日下午3:45,赫柏小心翼翼地将那只略脆的飞蛾贴到了自己的工作日志上,兴奋地在飞蛾旁边写道:“这是首次发现的一个真正的‘bug’”。后来,这页带有历史价值的工作日志和页面上完整保存的飞蛾,被收藏在了美国史密森国家自然历史博物馆中。为了纪念赫柏以及令“bug”更加流行的飞蛾事件,世界各地都将9月9日定为了“测试员节”。每到这一天,科学家都要提醒大家,在使用计算机时,不要忘了还有测试员正不知疲倦地“搜寻”和“杀死”各种bug,他们在计算机科学中扮演的角色也很重要。