Por que erros comuns são tão comuns e o que podemos fazer para evitá-los?

20

Parece que erros fora de um são um dos erros de programação mais comuns (se não os mais comuns) (consulte /software/109/what-are-common-mistakes-in-coding e sabedoria convencional).

Qual é a razão pela qual isso é tão comum? Tem algo a ver com o funcionamento do cérebro humano?
O que podemos fazer para evitar ser vítima de um erro?

Malfist
fonte
8
Eles são comuns? Estou produzindo meu quinhão de bugs, mas os erros de um por um raramente são muito comuns entre eles. Talvez porque eu uso principalmente Python, ou seja, use iteradores em vez de fazer malabarismos com índices? (E: O que isso nos diz?;))
Quanto menos você tem que pensar, mais produtivo é?
Malfist 02/02
@ delnan: Eu concordo. Erros de um por um são geralmente os primeiros a serem detectados quando estou codificando (antes mesmo de passar para uma "fase de teste" oficial).
FrustratedWithFormsDesigner
7
Eu quase respondeu a pergunta anterior por engano ...
DevSolo
> O que podemos fazer para evitar ser vítima de um erro? Use um iterador .
Jim G.

Respostas:

18

É algo que tem a ver com o funcionamento do cérebro humano. Estamos preparados para ser "suficientemente bons" para tarefas que normalmente não exigem precisão de nível de engenharia. Há uma razão pela qual os casos com os quais temos mais problemas em lidar são chamados de casos "de ponta".

Provavelmente, a melhor maneira de evitar erros isolados é o encapsulamento. Por exemplo, em vez de usar um loop for que itera uma coleção por índice (de 0 a contar - 1), use um loop para cada estilo com toda a lógica de onde parar o enumerador. Dessa forma, você só precisa acertar os limites uma vez, ao escrever o enumerador, em vez de toda vez que percorrer a coleção.

Mason Wheeler
fonte
6
+1 para encapsulamento. Os piores erros isolados que já vi são quando parte do programa é baseada em 1 e parte é baseada em 0, e todas as funções usadas, você precisa se lembrar de qual era e se precisa faça a conversão ou não e em que direção seguir. Alguns meses atrás, eu tive que rastrear um erro difícil por 2 porque um encapsulamento ruim significava que alguém cometia erros fora de 1 em dois locais de composição separados. Havia conversões em todo o lugar que eram impossíveis de seguir e eu consegui reduzi-la a uma conversão em um método.
Karl Bielefeldt
2
Eu adoraria aprender mais sobre a ciência disso se alguém tiver mais informações. Eu também acho que é por isso que styling programático, como CSS, é tão frustrante onde tudo é bordas ...
Empresa Laser
7

Há algo de especial sobre como o cérebro lida com bordas e bordas.

Embora seja mais fácil para o cérebro pensar em termos de amplitude e espaço , focar em uma borda parece exigir um pouco mais de atenção. Aqui está como isso acontece, perda momentânea de atenção ou concentração insuficiente e você perdeu a fronteira.

Outro pequeno acréscimo ao problema é que diferentes ambientes de programação têm diferentes sistemas de indexação começando em 0 ou 1, o que pode adicionar confusão às pessoas ativamente expostas aos dois tipos de ambientes.


fonte
4

Eu acredito que é devido à mudança de contexto. No nosso dia-a-dia, tendemos a usar índices baseados em 1. Por isso, nosso cérebro é incapaz de queimar o comportamento correto na memória de longo prazo.

ChaosPandion
fonte
2
E há a diversão de alternar entre linguagens de programação que DO indexam começando em 1 (como PL / SQL).
FrustratedWithFormsDesigner
3
+1 para isso. A numeração indexada em 1 responde à pergunta "quantas são?", Que mapeia perfeitamente as tarefas do mundo real. O índice 0 é sobre "em que posição está cada item?", Que é menos útil no espaço de carnes.
Dan Ray