Mise à jour
Ma réponse entre guillemets pour souligner:
Je suis convaincu que la réponse qui stipule que les commentaires ne doivent pas être abordés dans les normes de codage, puis énumère un ensemble de questions défensives pour le combattre, est la seule réponse correcte.
Le problème ici est qu’une norme de codage n’est que cela, une norme . Les idées extrêmement subjectives ne devraient pas figurer dans une norme de codage . Il peut s'agir d'un guide des meilleures pratiques, mais ce guide ne peut pas être utilisé contre un développeur lors de la révision du code. À mon avis, une norme de codage devrait être aussi proche que possible de l'automatisé. Il y a tellement de temps perdu dans les revues de code à discuter de la dénomination, de l'espacement, des tabulations, des crochets, des commentaires, etc., alors que TOUT peut être automatisé. Même la réponse à propos de tables
et chairs
peut être automatisée. Les LINT'ers autorisent les dictionnaires, les contrôles de capitalisation par concept (variable, fonction, méthode, classe, etc.).
Même la vérification JavaDoc peut être mise en œuvre par un robot LINT'er avant qu'une demande d'extraction soit acceptée. Beaucoup de projets Open Source font exactement cela. Vous soumettez votre demande d'extraction, le code est construit avec un fichier Travis-CI, y compris l'analyse statique, et il doit satisfaire à toutes les normes de codage pouvant être exprimées de manière objective. Aucun humain ne sonne à propos de "mal faire" ou de "valeur" avec un commentaire, ou de la mauvaise façon de nommer des variables, et al. Ces discussions ne fournissent aucune valeur et sont mieux laissées à un robot tiers qui peut supporter le poids de notre codage émotionnel.
Pour réellement répondre à la question, il faudrait que nous écrivions une norme qui répondrait à la question suivante: Ce commentaire at-il une valeur? Une norme de codage ne peut pas dicter la "valeur" d'un commentaire. Pour cette raison, il devient nécessaire pour un humain de parcourir cette liste de contrôle. La simple mention de commentaires dans une norme de codage crée une liste de contrôle que l’affiche originale souhaite éviter.
C'est pourquoi les commentaires ne sont généralement pas traités par le compilateur et supprimés. Leur valeur ne peut être déterminée. Le commentaire en question est-il utile? Oui ou non?. Répondre à cette question est NP-difficile. Seuls les humains ont une chance de bien y répondre, et même dans ce cas, la personne qui le lit ne peut y répondre qu'au moment de la lire. où la valeur de ce commentaire dépend de la météo, de la vie de son foyer, de la dernière réunion à laquelle ils viennent d'assister et qui ne s'est pas bien terminée, de l'heure de la journée et de la quantité de café qu'ils ont pris. J'espère que la photo devient plus claire.
Comment peut-il être exprimé correctement dans une norme? Une norme n'est utile que si elle peut être appliquée de manière cohérente et équitable, lorsque juste signifie plus d'objectivité que d'émotionnel.
Je conteste le fait qu'une norme de codage doit rester aussi objective que possible. La façon dont les variables sont nommées objectif IS. Ils peuvent facilement être comparés à un dictionnaire pour l’orthographe, la structure grammaticale et l’habillage appropriés. Tout ce qui est au-delà est un "match de pisse" qui est gagné par la personne qui a le plus de pouvoir ou par "se battre les sourcils". Quelque chose que je lutte personnellement avec ne pas faire.
Quand je commente, je commente toujours parler à mon futur moi à la troisième personne. Si je reviens à ce code dans 5 ans, que devrais-je savoir? Qu'est-ce qui pourrait être utile, qu'est-ce qui pourrait prêter à confusion et qu'est-ce qui serait obsolète avec le code? Il existe une différence entre le code de documentation pour générer une API publique interrogeable et le code de commentaire qui fournit une valeur à un tiers inconnu, même si ce tiers est vous-même.
Voici un bon test décisif. Si vous étiez le seul sur le projet. Vous saviez que vous seriez le seul sur le projet. Qu'y aurait-il dans votre norme de codage? Vous voudriez que votre code soit propre, explicite et compréhensible pour vous-même à l'avenir. Souhaitez-vous une révision de code avec vous-même sur les raisons pour lesquelles vous n'avez pas mis de commentaire sur chaque ligne? Souhaitez-vous passer en revue chaque commentaire que vous avez créé sur les 100 fichiers que vous avez archivés? Si non, alors pourquoi forcer les autres?
Je pense que quelque chose manque dans ces discussions, c'est que Future You est également un développeur de ce projet. Quand vous posez des questions sur la valeur, demain, vous êtes également une personne qui peut tirer une valeur du commentaire. Donc, la taille de l'équipe, à mon avis, n'a pas d'importance. L'expérience d'équipe n'a pas d'importance, cela change trop souvent.
Aucune quantité de code de commentaire passant en revue n'empêche un stimulateur de planter et de tuer un patient. Une fois que vous parlez d'un commentaire qui affecte le code, vous parlez maintenant du code et non du commentaire. Si tout ce qu'il faut, c'est un commentaire manquant pour tuer quelqu'un, il y a autre chose qui sent le processus.
La solution à ce type de codage rigoureux a déjà été fournie en tant que méthodologie pour écrire un logiciel lui-même. Et cela n'a rien à voir avec les commentaires. Le problème avec les commentaires est qu’ils n’ont AUCUN impact sur le fonctionnement final du produit. Les meilleurs commentaires au monde ne peuvent empêcher les logiciels de planter lorsqu'ils sont intégrés à un stimulateur. Ou lors de la mesure des signaux électriques avec un électrocardiographe portable.
Nous avons deux types de commentaires:
Commentaires lisibles par machine
Les styles de commentaire tels que Javadoc, JSDoc, Doxygen, etc. constituent tous des moyens de commenter l'interface publique fournie par un ensemble de code. Cette interface ne peut être utilisée que par un seul autre développeur (code propriétaire pour une équipe de deux personnes), un nombre inconnu de développeurs (par exemple, JMS) ou par un département entier. Ce code peut être lu par un processus automatisé qui produit alors une manière différente de lire ces commentaires, tels que HTML, PDF, etc.
Ce type de commentaire est facile à créer une norme pour. Il devient un processus objectif permettant d’assurer que chaque méthode, fonction ou classe pouvant être appelée publiquement contienne les commentaires requis. En-têtes, paramètres, description et. el. Cela permet à une autre équipe de trouver et d'utiliser facilement le code.
Je fais quelque chose qui semble fou, mais ce n'est vraiment pas
Ces commentaires sont ici pour aider les autres à savoir POURQUOI ce code a été écrit d’une certaine manière. Il existe peut-être une erreur numérique dans les processeurs sur lesquels le code est exécuté et les arrondis sont toujours arrondis, mais les développeurs gèrent généralement le code qui les arrondit. Nous commentons donc pour nous assurer que le développeur qui manipule le code comprend pourquoi le contexte actuel fait quelque chose qui semblerait normalement déraisonnable, mais qui en réalité a été écrit ainsi.
Ce type de code est ce qui cause tant de problèmes. Il va généralement sans commentaires et est ensuite trouvé par un nouveau développeur et "corrigé". Donc tout casser. Même dans ce cas, les commentaires ne sont là que pour expliquer le POURQUOI ne pas empêcher quoi que ce soit de casser.
On ne peut pas compter sur les commentaires
Les commentaires sont finalement inutiles et on ne peut pas leur faire confiance. Les commentaires ne changent normalement pas le mode de fonctionnement des programmes. Et s’ils le font, alors votre processus cause plus de problèmes qu’il devrait le faire. Les commentaires sont des pensées après coup et ne peuvent jamais être autre chose. Le code est tout ce qui compte car c’est tout ce qui est traité par l’ordinateur.
Cela peut sembler bizarre, mais supportez-moi. Laquelle de ces deux lignes compte vraiment?
// We don't divide by 0 in order to stop crashes.
return 1 / n;
Dans cet exemple, tout ce qui compte est que nous ne sachions pas ce que c'est 'n', il n'y a pas de contrôle pour que n soit égal à 0, et même s'il y en avait, rien n'empêche un développeur de mettre n = 0
APRÈS le contrôle de 0. Ainsi, le commentaire est inutile et rien automatisé ne peut jamais attraper cela. Aucune norme ne peut attraper cela. Le commentaire, bien que joli (à certains) n'a aucune incidence sur le résultat du produit.
Développement piloté par les tests
Qu'est-ce qui a un résultat sur le produit? Les industries dans lesquelles le code en cours d'écriture peut littéralement sauver ou tuer quelqu'un doivent être rigoureusement vérifiées. Cela se fait par des révisions de code, des révisions de code, des tests, des révisions, des révisions de code, des tests unitaires, des tests d’intégration, des essais d’intégration, des essais, des tests sur plusieurs mois, des examens de code et des essais pour une seule personne, des évaluations de code, des examens, et enfin peut-être enfin. entrer dans la production. Les commentaires n'ont rien à voir avec cela.
Je préférerais que le code ne contienne AUCUN commentaire, ait une spécification, ait des tests unitaires qui vérifient la spécification, des études des résultats de l'exécution du code sur le périphérique de production, puis un code bien documenté qui n'a jamais été testé, ni rien qui puisse comparer les résultats. code contre.
La documentation est agréable lorsque vous essayez de comprendre POURQUOI quelqu'un a fait quelque chose d'une certaine manière, cependant, j'ai découvert au fil des ans que la documentation est généralement utilisée pour expliquer pourquoi une chose "intelligente" a été faite, alors qu'elle n'en avait vraiment pas besoin être écrit de cette façon.
Conclusion
Si vous travaillez dans une entreprise qui DEMANDE que chaque ligne soit commentée, je vous garantis qu'au moins deux des ingénieurs en logiciels du projet ont déjà écrit un programme auto-documenté en Perl, Lisp ou Python qui détermine l’idée générale de ce que fait la ligne. , ajoute ensuite un commentaire au-dessus de cette ligne. Parce que cela est possible, cela signifie que les commentaires sont inutiles. Trouvez les ingénieurs qui ont écrit ces scripts pour documenter automatiquement le code et utilisez-les comme preuve de la raison pour laquelle le "Commentaire sur chaque ligne" fait perdre du temps, ne fournit aucune valeur et peut être préjudiciable.
D'un côté, j'aidais un ami proche avec un travail de programmation. Son professeur avait imposé à chaque ligne d'être documentée. Je peux donc voir d'où viendrait ce processus de pensée. Demandez-vous simplement ce que vous essayez de faire et est-ce la bonne chose à faire? Alors demandez-vous; Existe-t-il un moyen de «jouer» au système avec ce processus? Si c'est le cas, ajoute-t-il vraiment une valeur? On ne peut pas écrire automatiquement des tests unitaires qui vérifient que le code respecte une certaine spécification, et s’ils le pouvaient, ce ne serait pas une mauvaise chose.
Si un périphérique doit fonctionner dans certaines conditions, car il se trouve à l'intérieur d'un humain, le seul moyen de s'assurer qu'il ne va pas le tuer est des années de test, d'examen par les pairs, de tests et de NE JAMAIS JAMAIS changer le code à nouveau. C'est pourquoi la NASA utilise / utilisait encore de tels matériels et logiciels. En ce qui concerne la vie ou la mort, vous ne faites pas simplement un petit changement et vous ne l'enregistrez pas.
Les commentaires n'ont rien à voir avec sauver des vies. Les commentaires sont pour les humains, les humains font des erreurs, même lorsqu'ils écrivent des commentaires. Ne faites pas confiance aux humains. Ergo, ne faites pas confiance aux commentaires. Les commentaires ne sont pas votre solution.