当前位置:首页 > 热点

漏洞英文bug

1947年9月9日,漏洞哈佛大学马克-II型计算机的英文操作员在继电器里发现了一只被电死的飞蛾。格蕾丝·霍珀把它粘进日志本,漏洞在旁边写下“first actual case of bug being found”。英文那只飞蛾至今还贴在那页纸上,漏洞成了程序世界最著名的英文殉道者。

但bug这个词的漏洞流行,远早于那只蛾子。英文爱迪生在1878年写给助手的漏洞信里就抱怨过“bugs in my apparatus”——这位发明家口中的bug,指的英文是那些让电路接触不良的物理缺陷。你看,漏洞从电报时代到人工智能时代,英文bug的漏洞本质从来没变过:它从来不是“错误”本身,而是英文现实世界对理想逻辑的粗暴干涉。

我见过最荒诞的漏洞bug,发生在某银行核心系统里。凌晨三点,所有账户余额突然同时多了0.01元。排查了三天,最后发现是某个开发者在代码里写了个循环:for (int i = 0; i <= 100; i++)——注意那个等号,多跑了一次。就是这多出的1%,让全行几百万个活期账户都收到了“利息”。没人报警,因为没人会为了一分钱打电话投诉。但银行连夜修复时,那个开发者说了一句话让我记到现在:“我明明测试过99次,第100次是我没预料到的。”

这句话几乎概括了所有bug的成因。你永远在跟“预料之外”搏斗。硬件会老化,网络会抖动,用户会输入你做梦都想不到的字符。更麻烦的是,bug往往藏在最合理的地方——就像那个经典的“千年虫”,当年程序员为了省内存用两位数字存年份,谁也没想到系统会运行到2000年。

有个规律挺有意思:越是“聪明”的代码,越容易出致命bug。因为聪明意味着复杂,复杂意味着更多的状态组合。我认识一位搞自动驾驶的工程师,他说他们最怕的不是算法不够强,而是某个雨夜、某条没标线的乡道、某棵被风吹歪的树——这些真实世界的“噪声”会让最完美的模型瞬间失效。他管这叫“长尾bug”,像一条看不见的尾巴,永远甩不掉。

所以你看,bug其实是逻辑世界和物理世界之间那道永远填不平的沟。代码是纯粹的数学,但运行代码的是沙子做的芯片,是铜做的导线,是会疲倦的人类。我们总说“修复bug”,但更准确的说法可能是“暂时骗过它”。就像你家里那扇总卡住的木门,你往合页上滴点油,它老实一阵子,但雨季一来,它照样闹脾气。

那只死在继电器里的飞蛾,其实挺无辜的。它只是被光吸引,误闯进了一个不该属于它的世界。而每一个写代码的人,某种程度上都是那只飞蛾——我们以为自己在逻辑的真空里翱翔,却总被现实世界撞得头破血流。但有意思的是,正是这些“撞墙”的时刻,逼着我们去理解真实世界的复杂。没有bug,就没有更健壮的系统;没有那些凌晨三点的紧急修复,就没有对技术更深一层的敬畏。

说到底,bug不是程序的敌人,而是程序的影子。你跑得越快,影子拖得越长。接受这一点,比幻想写出“零缺陷”代码要务实得多。毕竟,连那只飞蛾都成了计算机史上最著名的纪念品——而它唯一做错的,只是太靠近光。

分享到: