Formation AI safety · 65 semaines · 07/09/2026 → 29/11/2027 · grille du 06/11, amendée le 08/11

La timeline jusqu'aux candidatures

Cible : research engineer AI safety, orientation évaluations, avec trois preuves de progrès menées en parallèle — des internals compris, une évaluation reproductible, un argument de mémoire défendable. Semaine normale depuis le 25/11 : ≈ 18 h approfondies, en heures nettes (internals 5 h 40 · projet 4 h 55 · stats 3 h 50 · mémoire 3 h 40 ; demi-matinées de 2 h 05 à 2 h 10, pauses comprises) + programmation ≈ 4 h 35 (Boot.dev ≈ 3 h 15, Fluent Python ≈ 1 h 20), Anki 15 min par jour, revue 30 min. Chaque colonne est une semaine ; la barre mesure les heures approfondies, les points les pistes, les losanges les jalons. Au-delà de deux semaines, tout est ≈ provisoire.

⚠ Ouvert au 08/11 : plus de tampon depuis le 25/11 (Internals A2 le remplace, décision du 08/11 en vigueur immédiatement) — un débord est perdu, sans rattrapage · fenêtres Hypotrail qui chevauchent : dimanche 8h30–9h sur le boulot (8h45), mardis médicaux 16h–17h sur les réunions, lundi et jeudi 6h30 sur MyTime — non tranchés · le déjeuner des mardis médicaux n'est pas situé · BlueDot, ML4Good, hackathons : intentions, rien de confirmé, aucun bloc réservé · 25/12 et 01/01 tombent un vendredi · encadrement du mémoire (Adrien Barton) en cours de confirmation, échéance à retrouver · aucun budget API autorisé : fixtures et replay hors ligne d'ici là.

À ne pas réactiver — les quotas de 7 h 30 ou 11 h d'internals · Boot.dev compté dans le travail approfondi · le mémoire à 2 h · le tampon du vendredi · les drills LeetCode et ML (les cartes Anki restent) · GPT from scratch et nanoGPT comme deux projets · Backprop Ninja intégral et BatchNorm exhaustif comme conditions de passage · plusieurs extensions du projet à la fois. Les phases de l'ancien plan (ARENA ch. 3, artefact password-locked, publication) sont remplacées par la tranche 1 et ses repères.

Code — Boot.dev et Fluent Python

hors quota approfondi

Depuis le 06/11, la programmation a ≈ 4 h 35 par semaine, hors du travail approfondi. Boot.dev ≈ 3 h 15 : cours « Learn Data Structures and Algorithms in Python » dans l'ordre (ch. 11, 13 et 16 sautés), IA coupée — lundi et jeudi 7h–8h, dimanche 7h–8h30 avec un kata au format OA (un mini-mock de 45 min le remplace toutes les 3 à 4 semaines). Parcours web en pause. Fluent Python ≈ 1 h 20 : mercredi 15h–15h45 lire une section et manipuler ses exemples, vendredi 15h–15h45 rappel sans le livre puis une variante, de préférence l'idiome du prochain kata. Ordre de lecture en vigueur : ch. 1 (fini le 06/11) → 2 → 6 → 3 → 5 → 7 → 17, daté dans la tâche TickTick « Fluent Python — lecture d'une section ». Les deux listes ci-dessous datent de l'ancien plan : elles servent de référentiel de sections, pas d'ordre.

un seul à la fois — clique pour basculer

23 tickets, pagination vérifiée sur le PDF (2e éd.). Un ticket se coche quand la section est lue et qu'un idiome en a été écrit dans la semaine — lue seule, elle ne compte pas. Depuis le 31/10, Fluent Python redevient une piste de 1 h 30 par semaine : FP-01 (ch. 1) puis FP-08 et la suite du ch. 6. Pour les autres tickets, les groupes donnent le déclencheur attendu, pas un calendrier — c'est une réserve ordonnée, pas une liste à finir.

2A · micrograd + makemore 1 — 26/10 → 01/12

FP-01ch. 1 · Python Data Model, intégralp. 3–18Value.__repr__ et __add__. Le seul chapitre que Ramalho recommande à tout lecteur, quoi qu'il arrive.
FP-02ch. 16 · Operator Overloading 101 → Unary Operatorsp. 562–568__add__, __mul__, __pow__, __neg__, __sub__, __truediv__.
FP-03ch. 16 · Overloading + → Wrapping-Up Arithmetic Operatorsp. 568–577Opérateurs réfléchis. 2 * v échoue sans __rmul__ — tu vas rencontrer le bug avant de lire la section. Pagination corrigée le 10/09 : la matière commence p. 568, pas 576.
FP-04ch. 9 · Variable Scope Rules → Closures → nonlocalp. 308–316_backward est une closure. Le cœur conceptuel de micrograd, pas un à-côté.

