那些曾让世界震惊的程序BUG们, 后来都怎么样了?
The following article is from 来Offer网 Author 正在招生的
对于刚刚接触编程的学生来说,Coding的时候经常会发生一些让人无奈的语法或者逻辑上的问题。
下图是一段Run不过的代码,你能在1分钟内看出下图中都有哪些Bug吗?
一个中文分号、一次Tab、Space混用、一个括号错误,就可能要花上很长的时间Debug,甚至会让你挂掉OA和面试。
即使如此,在教学中,我们还是发现有同学对于Debug和跑Test不够耐心。
今天就分享一些让人目瞪口呆的Bug,告诉大家:Debug和跑Test到底有多!么!重!要!
01
世界上第一个Bug与千年虫
1947年,编译器之母格蕾丝·赫帕的电脑出现了问题,经过排查发现,原来是一只虫子卡在了计算机的继电器中。世界上的第一个计算机“Bug”就由此产生了。
让人没想到的是,这位杰出 女程序员的“Bug”,在她去世之后,又引起了千年虫危机。
当时,为了节约宝贵的存储空间,她创造的编译程序COBOL只使用6位数来表示日期,即MM/DD/YY,当2000年即将到来的时候,人们才突然发现,该程序无法区分1900年和2000年,这让使用这套程序的企业和政府机关非常恐慌,急忙由政府出面进行Debug。但在有些相对落后的国家,还是造成了大规模的断电、政府和金融部门的停摆。
02
iOS致命漏洞竟源于低级错误
苹果推出iOS7后,就不断的被爆出各种安全问题。其中一个安全漏洞对于消费者来说很不起眼,却非常严重。
这个安全漏洞,完全是因为程序员的疏忽。以下就是导致这个问题的代码:
上图中有两个连续的goto fail语句,第二个goto fail由于不受if语句的限制,在任何情况下都会执行,从而导致安全签名的认证永远不会失败。
这意味着,对于有心窃取用户信息或者传播病毒的人来说,不管有没有正确的密钥和签名,都可以通过iOS的安全认证。
据报道,这个小小的Bug不止影响iOS、OSX和Safari,还会将苹果端的Mail、Twitter、iMessage等程序都置于险地。
这个故事还说明了,在C语言中,爱写大括号是个多么好的习惯。
除了虚拟世界的问题,
一个微小的Bug,
还能造成更加严重的后果。
03
两放烟花,损失超过10亿美金
1996年阿丽亚娜5型运载火箭在升空途中自毁,1997年火星气候探测者号坠落火星。
调查显示,阿丽亚娜5型自毁的根源在于程序员偷懒。程序员将原本用于4型的测速程序,直接复制到了5型上面。没有想到,由于两者性能的不同,4型程序中的16位内存已不足以支持5型的计算,造成了数据溢出,最终系统瘫痪自爆。
而火星气候探测者号的Bug却在于地面团队与航天器的数据单位不同。地面团队用pound second,即磅/秒为单位计算,而探测器却使用了牛顿/秒,导致导航错误,数据相差超过100公里,最终在火星大气中燃烧解体。
不到两年的时间,就有两个航天器变成了两枚上亿美元的烟花,二者都是由于程序中的看似不起眼的Bug所导致的。
04
死亡28人,原因是毫秒级延迟
1992年2月,一枚飞毛腿导弹落在了美军宰赫兰军事基地,造成了28死,100多伤,是美军在海湾战争中,单次死伤最多的事件。
所有人的疑问都是,基地配备的爱国者反导系统为什么没能做出有效拦截?
调查发现,罪魁祸首是爱国者的时钟计时。
爱国者的时钟只有24位存储空间,时间精度有限,导致其工作的时候,系统时钟每小时会产生一个0.0033秒的延迟。这本无大碍。但是,位于宰赫兰的爱国者当时已经连续工作了100个小时,这个时间误差积累到了0.33秒。
这是什么概念呢?飞毛腿导弹的时速约为1500米/秒,0.33秒的时间足以产生500米的误差。
最终爱国者没能拦截导弹,酿成悲剧。
看似不起眼的Bug却造成了让人目瞪口呆的后果:新千年的混乱、iOS的安全漏洞、海湾战争最大单次伤亡和两次数亿美金航天器的爆炸……
所以说,做到Bug Free,是对于程序员最基本的业务要求。
在竞争愈发激烈的求职市场,如果仅仅具备Average的能力,很难在众多应征者中脱颖而出。
找工作没有捷径,只有成为一个Solid的程序员,才能在日益复杂的求职环境中,突出重围,拿到心仪的Offer。
本文授权转载自“来Offer网”,公众号见下方二维码