6.3Bonnes pratiques & pièges
L'essentiel en 30 secondes
- Règle d'or : lisible (black), prouvé (pytest), portable (venv), livré (CI) — appliquées toujours, pas une fois.
- À faire : noms explicites, return + défauts immuables, with + pathlib, .get, try étroits, venv figé, tests avant, vectoriser, pre-commit, CI gardienne.
- À éviter : noms cryptiques, print au lieu de return, concaténations +, except nu, .venv commité, CI « plus tard », secrets en clair.
Fil Nabil — les critères collés au mur
Après un an, Nabil a collé quatre mots au mur à Alger : lisible, prouvé, portable, livré. Ce qui a le plus compté n'est pas une librairie, mais trois habitudes — nommer explicitement, tester avant, isoler en venv — et son plus gros piège évité de justesse : un .venv commité avec des secrets en clair pendant une semaine de rush.
Choisissez une seule habitude à ancrer dans votre rituel, puis passez à la suivante.
Le contrat de confiance
Un code sain tient à peu de règles, appliquées toujours. Les voici, avec leurs inverses à bannir.
✓ À faire
- Noms explicites (verbes, snake_case), une responsabilité par fonction.
- return le résultat, défauts immuables (None), données en arguments.
- f-strings, with + encoding, pathlib pour les chemins.
- Bon conteneur au bon usage, .get() avec défaut, copies conscientes.
- try étroits et précis, else/finally, raise tôt, jamais de except nu.
- Standard d'abord, venv + requirements figés, imports absolus.
- Tests avant (rouge-vert), limites + erreurs, hints aux frontières.
- Vectoriser le gros, yield le géant, async l'attente.
- black/ruff en pre-commit, patterns nommés, SOLID pragmatique.
- CI gardienne, versions + rollback, secrets hors code.
✗ À ne jamais faire
- Noms cryptiques (x2, tmp2, data2) et fonctions de 200 lignes.
- print au lieu de return, défauts mutables, globals modifiés.
- Concaténations +, open() sans with, chemins codés en dur.
- Listes pour chercher par clé, accès directs sans get, = pour copier.
- except: pass, try autour de tout, silencer les pannes.
- Tout en global, .venv commité, from x import *.
- Tests après (ou jamais), que le nominal, 100 % fétiche.
- Boucles for sur des millions, listes géantes, requests dans l'async.
- Style débattu à la main, god-objects, usines pour 50 lignes.
- CI « plus tard », secrets en clair, prod sans retour.
Script prêt à dire — vérifier sa pratique avant de livrer (30 s)
« Lisible (black) ? Prouvé (pytest nominal + limites) ? Portable (venv reconstruit) ? Livré (CI verte, secrets hors code) ? Si un non, je corrige avant de livrer. »
Modèle copier-coller — fonction propre (return, défaut immuable, pathlib)
from pathlib import Path
def charger_lignes(chemin: Path, lignes: list[str] | None = None) -> list[str]:
lignes = [] if lignes is None else list(lignes)
with chemin.open("r", encoding="utf-8") as f:
lignes.extend(line.strip() for line in f)
return lignes
TPE / petit budget
Une seule habitude par trimestre suffit : venv + tests d'abord, le reste ensuite.
PME Alger
Adapter les rituels aux pics et aux déplacements : un créneau black + pytest tenu chaque semaine.
Remote / hybride
La discipline n°1 à distance : revues écrites et CI au vert, même pour les petits correctifs.
Interculturel
Vérifier les usages locaux plutôt que supposer : un format CSV inhabituel doit alerter partout.
Défi 48h — appliquez demain
Passez votre script principal au crible : zéro except nu, zéro .venv commité, zéro secret en clair. Corrigez le premier écart trouvé.
- Je connais les 10 réflexes à faire et les 10 pièges à éviter.
- J'ai vérifié mes 3 points critiques (except, venv, secrets).
- J'ai fait le défi 48h ou planifié sa date.
Avant de livrer, Nabil vérifie sa pratique. Quel réflexe le protège le mieux ?
Collez les critères du projet fil rouge au mur : lisible (black), prouvé (pytest), portable (venv), livré (CI).