为什么一个失误如此普遍,我们应该怎么做才能防止它们?


20

似乎一对一错误是最常见(如果不是最常见)的编程错误之一(请参阅/software/109/what-are-common-mistakes-in-coding,以及传统知识)。

这些现象如此普遍的原因是什么,这与人脑的工作方式有关吗?
我们怎样做才能防止被错误误捕的猎物?


8
它们很常见吗?我正在产生大量的错误,但是在其中很少会出现一对一的错误。也许是因为我主要使用Python,即使用迭代器而不是处理索引?(而且:这告诉我们什么?;)))

您思考的越少,您的生产力就越高?
Malfist 2011年

@delnan:我同意。通常,在我进行编码时(在进入正式的“测试阶段”之前)首先会发现脱位错误。
FrustratedWithFormsDesigner

7
我差点差点回答了前面的问题……
DevSolo 2011年

>我们如何防止因错误而使猎物掉下来?使用迭代器
Jim G.

Answers:


18

这与人脑的运作方式有关。我们认为对于通常不需要工程级精度的任务来说“足够好”。我们最难以处理的案例被称为“边缘”案例,这是有原因的。

避免一次性错误的最好方法是封装。例如,与其使用一个按索引迭代集合(从0到count-1)的for循环,不如使用一个for-each样式循环以及在哪里停止枚举器的所有逻辑。这样,您在编写枚举器时只需要一次正确地确定范围,而不必每次循环遍历该集合时。


6
+1用于封装。我见过的最严重的错误是当程序的一部分基于1且一部分基于0且使用了每个函数时,您必须记住它是哪个,以及是否必须进行转换与否以及要走的方向。几个月前,我不得不找出一个难于解决的2错误,因为封装不当意味着某人在两个单独的复合位置犯了1错误。到处都有转换,这些转换是不可能进行的,我能够用一种方法将转换为一次转换。
Karl Bielefeldt

2
如果有人有更多信息,我想了解更多有关此科学的知识。我也认为这就是为什么程序设计样式(如CSS)如此令人沮丧,因为一切事物都是边缘...
Company Laser

7

关于大脑如何处理边界和边缘,有一些特别之处。

尽管大脑更容易根据范围空间进行思考,但集中在边缘上似乎需要更多的注意力。发生这种情况,暂时失去注意力或注意力不集中而您错过了边境。

这个问题的另一个轻微补充是,不同的编程环境具有从0或1开始的不同索引系统,这可能会使活跃地接触这两种环境的人们感到困惑。


4

我相信这是由于上下文切换。在日常生活中,我们倾向于使用基于1的索引。因此,我们的大脑无法将正确的行为转化为长期记忆。


2
然后,有趣的是在DO索引从1开始的编程语言之间进行切换(例如PL / SQL)。
FrustratedWithFormsDesigner

3
+1。1索引编号回答了“有多少个?”这个问题,它巧妙地映射到大多数现实世界中的任务。0索引表示“每个项目在什么位置?”,在肉类空间中使用较少。
丹·雷
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.