2B · makemore 2 allégé — 02/12 → 29/12

FP-05ch. 17 · Iterables vs Iterators → generator function → genexpsp. 599–613Construction du dataset, minibatchs.
FP-06ch. 2 · Why Slices and Ranges Exclude the Last Item + Slice Objectsp. 47–49view(-1,6), indices de contexte, et la convention de tranche que tu poses avant chaque TAP.
FP-2bch. 2 · Arrays → Memory Views → NumPyp. 59–67Ramalho construit un memoryview sur un array, modifie un octet, voit la valeur changer des deux côtés. Le pont buffer / vue / copie en Python pur — il éclaire keepdim, la contiguïté et le bug « view échoue là où reshape passe ». Ajouté après lecture du PDF complet.

2C · GPT II, config et vues — 29/12 → 29/01

FP-07ch. 5 · Overview of Data Class Builders → @dataclass field optionsp. 164–186Objets de configuration d'expérience.
FP-08ch. 6 · Variables Are Not Boxes → Identity & Aliases → Copies Are Shallowp. 202–216Recentré le 10/09 : le déclencheur est le modèle d'aliasing (202–207), pas seulement les copies superficielles — c'est lui qui explique vue-vs-copie en torch, tes trois cartes déjà en deck. Puis le dict de config partagé entre runs (214–216).

2D · GPT complet, tests — 02/02 → 26/02

FP-09ch. 7 · Higher-Order Functions → operator → functools.partialp. 234–249Comparaison de gradients, fonctions de vérification.
FP-10ch. 8 · Gradual Typing in Practice → Generic Collections → ABCsp. 255–280Annoter les repos from-scratch, mypy sur tinygraph.

2D → Phase 3 · nn.Module, protocoles — 02/02 → 16/04

FP-11ch. 11 · Object Representations → __format__ / __hash__ → __slots__p. 364–388Classes de modules propres.
FP-12ch. 12 · Protocols and Duck Typing → __getitem__ slice-aware → __getattr__p. 402–411Comment nn.Module expose ses paramètres. Le dynamique est en 408–411.
FP-13ch. 13 · Two Kinds of Protocols → Goose Typing → Static Protocolsp. 434–476Ce qu'est vraiment nn.Module ; socle pour lire du code de labo.
FP-14ch. 4 · Byte Essentials → Basic Encoders/Decodersp. 120–128Le BPE opère sur des octets UTF-8. Seul ticket hors ordre du livre. BPE coupé le 11/10 : plus de déclencheur, ticket dormant.
FP-15ch. 18 · Context Managers and with Blocks → @contextmanagerp. 658–668torch.no_grad() est un context manager.

Phases 3–4 · Inspect et runs de l'artefact — 08/03 → 25/06

FP-16ch. 9 · Implementing a Simple Decorator → functools.cache / lru_cachep. 317–323Caching d'inférence.
FP-17ch. 9 · Single Dispatch → Parameterized Decoratorsp. 324–335Registries de handlers.
FP-18ch. 19 · Processes, Threads and the GIL → The Real Impact of the GILp. 699–713Serving, batching.
FP-19ch. 21 · Downloading with asyncio → Throttling with a Semaphorep. 782–794Appels LLM concurrents avec rate limit — ton quotidien.
FP-20ch. 21 · Asynchronous Generator Functions → Async Comprehensionsp. 812–818Streaming de tokens.
FP-21ch. 21 · A FastAPI Web Servicep. 799–804Ton stack.
FP-22ch. 15 · TypedDict → Overloaded Signaturesp. 519–534Schémas d'API, structured outputs.
Exclus, à ne pas réintroduire — ch. 3 dicts/sets (acquis) · ch. 10 design patterns par fonctions · ch. 14 héritage multiple · ch. 20 Concurrent Executors (redondant avec 19 et 21) · ch. 22 attributs dynamiques, cached_property comprise — le décorateur seul s'apprend en trois minutes de doc le jour venu · ch. 23 descripteurs · ch. 24 métaclasses : aucun round de labo ne les teste, et Ramalho prévient lui-même que l'abstraction prématurée vaut l'optimisation prématurée · ch. 17 yield from (631–634) — le tri topologique de micrograd s'écrit en DFS simple ; si le code le réclame, le ticket sera émis à ce moment-là.

Deux moitiés d'un même système. Pull : les tickets Linear « learn » que Claude Code produit après chaque itération Relaycat — prioritaires, un concept rencontré s'apprend mieux qu'un concept anticipé. Push : boot.dev, où tout est codé à la main, contrepoids au workflow agentique. Objectif : bases solides en software engineering, niveau moyen en web — savoir build correctement avec Claude Code, pas en autonomie complète.

