Parece que los errores off-by-one son uno de los errores de programación más comunes (si no el más) (consulte /software/109/what-are-common-mistakes-in-coding y sabiduría convencional).
¿Por qué son tan comunes? ¿Tiene algo que ver con el funcionamiento del cerebro humano?
¿Qué podemos hacer para evitar caer en la trampa por un error?
Respuestas:
Es algo relacionado con el funcionamiento del cerebro humano. Estamos diseñados para ser "lo suficientemente buenos" para tareas que generalmente no requieren precisión de ingeniería. Hay una razón por la cual los casos con los que tenemos más problemas para tratar se llaman casos "extremos".
Probablemente la mejor manera de evitar errores fuera de uno es la encapsulación. Por ejemplo, en lugar de usar un bucle for que itera una colección por índice (de 0 a count - 1), use un bucle de estilo for-each con toda la lógica de dónde parar integrado en el enumerador. De esa forma, solo tiene que obtener los límites correctos una vez, al escribir el enumerador, en lugar de cada vez que recorre la colección.
fuente
Hay algo especial en cómo el cerebro maneja bordes y bordes.
Si bien es más fácil para el cerebro pensar en términos de rangos y espacios , centrarse en un borde parece requerir algo más de atención. Así es como sucede, pérdida momentánea de atención o concentración insuficiente y se perdió la frontera.
Otra pequeña adición al problema es que diferentes entornos de programación tienen diferentes sistemas de indexación que comienzan en 0 o 1, lo que puede agregar confusión a las personas expuestas activamente a ambos tipos de entornos.
fuente
Creo que se debe al cambio de contexto. En nuestra vida cotidiana, tendemos a usar índices basados en 1. Debido a esto, nuestro cerebro no puede grabar el comportamiento correcto en la memoria a largo plazo.
fuente