6.3 · Bonnes pratiques & pièges

Niveau 6 · Dans la pratique

6.3Bonnes pratiques & pièges

Objectif : ancrer les 10 réflexes qui séparent un code qui vit d'un script qu'on craint.
Temps estimé : 10 min · Si vous n'avez que 5 min : lisez « L'essentiel en 30s » + le schéma.

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.
Erreur d'interprétation fréquente : « cocher toutes les cases chaque jour ». Non. Ce sont des habitudes à installer une par une : choisissez-en une (par ex. tests avant partout), ancrez-la dans votre rituel, puis passez à la suivante.
Version texte du schéma (SEO / lecteurs d'écran / traduction) : Équilibre à tenir : 1) Côté lisible — noms explicites, return, f-strings, with + pathlib, bon conteneur. 2) Côté prouvé — try étroits, venv + requirements figés, tests avant + hints, vectoriser/yield/async. 3) Côté livré — black/ruff en pre-commit, CI gardienne, versions + rollback, secrets hors code. Leçon : un code lisible, prouvé, portable et livré vaut mieux qu'un script brillant jamais rejouable.

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.

Prudence : Rappel générique : secrets et données utilisateurs engagent votre organisation — secrets hors code en variables d'environnement, .venv jamais commité, validation par le référent désigné ; ce guide ne donne pas d'avis juridique.

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é.

Checklist sortie de section
  • 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.
Auto-évaluation 1-5 : constance des bons réflexes ?pièges évités ?
Vérifiez votre compréhension

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).