⓪Learn Pandas105 leçonsL'objet de l'item est le verdict, pas le cours. Pandas n'a pas été touché depuis quelques années, et l'incertitude coûte de l'espace mental en permanence — numpy et torch ont été levés de la même façon, en une séance. Point de décision fixé d'avance : après ~2 h ou le premier tiers, on tranche. Revient vite → déprioriser ou exclure. Résiste vraiment → continuer.
①Learn TypeScript105 leçonsRefait il y a longtemps. Prérequis de toute la chaîne web.
②Learn HTTP Clients53 leçonsFetch, async, erreurs. Vérification plus qu'apprentissage.
③Learn HTTP Servers44 restantes · ~20 hEntamé (8/52). Routes, middleware, auth — le squelette de ce que Claude Code écrit dans Medusa. Tombe vers décembre, quand REL-6/7 multiplient routes et middlewares.
④Memory Management in C102 leçons · 24 hLe seul cours du catalogue qui construit des bases au sens strict : pile, tas, pointeurs, GC. Rien à voir avec le web, tout à voir avec l'objectif software engineering. À l'hiver, quand la Phase 2 rend la mémoire concrète — il rejoint Fluent Python ch. 6 et la contiguïté des tenseurs.
⑤JS runtime — sur ticketpas le coursPas les 113 leçons. TypeScript couvre déjà syntaxe et structures ; ce qu'il ne touche pas, c'est la sémantique d'exécution — this et sa liaison, prototypes, event loop, coercion, closures en boucle. Exactement les bugs invisibles au typage que Claude Code produit sans les signaler.
⑥File Servers and CDNs43 leçonsDéclencheur : la slice images fournisseur de Relaycat.
⑦Pub/Sub RabbitMQ (TS)37 leçons · 32 hDéclencheur : Relaycat sort du synchrone. Cher pour 37 leçons.
⑧Web Security (TS)105 leçonsMarketplace avec paiement en ligne : non négociable avant qu'un euro transite. Mais la slice paiement est à ~1 an — le lire maintenant, c'est le relire plus tard. À programmer 2–3 mois avant.
⑨Learn SQL95 leçonsFond de file : déjà maîtrisé.
⑩Learn Docker43 leçonsFond de file : bases acquises, suffisantes pour Relaycat.
⑪CI/CD Actions + Docker + TS36 leçonsFond de file : au-delà des bases.
Exclus, à ne pas réintroduire — toute la piste Python hors Pandas (dix ans de métier, plus Fluent Python en parallèle) · toute la piste Go : le stack est TypeScript et le fil rouge coding est Python, un troisième langage ne sert pas l'objectif · Kubernetes (hors plan de formation) · Git et Linux (métier) · Power BI, Find a Job · First et Second Personal Project — Relaycat est le projet personnel · Pokedex, Web Scraper, Blog Aggregator : déjà fait ou redondant avec Relaycat.
Volume — ~65 h pour ⓪ à ⑤, à ~2 h par semaine dans le créneau : environ 30 semaines. C'est le rythme, pas un retard.

Gabarit (grille du 06/11, amendée le 08/11) : Anki 6h15–6h30 chaque jour · lun Boot.dev 7h–8h, cours aux Ponts ou réunions ensuite · mar internals A 7h–9h10 (rappel 15 min, puis Karpathy par sections), mémoire A 9h25–11h30 · mer stats A 7h–9h10, internals A2 9h25–11h30 (suite guidée de mardi, depuis le 25/11), Fluent Python 15h–15h45, off dès 17h · jeu Boot.dev 7h–8h, projet 8h–11h30 · ven internals B 7h–9h10 (fichier vide, composant de mardi ou mercredi), mémoire B 9h25–11h30, Fluent Python 15h–15h45 · sam stats B 7h–9h10 (rappel à froid), projet B 9h25–11h30, puis off · dim Boot.dev DSA + kata 7h–8h30, boulot 8h45–10h15, revue 10h15–10h45, puis off · sport mar, mer, ven, sam 11h30–14h30 · fenêtres Hypotrail conditionnelles : lun 6h30, 11h30 et 19h · mar 15h · mer 15h45 · jeu 6h30, 11h30 et 19h · ven 15h45 · sam 6h30 · dim 8h30 — en temps effectif · rien après 20h. Une séance manquée n'est pas une dette.

← → semaine · ↑ ↓ jalon · trame hachurée = semaine blanche · ≈ et bordure pointillée = provisoire · point = séance, point cerclé = check ou livrable · pistes algo et ml coding : historique, coupées le 11/10 · rangée « étape » = étape internals I1–I6 · colonne créneau : 08h—09h grisé = créneau du matin par défaut · — = pas d'horaire propre (jalon)