Installing Python is not hard. It is just long enough, and uncertain enough, to end an evening. Pick a version, pick an installer, discover your PATH is wrong, read three answers about virtual environments written for a different operating system, and go to bed. Nothing was learned and the tab is still open. Installer Python n'est pas difficile. C'est simplement assez long, et assez incertain, pour ruiner une soirée. Choisir une version, choisir un installateur, découvrir que le PATH est mauvais, lire trois réponses sur les environnements virtuels écrites pour un autre système d'exploitation, puis aller se coucher. Rien n'a été appris et l'onglet est toujours ouvert.

So I built the version that skips that evening. PyLearnXP is 28 modules on my other site: you open a lesson, type into an editor, press run, and a real CPython interpreter executes your code — compiled to WebAssembly and running inside the page. J'ai donc bâti la version qui évite cette soirée-là. PyLearnXP, ce sont 28 modules sur mon autre site : on ouvre une leçon, on tape dans un éditeur, on lance, et un vrai interpréteur CPython exécute le code — compilé en WebAssembly et exécuté dans la page.

Real Python, not a simulationDu vrai Python, pas une simulation

The interpreter is Pyodide — CPython built for WebAssembly. That distinction matters more than it sounds. A JavaScript reimplementation of Python would diverge from the real thing exactly where a beginner needs it not to: integer division, string methods, the wording of a traceback. Here the traceback is the traceback. When you learn to read it, you have learned to read the one you will meet in a terminal later. L'interpréteur est Pyodide — CPython compilé pour WebAssembly. La nuance compte plus qu'il n'y paraît. Une réimplémentation de Python en JavaScript s'écarterait du vrai langage précisément là où un débutant a besoin qu'elle ne s'en écarte pas : la division entière, les méthodes de chaînes, la formulation d'une trace d'erreur. Ici, la trace est la vraie. Quand on apprend à la lire, on a appris à lire celle qu'on rencontrera plus tard dans un terminal.

It also means nothing you write leaves your machine. There is no execution server, so there is no queue, no cost per run, and no log of your half-finished attempts on somebody else's disk. For a site I pay for out of pocket, that last point is not only a privacy argument — it is the reason the thing can be free. Cela signifie aussi que rien de ce qu'on écrit ne quitte la machine. Il n'y a pas de serveur d'exécution, donc pas de file d'attente, pas de coût par exécution, et aucune trace de vos tentatives inachevées sur le disque de quelqu'un d'autre. Pour un site que je paie de ma poche, ce dernier point n'est pas qu'un argument de confidentialité — c'est la raison pour laquelle l'outil peut être gratuit.

Code runs in a web worker with a timeout The page posts code to a worker running Pyodide. If the worker does not answer before the deadline, the page terminates it and starts a fresh one, so an infinite loop never freezes the tab. Page editor + run button timeout watchdog output panel Web worker Pyodide · CPython your code separate thread post code output no answer in time? terminate, restart clean

The infinite loop problemLe problème de la boucle infinie

Every beginner writes while True: and forgets the exit. If the interpreter shares a thread with the page, that mistake freezes the tab, and the only recovery is closing it and losing the work. Which is a brutal punishment for the single most common error in the language. Tout débutant écrit while True: et oublie la sortie. Si l'interpréteur partage le fil d'exécution de la page, cette erreur gèle l'onglet, et la seule issue est de le fermer en perdant son travail. Une punition brutale pour l'erreur la plus courante du langage.

So Pyodide runs in a web worker on its own thread, and the page keeps a watchdog. If the worker has not answered by the deadline, the page terminates it outright and boots a fresh one. Your loop dies, the tab stays alive, your code is still in the editor, and the message says what happened. The runaway loop becomes a lesson instead of a loss. Pyodide s'exécute donc dans un web worker, sur son propre fil, et la page surveille l'horloge. Si le worker n'a pas répondu à l'échéance, la page le termine sans ménagement et en démarre un neuf. Votre boucle meurt, l'onglet survit, votre code est toujours dans l'éditeur, et le message explique ce qui s'est passé. La boucle folle devient une leçon plutôt qu'une perte.

If you build something similarSi vous bâtissez quelque chose de semblable A worker you can terminate is worth more than a clever attempt to detect the loop before it runs. You cannot reliably predict which programs halt — that is a famous result, not an engineering gap — but you can always give up waiting and start again. Un worker qu'on peut terminer vaut mieux qu'une tentative astucieuse de détecter la boucle avant l'exécution. On ne peut pas prédire de façon fiable quels programmes s'arrêtent — c'est un résultat célèbre, pas une lacune d'ingénierie — mais on peut toujours cesser d'attendre et recommencer.

Three ways to attempt the same thingTrois façons de tenter la même chose

Every exercise exists at three tiers, worth different amounts of XP. Chaque exercice existe en trois paliers, qui valent des quantités différentes de XP.

Three exercise tiers and their XP values Scaffolded exercises give ten XP and provide most of the code. Standard exercises give twenty and provide a description. Challenge exercises give thirty-five and provide only the goal. Scaffolded 10 XP most of the code is there fill in the gap Standard 20 XP a description and an empty editor Challenge 35 XP the goal only — work out the shape

The point of the tiers is not difficulty for its own sake. It is that you get to choose how much help you take today without leaving the lesson, and the scoring is honest about the difference. Taking the scaffolded version on a bad day still counts. It just counts less, which is the correct amount. L'intérêt des paliers n'est pas la difficulté pour elle-même. C'est de pouvoir choisir combien d'aide on accepte aujourd'hui sans quitter la leçon, avec un pointage honnête sur la différence. Prendre la version guidée un mauvais jour compte quand même. Ça compte simplement moins, ce qui est exactement le bon montant.

What the curriculum coversCe que couvre le programme

Twenty-eight modules, twenty-five of them finished, running from variables and conditionals through functions, loops, strings, lists and dictionaries, then out into the parts people actually want: files, regular expressions, virtual environments, object-oriented programming, SQL, web scraping, decorators and generators, Git, testing, JSON and APIs, three modules of everyday automation, and a set of capstone projects. Roughly six hours of estimated material, in twelve-minute pieces. Vingt-huit modules, dont vingt-cinq terminés, allant des variables et des conditions jusqu'aux fonctions, boucles, chaînes, listes et dictionnaires, puis vers ce que les gens veulent vraiment : fichiers, expressions régulières, environnements virtuels, programmation orientée objet, SQL, extraction web, décorateurs et générateurs, Git, tests, JSON et API, trois modules d'automatisation du quotidien, et une série de projets de synthèse. Environ six heures de matière estimée, en tranches de douze minutes.

Twelve minutes is the deliberate unit. It is short enough to start without negotiating with yourself, which is the only part of studying that reliably fails. Douze minutes est l'unité choisie délibérément. C'est assez court pour commencer sans négocier avec soi-même, la seule étape de l'étude qui échoue de façon fiable.

Streaks, and their sharp edgeLes séries, et leur côté tranchant

There is XP, there are badges at three days, seven days, 100 XP and 500 XP, and there is a 25-minute focus timer with a five-minute break. All of it is standard, and all of it works — up to a point. Il y a des XP, des badges à trois jours, sept jours, 100 XP et 500 XP, et une minuterie de concentration de 25 minutes suivie d'une pause de cinq. Tout cela est classique, et tout cela fonctionne — jusqu'à un certain point.

The point is the day you break a streak. A counter that only ever rewards consecutive days turns one missed evening into a reason to stop entirely, and anyone who has abandoned a language app at day 34 knows the feeling precisely. So the streak here earns a badge and then gets out of the way. It is not on the dashboard as a headline number, nothing turns red, and the XP you have earned never decreases. Missing Tuesday costs you Tuesday. Ce point, c'est le jour où l'on brise sa série. Un compteur qui ne récompense que les journées consécutives transforme une soirée manquée en raison de tout arrêter, et quiconque a abandonné une application de langues au 34e jour connaît précisément la sensation. Ici, la série donne un badge puis s'efface. Elle ne trône pas sur le tableau de bord, rien ne devient rouge, et les XP accumulés ne diminuent jamais. Manquer un mardi ne coûte que le mardi.

The design rule underneathLa règle de conception sous-jacente Reward the thing you want repeated, never punish its absence. A punishment for absence is only felt by the people already struggling to show up, which is exactly the group you built the thing for. Récompensez ce que vous voulez voir se répéter, ne punissez jamais son absence. Une punition pour absence n'est ressentie que par ceux qui peinent déjà à se présenter — précisément le public pour lequel l'outil a été bâti.

It lives at proofofboredom.com/learn, it is free, and the first module runs about ten minutes. If Python has been on your list for a while, the honest test is whether you can start one before deciding whether you have time for it. L'outil se trouve à proofofboredom.com/learn, il est gratuit, et le premier module dure une dizaine de minutes. Si Python traîne sur votre liste depuis un moment, le vrai test est de savoir si vous pouvez en commencer un avant d'avoir décidé si vous en avez le temps.