6.3 · Buenas prácticas y trampas

Nivel 6 · En la práctica

6.3Buenas prácticas y trampas

Objetivo: fijar los 10 reflejos que separan un código que vive de un script que da miedo.
Tiempo estimado: 10 min · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Regla de oro : legible (black), probado (pytest), portable (venv), entregado (CI) — aplicadas siempre, no una vez.
  • Hacer : nombres explícitos, return + valores inmutables, with + pathlib, .get, try estrechos, venv fijado, pruebas antes, vectorizar, pre-commit, CI guardiana.
  • Evitar : nombres crípticos, print en lugar de return, concatenaciones +, except desnudo, .venv versionado, CI « más tarde », secretos en claro.

Hilo Nabil — los criterios pegados en la pared

Tras un año, Nabil pegó cuatro palabras en la pared en Argel : legible, probado, portable, entregado. Lo que más contó no es una librería, sino tres hábitos — nombrar explícitamente, probar antes, aislar en venv — y su mayor trampa evitada por poco : un .venv versionado con secretos en claro durante una semana de rush.

Elige un solo hábito a fijar en tu ritual, y luego pasa al siguiente.

El contrato de confianza

Un código sano depende de pocas reglas, aplicadas siempre. Aquí están, con sus inversos a desterrar.

✓ Qué hacer

  • Nombres explícitos (verbos, snake_case), una responsabilidad por función.
  • return el resultado, valores inmutables (None), datos en argumentos.
  • f-strings, with + encoding, pathlib para las rutas.
  • Buen contenedor para cada uso, .get() con valor por defecto, copias conscientes.
  • try estrechos y precisos, else/finally, raise pronto, nunca except desnudo.
  • Estándar primero, venv + requirements fijados, importaciones absolutas.
  • Pruebas antes (rojo-verde), límites + errores, hints en las fronteras.
  • Vectorizar lo grande, yield lo gigante, async la espera.
  • black/ruff en pre-commit, patrones nombrados, SOLID pragmático.
  • CI guardiana, versiones + rollback, secretos fuera del código.

✗ Qué no hacer nunca

  • Nombres crípticos (x2, tmp2, data2) y funciones de 200 líneas.
  • print en lugar de return, valores mutables, globales modificados.
  • Concatenaciones +, open() sin with, rutas codificadas en duro.
  • Listas para buscar por clave, accesos directos sin get, = para copiar.
  • except: pass, try alrededor de todo, silenciar los fallos.
  • Todo en global, .venv versionado, from x import *.
  • Pruebas después (o nunca), solo lo nominal, 100 % fetiche.
  • Bucles for sobre millones, listas gigantes, requests en el async.
  • Estilo debatido a mano, god-objects, fábricas para 50 líneas.
  • CI « más tarde », secretos en claro, prod sin retorno.
Error frecuente de interpretación: « marcar todas las casillas cada día ». No. Son hábitos a instalar uno por uno : elige uno (p. ej. pruebas antes en todas partes), fíjalo en tu ritual, y luego pasa al siguiente.
Versión en texto del esquema (SEO / lectores de pantalla / traducción): Equilibrio a mantener : 1) Lado legible — nombres explícitos, return, f-strings, with + pathlib, buen contenedor. 2) Lado probado — try estrechos, venv + requirements fijados, pruebas antes + hints, vectorizar/yield/async. 3) Lado entregado — black/ruff en pre-commit, CI guardiana, versiones + rollback, secretos fuera del código. Lección : un código legible, probado, portable y entregado vale más que un script brillante nunca reutilizable.

Guion listo para decir — verificar su práctica antes de entregar (30 s)

« ¿Legible (black) ? ¿Probado (pytest nominal + límites) ? ¿Portable (venv reconstruido) ? ¿Entregado (CI en verde, secretos fuera del código) ? Si un no, corrijo antes de entregar. »

Modelo copiar-pegar — función limpia (return, valor inmutable, 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 / presupuesto pequeño

Un solo hábito por trimestre basta : venv + pruebas primero, el resto después.

Pyme Argel

Adaptar los rituales a los picos y a los desplazamientos : un hueco black + pytest mantenido cada semana.

Remoto / híbrido

La disciplina n.º 1 a distancia : revisiones escritas y CI en verde, incluso para los pequeños correctivos.

Intercultural

Verificar los usos locales en lugar de suponer : un formato CSV inhabitual debe alertar en todas partes.

Prudencia: Recordatorio genérico : secretos y datos de usuarios comprometen tu organización — secretos fuera del código en variables de entorno, .venv nunca versionado, validación por el responsable designado ; esta guía no da asesoramiento jurídico.

Desafío 48h — aplica mañana

Pasa tu script principal por la criba : cero except desnudo, cero .venv versionado, cero secreto en claro. Corrige la primera diferencia encontrada.

Lista de salida de la sección
  • Conozco los 10 reflejos a hacer y las 10 trampas a evitar.
  • Verifiqué mis 3 puntos críticos (except, venv, secretos).
  • Hice el desafío 48h o planifiqué su fecha.
Autoevaluación 1-5 : ¿constancia de los buenos reflejos ?¿trampas evitadas ?
Comprueba tu comprensión

Antes de entregar, Nabil verifica su práctica. ¿Qué reflejo le protege mejor ?

💡

Pega los criterios del proyecto hilo en la pared : legible (black), probado (pytest), portable (venv), entregado (CI).