本文转载自公众号“读芯术”(ID:AI_Discovery)。
1996年6月24日,欧洲航天局的阿丽亚娜5号无人火箭在发射仅37秒后爆炸。三亿七千万的投资和十几年的努力在一瞬间付诸东流。
原因为何?源自一个简单的软件漏洞。它试图将可代表数十亿个潜在值的64位浮点型变量存储至只能代表65535个潜在值的16位整数中。也就是说,为了让火箭进入太空,需要分配更多的储存空间。
这告诉我们,小的失误会造成严重的后果,潜在危险最大,为此付出的代价最高。
程序出错时,几乎每一个明显的错误都会在代码中显现。这些错误会引发显而易见的编译器错误或运行错误,而编译器错误或运行错误会在用户界面或编译器中体现出来。开发人员很清楚,这些问题需要立即解决,所以这些错误几乎不会引发担忧。
最有可能的情况是,发现错误后,开发人员立刻进行修复,绝不会提交一份板上钉钉的半成品或编写了不符合预期目标的代码。
大象不咬人,因为可以以直观的方式将它们轻易驯服。从长远角度来看,它们不会惹任何麻烦,也不会造成任何伤害(除非命令它们那么做)。它们容易识别,通常会说,“看看我!关注我,我会向你表达爱意,你不会后悔的。”
与大象相对的是蚊子——代码中看似无关紧要且并不明显的部分,作为隐藏数据藏匿于看似有效的代码的backburner中。他们随时准备发动攻击,让代码毁于一旦。由此导致的错误包括:逻辑错误、设计问题、杂乱的代码以及有缺陷的非优化算法。
阿丽亚娜5号火箭发射的问题在于,研究人员复制了此前成功发射的阿丽亚娜4号火箭的工作代码。研究人员显然认为这些代码同样适用于阿丽亚娜5号,但这些代码并不能满足阿丽亚娜5号火箭的环境需求,无法应对新环境的要求。
图源:unsplash
此类问题通常在编写良好的测试代码中出现,这些测试代码旨在给系统施加尽可能多的压力,但如果不编写测试代码处理这些情况,可能会发生令人震惊的黑天鹅事件,从而造成严重的后果。
当遇到加载时间长、超时或限制时(特别是使用云后端时),通常会注意到这个细节。有些代码单独运行时效果会很好,但在编程时需意识到,单独运行顺利并不意味着它能够与大型数据集和其他组件协同工作。
如果不顾这些小问题,其结果将会令人大吃一惊。好消息是,有很多方法可以降低并最小化这些错误的影响。
不注意小的问题,最终会面临最大的问题。在某种程度上,阿丽亚娜5号事件的程序员值得同情。但是此类事件说明,在大量的压力测试和测试驱动开发的支持下,仔细编写代码尤为重要。
编程不只是写出能运行的代码,它还需要仔细周到的考虑:代码不是胡乱编写,许多新老程序员只是把代码片段拼凑在一起,就像试图把圆柱体塞进方孔一样。虽然圆柱也能塞进去,但并不合理,而且无论如何也不稳固。
图源:unsplash
因此,在编写代码时最好把这些问题放在心中:
当然,还可以问自己更多的问题,这些问题足够汇编成一个详尽的清单上述问题可能是最重要的,但却未得到足够的重视。通过限制潜在的未知错误,使不确定的事情成为已知,来降低代码中任何错误的风险,而非观察后才成为已知。
这些大错误不应成为长期关注点,因为大错误很容易更正和解决。日常的微小错误和不一致性才是真正需要关注的问题。
不懂计算机的她,为何成为了计算机科研界顶流? 大家好,我是鱼皮,今天带大家认...
本文转载自微信公众号「Java大数据与数据仓库」,作者柯同学 。转载本文请联系Ja...
为活跃腾讯云+社区的技术氛围,同时鼓励广大程序员们更好的学习和分享腾讯云技术...
2021年春,中国经济迎来新开局之年,阿里云加速器诚挚邀请明星创业企业,牵手全...
很多人了解数据分析在营销领域的重要性,因为其可以为努力提高市场份额的组织提...
本文已经过原作者 ichael Thiessen 授权翻译。 Vue v-model是一个指令,它提供了...
组织中围绕开源工作的努力是否转化为了个人或团队的成果?如果没有,需要考虑改进...
在 C++ 中,对文件的读写可以通过使用输入输出流与流运算符 和 来进行。当读写文...
年味到底是什么?不同的时代,人们迎接春节的方式也在变换。 在70后的眼里,年味...
对于现代软件研发来说 持续、快速、高质量、低风险地交付需求特性 是业务对研发...