程序漏洞为什么叫bug
作者:百科 来源:时尚 浏览: 【大 中 小】 发布时间:2026-10-17 06:41:18 评论数:
1947年9月9日,程序哈佛大学马克II计算机的漏洞操作员在日志本上贴了一只飞蛾。翅膀被继电器压扁,程序触角还粘在金属触点上。漏洞他们用胶带把虫子固定在页面,程序旁边写了一行字:“First actual case of bug being found.” 这是漏洞有记录以来第一次从机器里揪出真正的“虫”。但“bug”这个词并不是程序这天诞生的。
早在1878年,漏洞爱迪生就在给友人的程序信里抱怨他的发明“出了bug”——他说的bug不是昆虫,而是漏洞某种设计上的小毛病。那个年代,程序工程师们已经习惯用这个词指代机械结构里难以定位的漏洞故障。为什么是程序bug?没人能给出精确词源。一种说法是漏洞,早期电报机线路杂乱如蛛网,程序故障常由爬进设备的虫子引发。另一种更可信的解释:bug在古英语里本就指“幽灵、吓人的东西”,后来引申为“令人头疼的麻烦”。技术圈借用它,图的是那种“莫名其妙冒出来、找半天找不到”的恼人感。
马克II那只飞蛾之所以出名,是因为它把隐喻变成了实物。操作员把虫子尸体贴进日志,等于给“bug”这个词拍了张证件照。从此软件工程师说“调试”(debug),脑子里浮现的就是从复杂系统里一只只捏出虫子的画面。这个意象太精准了——程序故障确实像虫子:藏得深,繁殖快,刚拍死一只又冒出一窝。
但问题来了:为什么偏偏是英文的bug?中文里“程序漏洞”听起来像水管渗水,“故障”又太笼统。其实中文技术圈早年也用过“臭虫”直译,后来嫌恶心,改叫“漏洞”。漏洞这个词偏静态,强调系统有缺口;bug偏动态,强调故障会自己爬出来。两种说法各有道理,但bug更贴近程序员日常体验——你改好一个功能,测试跑一遍,另一个地方又崩了。那种感觉就像你明明关了窗,屋里还是飞进一只蚊子。
我写代码十年,印象最深的一个bug发生在2016年。一个电商项目上线后,订单金额偶尔少算一分钱。查了两天,发现是浮点数精度问题:0.1加0.2不等于0.3,而是0.30000000000000004。系统四舍五入时,这个尾巴被切掉,导致累计误差。修复方案很简单,把金额从float改成decimal。但找它的过程像在稻草堆里摸针——你明知道针就在那,可每一根稻草看起来都差不多。
这种“找不到”的焦虑,才是bug这个词真正捕捉到的东西。它不只是错误,而是错误带来的失控感。你面对的是自己写的逻辑,却像面对一只钻进墙缝的蟑螂,知道它在,就是够不着。所以程序员管调试叫“抓虫”,抓到了松口气,抓不到就通宵。马克II那只飞蛾早死了,但它留下的隐喻还活着:每个软件里都住着看不见的虫子,你只能一只一只抓,永远抓不完。
下次你的手机App闪退,别急着骂开发者。他们可能正对着日志里一行红字,像1947年那个操作员一样,用镊子夹着一只逻辑的飞蛾,往胶带上贴。
