Curso de Python — de cero a un programa que revisa muchos servicios a la vez
Lenguajes y backendInicial
Por Dorian Chávez, fundador de Hábil y arquitecto de integración. Así enseñamos a quienes construyen sistemas que no pueden fallar.
Para quién es: quien nunca ha programado, o ha copiado scripts que funcionan sin saber por qué. No se supone nada: ni que tengas Python instalado, ni que sepas qué es un entorno virtual. Cada concepto se explica cuando aparece, y se explica por qué existe, no solo cómo se escribe.
Qué vas a terminar sabiendo: escribir un programa completo, con pruebas y varias tareas a la vez, entender lo que escribiste y poder explicárselo a alguien más. Y quedarte con el criterio para leer la documentación de Python por tu cuenta, que es la verdadera prueba.
Dónde sigue: el mismo problema, el revisor, está resuelto en los cursos de Go, Rust y TypeScript de esta casa. Cuando termines éste, comparar tu solución con las suyas enseña más que empezar de cero.
Lo que necesitas antes de empezar: una computadora con Linux Mint y saber abrir una terminal. Nada más. La Lección 1 prepara todo desde cero.
El proyecto que vas a construir
El revisor: un programa de línea de comandos que recibe una lista de servicios, los consulta todos a la vez y entrega un reporte en tabla o en JSON.
$ revisor --config servicios.toml --formato tabla
SERVICIO ESTADO TIEMPO DETALLE
catalogo ARRIBA 160ms 200
inventario LENTO 2.3s 200
pagos ARRIBA 90ms 200
reportes CAIDO — sin conexión
4 servicios · 2 arriba · 1 lento · 1 caído · promedio 852ms
Empieza en la lección 2 con un encabezado y un solo servicio, y crece en cada lección hasta ser un paquete que se instala como cualquier comando. Parece pequeño y no lo es: para escribirlo bien necesitas funciones, colecciones, errores, archivos, pruebas, tipos, HTTP y tareas concurrentes.
Las doce lecciones
| Lección | Qué construyes | Qué aprendes | |
|---|---|---|---|
| 0 | Qué es Python y qué NO es | nada todavía (lectura) | intérprete y bytecode; tipado dinámico pero fuerte; las anotaciones no se imponen; el GIL; entornos virtuales; versiones |
| 1 | Instalar Python en tu Linux Mint | el entorno y tu primer script | python3 del sistema; externally-managed-environment; venv; pip; el REPL; el primer traceback |
| 2 | Valores, texto y decisiones | el encabezado del revisor y la clasificación de un servicio |
tres conceptos: números, cadenas, booleanos y None; f-strings; if/elif/else y la indentación |
| 3 | Bucles, funciones y módulos | la función revisar() y el recorrido de la lista |
for, while; == contra is; def; ámbito; el argumento mutable por defecto; import; __main__ |
| 4 | Colecciones | el revisor sin listas paralelas: los datos de cada servicio, juntos |
list, dict, tuple, set; comprensiones; copia contra referencia; KeyError e IndexError |
| 5 | El modelo de datos | el modelo Servicio / Estado y el reporte con su resumen |
dataclass; Enum; match y case |
| 6 | Errores, archivos y datos de fuera | la lectura de la configuración | try/except; leer un traceback; with; pathlib; UTF-8; json y tomllib; validar; no eval ni pickle |
| 7 | Un paquete con línea de comandos | el revisor como paquete |
pyproject.toml; python -m revisor; argparse; códigos de salida; instalación editable con pip; uv como recuadro opcional |
| 8 | Pruebas, tipos y calidad | el revisor con pruebas |
pytest y tabla de casos; tmp_path; monkeypatch; tipado gradual con mypy; ruff |
| 9 | HTTP y asyncio | el revisor que consulta de verdad |
urllib y httpx; tiempos límite; async y await; asyncio.run |
| 10 | Concurrencia con límites y pruebas sin red | el revisor concurrente y probado |
TaskGroup; timeout; Semaphore; grupos de excepciones; red simulada en las pruebas |
| 11 | El programa terminado | el revisor completo, instalable |
reporte en tabla y JSON; logging; seguridad; construir e instalar con pipx |
Al final de cada lección hay ejercicios con sus soluciones y una sección «Para leer más»; las fuentes de lo que se afirma van enlazadas en el texto, donde se usan. Y la bitácora es tuya: anota ahí lo que te costó.
Para seguir leyendo: en el blog de Hábil, pruebas que atrapan errores y seguridad de APIs. Y en los cursos: si ya sabes programar y quieres Java moderno, el curso de Java.
Tres criterios que atraviesan todo el curso
El error es contenido, no un accidente. Cada lección provoca a propósito el error que vas a ver, muestra el traceback real y enseña a leerlo, de la última línea hacia arriba. Saber leer un error es la mitad de saber programar.
El entorno es real. Se trabaja en Linux Mint con el Python que el sistema trae y sus reglas, no en un cuaderno en el navegador. Todo el código corre en Python 3.14 y también en 3.12, que es el de Mint.
Las pruebas y la seguridad no son lecciones, son costumbres. Los datos de fuera se validan en la 6, las pruebas llegan en la 8 y una prueba no cuenta hasta que la viste fallar, y la dirección que alguien escribe en un archivo se trata como lo que es en la 9 y la 11.
Cómo sabes que terminaste
El curso no se acaba cuando leíste la lección 11, sino cuando tu revisor cumple estas siete cosas:
pytesttermina en verde y el informe dice cuántas pruebas corrieron. Cuéntalas del informe, no del código de salida: un verde con cero pruebas se ve igual que un verde de verdad.ruff checkyruff format --checkno reportan nada, ymypytampoco.- Revisa 20 servicios a la vez en un tiempo cercano al del más lento, no a la suma de todos. Lo mides tú, con el reloj, en serie y en paralelo.
- Un servicio caído, lento o que contesta basura no tumba el reporte: aparece en su fila con su error, y el resto sale completo.
- Ninguna petición puede esperar para siempre: todas tienen tiempo límite.
- Corre igual en Python 3.14 y en el 3.12 de tu Mint.
- Se instala con
pipx installyrevisor --helpfunciona desde otra carpeta. Sale con código 0 si todo está arriba y 1 si no.
Lecciones
- Lección 0 — Qué es Python y qué NO es
- Lección 1 — Instalar Python en tu Linux Mint
- Lección 2 — Valores, texto y decisiones
- Lección 3 — Bucles, funciones y módulos
- Lección 4 — Colecciones
- Lección 5 — El modelo de datos
- Lección 6 — Errores, archivos y datos de fuera
- Lección 7 — Un paquete con línea de comandos
- Lección 8 — Pruebas, tipos y calidad
- Lección 9 — HTTP y asyncio
- Lección 10 — Concurrencia con límites y pruebas sin red
- Lección 11 — El programa terminado