(en supposant le code de production)
J'ai tendance à aller un peu plus loin. J'ai écrit sur la façon de faire des programmes "idiot proof", mais je ne le qualifie pas toujours: j'écris beaucoup de code que d'autres personnes ne verront pas ou avec lequel ils ne travailleront pas (du moins, c'est ce à quoi on s'attend quand il est écrit). jeJe suis l'idiot dont j'essaie de me défendre dans ce cas. C'est une bonne chose que votre programme détecte des problèmes pour vous, et le problème a été tellement simplifié qu'il est assez évident qu'il y a une erreur et son origine. En réalité, les détails d'implémentation sont évidents lorsque vous écrivez un programme (sauf si vous l'implémentez prématurément), mais ils doivent être résumés et résistants aux erreurs pour les clients (même lorsque la localité du module existe). La raison en est que les programmes deviennent très complexes. Parfois, vous pouvez séparer les problèmes, mais pas tout le temps. Si vous maintenez vos composants très stricts, simples, bien encapsulés et à l'abri des puzzles, ils ont tendance à bien s'adapter et la plupart des défauts sont détectés avant leur expédition. Il est plus facile de réutiliser, et vous avez plus de confiance et plus de facilité à réutiliser les programmes. ces programmes complexes que vous écrivez deviennent plus complexes (même pour vous) après un certain temps d'absence du programme. Lorsque vous le lisez en 6 mois, la compréhension et le débogage peuvent prendre un temps absurde par rapport à la version idiot proof. Si un composant introduit un changement radical, il peut rester indétectable pendant longtemps sinon. Les programmes sont complexes. vous ne pouvez pas échapper à cette réalité, mais vous pouvez le rendre infaillible, ce qui vous facilitera grandement la vie lorsque quelque chose ne va pas ou s'il doit être réutilisé ou modifié. Par conséquent, l'approche imbécile signifie que votre logiciel peut être compris, réutilisé ou mis à jour par vos juniors ou les personnes les plus récentes de l'équipe (et pas seulement par quelqu'un d'aussi bon / expérimenté que vous). Le remplacement est une préoccupation distincte: si les gens aiment travailler avec vos programmes, vous faites du bon travail - ne ' Ne vous inquiétez pas du remplacement. Bien sûr, je pourrais imaginer des scénarios dans lesquels des programmes inintelligibles pourraient sauver votre travail, mais écrire un bon programme que d’autres peuvent utiliser et maintenir est clairement le moindre mal (regardez les réponses des autres). Si je me surprends à écrire quelque chose qui n'est pas idiot, j'essaie de résoudre ce problème.
En dehors du scénario où vous avez besoin de documentation pour pouvoir poursuivre un projet après 6 mois de pause, il semble exister un conflit d'intérêts évident entre le développeur et l'éditeur de logiciel.
Vous ne savez vraiment pas à quoi vous pensiez lorsque vous revisitez des implémentations en veille. Lorsque vous êtes vraiment expérimenté, le problème est plus simple car vous pouvez vous fier davantage aux méthodologies établies ou aux approches que vous utilisez. Cela suppose toutefois que ces méthodologies sont invariantes. Même si la documentation peut être laxiste, vous devez toujours être défensif dans vos implémentations (par exemple, vous savez mieux que de passer NULL dans ce scénario - testez cette condition).
Donc, en tant que programmeur, devriez-vous vraiment écrire une excellente documentation et un code facilement lisible pour tout le monde; ou devriez-vous écrire le code et la documentation de manière à ce que le travail soit fait et que vous puissiez le comprendre vous-même, mais qu'une autre personne puisse avoir du mal à le comprendre?
Je recommande l'approche imbécile, qui est encore plus claire et plus résistante aux erreurs que l'approche par facteur de bus. Ecrivez vos programmes et votre documentation de manière à ce qu'ils soient facilement compris par quelqu'un de l'extérieur du projet. C'est bon pour vous aussi. Cela augmentera votre valeur pour votre entreprise et votre équipe, ils ne voudront pas vous remplacer.