程序员们都是怎样被BUG虐杀的?
在现今数字年代,计算机bug大到影响国家经济,小到影响每个人的衣食住行,每次bug出现时程序员们也是生不如死。互联网半个多世纪的发展中经历过哪些著名的bug,一起回顾一下。
1、万“虫”之母,史上留名
(软件史上第一虫)
1947年9月9日下午3点45分,Grace Murray Hopper在她的记录本上记下了史上第一个计算机Bug――在Harvard Mark II计算机里找到的一只飞蛾,她把飞蛾贴在日记本上,并写道”First actual case of bug being found”。这个发现奠定了Bug这个词在计算机世界的地位,变成无数苦逼程序员的噩梦。 从那以后,Bug这个词在计算机世界表示计算机程序中的错误或者疏漏,它们会使程序计算出莫名其妙的结果,甚至引起程序的崩溃。Grace Murray Hopper是历史上最早一批程序员,而且还是个女程序员,服役于美国海军,官至准将。
这是流传最广的关于计算机Bug的故事,可是历史的真相是,Bug这个词早在发明家托马斯・爱迪生的年代就被广泛用于指机器的故障,这在爱迪生本人的1870年左右的笔记里面也能看得到。而电气电子工程师学会IEEE也将Bug这一词的引入归功于爱迪生。
2、千年虫,炒作的狂欢
(1999年给了哗众取宠的杂志小报极好的题材)
在上个世纪,软件业者从来没想过他们的代码和产品会跨入新千年。因此,很多软件业者为了节省内存省略掉代表年份的前两位数字”19”,或者默认前两位为”19”。
而当日历越来越接近1999年12月31日时,人们越来越担心在千禧年的新年夜大家的电脑系统都会崩溃,因为系统日期会更新为1900年1月1日而不是2000年1月1日,这样可能意味着无数的灾难事件,甚至是世界末日。
到今天,我们可以调侃这个滑稽的故事,因为核导弹并没有自动发射,飞机也没有失控从天上掉下来,银行也没有把国家和用户的大笔存款弄丢。
千年虫Bug是真实的,全球花了上亿的美金用来升级系统。而且,也发生了一些小的事故:
在西班牙,停车场计费表坏了;法国气象局公布了19100年1月1日的天气预报;在澳洲,公共汽车验票系统崩溃。就这样而已。最后盘点的结果是软件公司赚了大钱,八卦小报销量大增,很多程序员的千禧年夜party泡汤了,几个中国文盲老太太被人骗了养老金,不可谓不严重。
3、宰赫兰导弹事件,毫秒的误差
在1991年2月的第一次海湾战争中,一枚伊拉克发射的飞毛腿导弹准确击中美国在沙地阿拉伯的宰赫兰基地,当场炸死28个美国士兵,炸伤100多人,造成美军海湾战争中唯一一次伤亡超过百人的损失。
在后来的调查中发现,由于一个简单的计算机bug,使基地的爱国者反导弹系统失效,未能在空中拦截飞毛腿导弹。当时,负责防卫该基地的爱国者反导弹系统已经连续工作了100个小时,每工作一个小时,系统内的时钟会有一个微小的毫秒级延迟,这就是这个失效悲剧的根源。爱国者反导弹系统的时钟寄存器设计为24位,因而时间的精度也只限于24位的精度。在长时间的工作后,这个微小的精度误差被渐渐放大。在工作了100小时后,系统时间的延迟是三分之一秒。
对一般人人来说,0.33秒是微不足道的。但是对一个需要跟踪并摧毁一枚空中飞弹的雷达系统来说,这是灾难性的――侯赛因飞毛腿导弹空速达4.2马赫(每秒1.5公里),这个”微不足道的”0.33秒相当于大约600米的误差。在宰赫兰导弹事件中,雷达在空中发现了导弹,但是由于时钟误差没有能够准确地跟踪它,因此基地的反导弹并没有发射。
(宰赫兰导弹事件图解)
4、公尺还是英尺?火星气候探测者号的星际迷航
火星气候探测者号在1997年发射,目的为研究火星气候,但是它没有能够达成这项花费3亿多美元的使命。
探测者号在太空中飞行几个月以后,由于导航错误,最终在火星大气层解体。探测器的控制团队使用英制单位来发送导航指令,而探测器的软件系统使用公制来读取指令。这一错误大大改变了导航控制的路径。最后探测器进入过低的火星轨道(大约100公里误差),在过大的火星大气压力和摩擦下解体。
(公尺还是英尺?偏离100公里!)
嗯哼,所以不要惹怒程序员噢,不然被BUG虐掉的他们,也可以攒BUG分分钟灭了你……