为什么程序员不遵循简单性?

发表在LessWrong.com上的一个实验引起了人们激烈的争论,争论的焦点在于合理性与理性思维陷阱,这也让我有所思考。事情是这样的:

从前有一个物理老师。一天她把自己的学生叫进教室,让他们看取暖电炉旁的一个方形金属板。每个学生都把手放在金属板上,发现金属板靠近电炉的一端要凉一些,而离电炉稍远点的一端却要热一些。老师问,你们觉得产生这种现象的原因是什么?一些学生猜是由于空气对流,还有人猜是由金属板内特殊的金属材质造成的。他们想出了很多有创意的答案,但始终没有人原意屈服说“我不知道”或者“这不太可能。”

最终的原因是学生进教室之前,老师把金属板两端进行了调换。

这算是奥卡姆剃刀原理①一个最好的例子。但是这些不知情的学生跟那些面对着错误报告的一般程序员没什么两样。举个例子,有一个哥们在Linux内核包遇到奇怪的逻辑错误:

几周前,尽管我的桌面出现了一些异常,实在是说不通。我花了约半个小时埋头苦寻错误的根源,最终发现问题出在RAM上的一个未被检测到的翻转位上。

这位哥们让人钦佩地用了很长时间痛苦地追踪错误,最后在RAM中找到了故障位置。但他找出的最可能出错原因是什么?

对我来说,宇宙射线造成的位翻转这一问题,我经常假设发生在“别人”身上。我还想过即使我真的遇到了随机宇宙射线翻转位,我的电脑估计也只是崩溃了,我从来都不能真正地分辨出它跟随机内核错误的区别。

宇宙射线!如今,这种可能性存在了,是真的。但是这是最可能的解释吗?不,绝对不是。更可能的是:设计中的Bug造成的RAM错误。在RAM故障文档记录中,归结为问题的数量多于归结于宇宙射线。

为什么我们都固执地认为所有的问题都是客观造成的、不寻常的、超出正常的?

当你在代码中发现Bug时,你的反应是否如下:

  • 1. 嗯,我怀疑自己在简单的问题上弄错了?
  • 2. 我怀疑这是不是Linux中的内核错误造成的?

简单性不仅是优化的目标之一,也是追踪漏洞来源的目标。我总是说,别让真相被自己的想象蒙蔽了。

注:①奥卡姆剃刀原理的内容概括为八个字:“如无必要,勿增实体”,即“简单有效原理”。

 

原文作者:Dave  编译:伯乐在线 敏捷翻译组 – 高志翔

如需转载,但请注明原文/译文出处、译文超链接和译者等信息,否则视为侵权,谢谢合作!

收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部