Cours de Python — de zéro à un programme qui vérifie de nombreux services à la fois
Langages et backendDébutant
Par Dorian Chávez, fondateur de Hábil et architecte d'intégration. Voici comment nous formons ceux qui construisent des systèmes qui ne peuvent pas échouer.
À qui il s'adresse : à qui n'a jamais programmé, ou a copié des scripts qui fonctionnent sans savoir pourquoi. On ne suppose rien : ni que tu aies Python installé, ni que tu saches ce qu'est un environnement virtuel. Chaque concept est expliqué quand il apparaît, et on explique pourquoi il existe, pas seulement comment il s'écrit.
Ce que tu sauras à la fin : écrire un programme complet, avec des tests et plusieurs tâches à la fois, comprendre ce que tu as écrit et pouvoir l'expliquer à quelqu'un d'autre. Et garder le discernement pour lire la documentation de Python par toi-même, ce qui est la véritable épreuve.
La suite : le même problème, le revisor, est résolu dans les cours de Go, de Rust et de TypeScript de Hábil. Quand tu auras terminé celui-ci, comparer ta solution avec les leurs apprend plus que de repartir de zéro.
Ce dont tu as besoin avant de commencer : un ordinateur avec Linux Mint et savoir ouvrir un terminal. Rien de plus. La Leçon 1 prépare tout depuis zéro.
Le projet que tu vas construire
Le revisor : un programme en ligne de commande qui reçoit une liste de services, les interroge tous à la fois et rend un rapport sous forme de tableau ou de 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
Il commence à la leçon 2 avec un en-tête et un seul service, et grandit à chaque leçon jusqu'à devenir un paquet qui s'installe comme n'importe quelle commande. Il paraît petit et ne l'est pas : pour l'écrire correctement, tu as besoin de fonctions, de collections, d'erreurs, de fichiers, de tests, de types, de HTTP et de tâches concurrentes.
Les douze leçons
| Leçon | Ce que tu construis | Ce que tu apprends | |
|---|---|---|---|
| 0 | Ce qu'est Python et ce qu'il n'est PAS | rien pour l'instant (lecture) | interpréteur et bytecode ; typage dynamique mais fort ; les annotations ne sont pas imposées ; le GIL ; environnements virtuels ; versions |
| 1 | Installer Python sur ton Linux Mint | l'environnement et ton premier script | le python3 du système ; externally-managed-environment ; venv ; pip ; le REPL ; le premier traceback |
| 2 | Valeurs, texte et décisions | l'en-tête du revisor et la classification d'un service |
trois concepts : nombres, chaînes, booléens et None ; f-strings ; if/elif/else et l'indentation |
| 3 | Boucles, fonctions et modules | la fonction revisar() et le parcours de la liste |
for, while ; == contre is ; def ; portée ; l'argument mutable par défaut ; import ; __main__ |
| 4 | Collections | le revisor sans listes parallèles : les données de chaque service, ensemble |
list, dict, tuple, set ; compréhensions ; copie contre référence ; KeyError et IndexError |
| 5 | Le modèle de données | le modèle Servicio / Estado et le rapport avec son récapitulatif |
dataclass ; Enum ; match et case |
| 6 | Erreurs, fichiers et données extérieures | la lecture de la configuration | try/except ; lire un traceback ; with ; pathlib ; UTF-8 ; json et tomllib ; valider ; ni eval ni pickle |
| 7 | Un paquet en ligne de commande | le revisor comme paquet |
pyproject.toml ; python -m revisor ; argparse ; codes de sortie ; installation éditable avec pip ; uv en encadré facultatif |
| 8 | Tests, types et qualité | le revisor avec des tests |
pytest et table de cas ; tmp_path ; monkeypatch ; typage graduel avec mypy ; ruff |
| 9 | HTTP et asyncio | le revisor qui interroge pour de vrai |
urllib et httpx ; délais d'attente ; async et await ; asyncio.run |
| 10 | Concurrence avec limites et tests sans réseau | le revisor concurrent et testé |
TaskGroup ; timeout ; Semaphore ; groupes d'exceptions ; réseau simulé dans les tests |
| 11 | Le programme terminé | le revisor complet, installable |
rapport en tableau et JSON ; logging ; sécurité ; construire et installer avec pipx |
À la fin de chaque leçon, il y a des exercices avec leurs solutions et une section « Pour aller plus loin » ; les sources de ce qui est affirmé sont liées dans le texte, là où elles sont utilisées. Et le journal de bord est à toi : note-y ce qui t'a donné du mal.
Pour continuer à lire : sur le blog de Hábil, des tests qui attrapent les erreurs et la sécurité des API. Et dans les cours : si tu sais déjà programmer et que tu veux du Java moderne, le cours de Java.
Trois critères qui traversent tout le cours
L'erreur est un contenu, pas un accident. Chaque leçon provoque exprès l'erreur que tu vas voir, montre le vrai traceback et apprend à le lire, de la dernière ligne vers le haut. Savoir lire une erreur, c'est la moitié de savoir programmer.
L'environnement est réel. On travaille sur Linux Mint avec le Python que le système fournit et ses règles, pas dans un notebook ouvert dans le navigateur. Tout le code s'exécute en Python 3.14 et aussi en 3.12, qui est celui de Mint.
Les tests et la sécurité ne sont pas des leçons, ce sont des habitudes. Les données extérieures se valident dans la 6, les tests arrivent dans la 8 et un test ne compte pas tant que tu ne l'as pas vu échouer, et l'adresse que quelqu'un écrit dans un fichier est traitée pour ce qu'elle est dans la 9 et la 11.
Comment savoir que tu as terminé
Le cours ne se termine pas quand tu as lu la leçon 11, mais quand ton revisor remplit ces sept points :
pytestse termine au vert et le rapport dit combien de tests ont été exécutés. Compte-les dans le rapport, pas d'après le code de sortie : un vert avec zéro test ressemble à un vrai vert.ruff checketruff format --checkne signalent rien, etmypynon plus.- Il vérifie 20 services à la fois en un temps proche de celui du plus lent, pas de la somme de tous. Tu le mesures toi-même, avec l'horloge, en série et en parallèle.
- Un service en panne, lent ou qui répond n'importe quoi ne fait pas tomber le rapport : il apparaît sur sa ligne avec son erreur, et le reste sort complet.
- Aucune requête ne peut attendre éternellement : toutes ont un délai d'attente.
- Il s'exécute pareil en Python 3.14 et dans le 3.12 de ton Mint.
- Il s'installe avec
pipx installetrevisor --helpfonctionne depuis un autre dossier. Il sort avec le code 0 si tout est en marche et 1 sinon.
Leçons
- Leçon 0 — Ce qu'est Python et ce qu'il n'est PAS
- Leçon 1 — Installer Python sur ton Linux Mint
- Leçon 2 — Valeurs, texte et décisions
- Leçon 3 — Boucles, fonctions et modules
- Leçon 4 — Collections
- Leçon 5 — Le modèle de données
- Leçon 6 — Erreurs, fichiers et données extérieures
- Leçon 7 — Un paquet en ligne de commande
- Leçon 8 — Tests, types et qualité
- Leçon 9 — HTTP et asyncio
- Leçon 10 — Concurrence avec limites et tests sans réseau
- Leçon 11 — Le programme terminé