Hygiène des Changements et Artisanat du Code
Aperçu
Comment les changements sont façonnés et comment le code est écrit. Deux thèmes : séparer les changements structurels des changements comportementaux, et dire ce que l'on veut avec le moins d'astuce qui fonctionne.
Hygiène des Changements
- Les changements structurels avant les changements comportementaux, validés indépendamment. La réorganisation (scinder des fichiers, renommer, ajouter des commentaires) est une étape distincte et vérifiable indépendamment de la modification du comportement (nouvelles contraintes, logique modifiée). Ne les mélangez jamais en un seul changement indivisible — un relecteur ne peut pas distinguer un remaniement sûr de véritables changements logiques.
- Un seul sujet par changement. Un changement a un objectif unique et énonçable.
- Améliorez le code dans lequel vous travaillez lorsque ses problèmes affectent votre tâche (laissez le campement plus propre) — mais ne commencez pas un refactoring non lié. Restez concentré sur l'objectif.
Artisanat du Code
- Explicite plutôt qu'implicite. Pas de jokers là où des noms sont nécessaires, pas de conversions implicites, pas de chaînes vides ni de sentinelles magiques. Dites ce que vous voulez.
- Noms descriptifs. Les fonctions/variables décrivent ce qu'elles font ; suivez les idiomes du langage et de l'écosystème.
- Commentez l'intention, pas le mécanisme. Expliquez pourquoi quand ce n'est pas évident ; évitez les commentaires sur du code explicite.
- Unités petites et mono-fonctionnelles. Pour toute unité, vous devriez pouvoir dire ce qu'elle fait, comment l'utiliser, de quoi elle dépend — sans lire ses détails internes. Un fichier volumineux fait généralement trop de choses.
- DRY dans le code de production, avec discernement. La duplication est un signal, pas une erreur automatique. La deuxième occurrence quasi identique déclenche une décision délibérée : abstraire, ou consigner pourquoi pas. Abstraire le sens partagé, jamais la forme fortuite — les choses qui se ressemblent mais changent pour des raisons différentes restent séparées.
- Suivez les standards de l'écosystème. Utilisez les idiomes et les bibliothèques bien supportées qu'un praticien compétent attend. Ne réinventez pas ce que la plateforme a résolu.
Les Tensions Nommées
- DRY vs abstraction prématurée : le code de production abstrait sur une répétition démontrée de l'intention, pas une répétition anticipée de la forme. En cas de doute, attendez la troisième occurrence (YAGNI gère l'arbitrage).
- DRY vs DAMP : le code de production est DRY ; le code de test est DAMP (clarté avant dé-duplication, voir
tests-as-a-control). Appliquer DRY aux tests est une violation.
Rationalisations Courantes
| Excuse | Réalité |
|---|---|
| "Je vais renommer et ajouter la fonctionnalité en un seul commit" | Structure et comportement dans un seul diff sont impossibles à réviser. Séparez-les. |
| "Deux copies, je dois appliquer DRY maintenant" | Deuxième occurrence = décidez. Même forme ≠ même sens. La duplication fortuite doit rester séparée. |
| "Pendant que je suis là, laissez-moi refactorer cet autre module" | Le refactoring non lié étend la portée et le risque. Notez-le ; ne le faites pas maintenant. |
| "Une one-liner astucieuse est plus élégante" | L'explicite bat l'astuce. Optimisez pour le prochain lecteur. |
Drapeaux Rouges — ARRÊTEZ
- Un diff qui déplace du code et modifie son comportement
- Une PR dont l'objectif nécessite le mot "et" pour être décrit
- Abstraire dès la première vue d'une similarité, ou sur une répétition anticipée (non réelle)
- Un fichier que vous ne pouvez plus garder en tête
Raisonnement complet : Articles V & VI de la constitution, regroupés dans engineering-constitution/references/engineering-constitution.md.