Pourquoi les erreurs sont-elles si fréquentes et que pouvons-nous faire pour les éviter?

20

Il semble que les erreurs ponctuelles soient l'une des erreurs de programmation les plus courantes (sinon les plus fréquentes) (voir /software/109/what-are-common-mistakes-in-coding et sagesse conventionnelle).

Quelle est la raison pour laquelle ils sont si courants, est-ce lié au fonctionnement du cerveau humain?
Que pouvons-nous faire pour éviter de tomber en proie à une erreur?

Malfist
la source
8
Sont-ils courants? Je produis ma juste part de bogues, mais les erreurs ponctuelles en sont très rarement. Peut-être parce que j'utilise principalement Python, c'est-à-dire que j'utilise des itérateurs au lieu de jongler avec des indices? (Et: qu'est-ce que cela nous dit
Moins vous y pensez, plus vous êtes productif?
Malfist
@delnan: Je suis d'accord. Les erreurs ponctuelles sont généralement les premières à être détectées lors du codage (avant même de passer à une "phase de test" officielle).
FrustratedWithFormsDesigner
7
J'ai failli répondre à la question précédente par erreur ...
DevSolo
> Que pouvons-nous faire pour éviter de tomber en proie à une erreur? Utilisez un itérateur .
Jim

Réponses:

18

C'est en quelque sorte quelque chose à voir avec le fonctionnement du cerveau humain. Nous sommes câblés pour être "assez bons" pour des tâches qui ne nécessitent généralement pas une précision de niveau technique. Il y a une raison pour laquelle les cas que nous avons le plus de difficulté à traiter sont appelés cas «marginaux».

L'encapsulation est probablement la meilleure façon d'éviter les erreurs de coupure. Par exemple, au lieu d'utiliser une boucle for qui itère une collection par index (de 0 à count - 1), utilisez une boucle de style for-each avec toute la logique de l'endroit où s'arrêter intégrée dans l'énumérateur. De cette façon, vous n'avez à obtenir les bonnes limites qu'une seule fois, lors de l'écriture de l'énumérateur, au lieu de chaque fois que vous parcourez la collection.

Mason Wheeler
la source
6
+1 pour l'encapsulation. Les pires bogues ponctuels que j'ai jamais vus sont quand une partie du programme est basée sur 1 et une partie est basée sur 0, et chaque fonction utilisée, vous devez vous rappeler laquelle il s'agissait et si vous devez faire la conversion ou non et dans quelle direction aller. Un couple mois que je devais retrouver un hors sous - difficile 2 erreur , car une mauvaise encapsulation quelqu'un a signifié hors-1 par des erreurs dans deux endroits distincts de composition. Il y avait des conversions partout qui étaient impossibles à suivre et j'ai pu le réduire à une conversion dans une méthode.
Karl Bielefeldt
2
J'aimerais en savoir plus sur la science de tout cela si quelqu'un a plus d'informations. Je pense aussi que c'est pourquoi le style programmatique, comme CSS, est si frustrant là où tout est bord ...
Company Laser
7

Il y a quelque chose de spécial dans la façon dont le cerveau gère les bordures et les bords.

Bien qu'il soit plus facile pour le cerveau de penser en termes de plages et d' espaces , se concentrer sur un bord semble nécessiter un peu plus d'attention. Voici comment cela se passe, une perte d'attention momentanée ou une concentration insuffisante et vous avez raté la frontière.

Un autre léger ajout au problème est que différents environnements de programmation ont des systèmes d'indexation différents commençant à 0 ou 1, ce qui pourrait ajouter de la confusion aux personnes activement exposées aux deux types d'environnements.


la source
4

Je pense que cela est dû au changement de contexte. Dans notre vie de tous les jours, nous avons tendance à utiliser des index basés sur 1. Pour cette raison, notre cerveau est incapable de graver le bon comportement dans la mémoire à long terme.

ChaosPandion
la source
2
Et puis il y a le plaisir de basculer entre les langages de programmation qui DO indexent à partir de 1 (comme PL / SQL).
FrustratedWithFormsDesigner
3
+1 pour cela. La numérotation indexée 1 répond à la question "combien y en a-t-il?", Qui correspond parfaitement à la plupart des tâches du monde réel. L'index 0 concerne «quelle position chaque élément est-il?», Ce qui est moins utile dans l'espace de viande.
Dan Ray