Dans le livre The Pragmatic Programmer , les auteurs mentionnent le concept de programmation par coïncidence . Il explique ce que c'est, pourquoi il est causé, quels sont les dangers que vous pouvez rencontrer et il se compare à un champ de mines terrestres en temps de guerre.
Avez-vous déjà regardé de vieux films de guerre en noir et blanc? Le soldat fatigué sort prudemment de la brosse. Il y a une clairière à venir: y a-t-il des mines terrestres ou est-il sûr de traverser? Rien n'indique qu'il s'agit d'un champ de mines - pas de panneaux, de barbelés ou de cratères. Le soldat pousse le sol devant lui avec sa baïonnette et grimace, s'attendant à une explosion. Il n'y en a pas. Il parcourt donc péniblement le champ pendant un moment, poussant et poussant au fur et à mesure. Finalement, convaincu que le terrain est sûr, il se redresse et marche fièrement en avant, pour être ensuite mis en pièces.
Les sondes initiales du soldat pour les mines n'ont rien révélé, mais ce n'était que de la chance. Il a été conduit à une fausse conclusion - avec des résultats désastreux.
En tant que développeurs, nous travaillons également dans les champs de mines. Il y a des centaines de pièges qui n'attendent que de nous attraper chaque jour. Rappelant l'histoire du soldat, nous devons nous garder de tirer de fausses conclusions. Nous devons éviter de programmer par coïncidence - en se fondant sur la chance et les succès accidentels - en faveur d'une programmation délibérée ...
Mais je ne suis pas vraiment satisfait de la façon dont ils décrivent le problème "comment le surmonter". Oui, il faut penser à l'avance avant d'écrire le code, mais comment pratiquer cela? La seule chose que je peux penser est en ajoutant des fonctionnalités aux projets Open Source existants, où vous devez avoir des connaissances à la fois sur "ce que je fais maintenant" et sur "Comment les autres morceaux de code fonctionnent", et ce n'est pas le cas lorsque vous écrivez vos propres projets.
MODIFIER:
un résumé de vos messages:
- Ne devinez pas votre prochain mouvement, prouvez qu'il est correct
- Test unitaire et refactoriser autant que possible, si nécessaire
- Ajouter des fonctionnalités - compiler - tester souvent
- Si vous ne pouvez pas expliquer le code à un noob, vous programmez probablement par hasard.
BTW, il est difficile d'accepter une réponse, c'est vraiment difficile. Toutes les réponses sont vraiment géniales :)