Please enter the password to access CS, compressed.
Self-directed curriculum · ordered · v1
Eight phases, reordered so each one is used shortly after it's learned. The bar below is drawn to scale — each segment's width is its real share of the work, so you can see at a glance that algorithms is not a footnote and calculus is.
Total: hours. At 10 hrs/week that's about nine months; at 20, four and a half. Phase 00 is the one exception — everything after it is paced by spacing rather than effort.
Every one of these is in the JHU catalog. Each is cut for a reason, and each has a known cost you can pay later if you need to.
Two lab sciences. Zero relevance to the capability you're building.
You need integration for probability and partials for gradients — one week of it, in Phase 06. Nothing else earns its hours.
Estimator theory and hypothesis-testing ritual. Come back only if you go deep on ML or research.
Skim decidability and halting for the ideas. A full course is philosophy, not leverage.
Phase 04 gives you the working model. The full courses are specialization, not core.
Replaced by contributing to a real open-source codebase — reading 100k lines you didn't write is the actual skill.
Phase 00 · 12 days · Aug 5–16 · ~50 hours
Twelve days, Aug 5 through 16, with the 17th as the deadline rather than a work day. Weekdays run 3.5 hours; the two weekends run 5.5, which is where the lost day gets paid back without raising the weekly average above 25.
The order matters more than the hours: a crude version of the whole pipeline runs by Day 4, and everything after that is improvement rather than assembly. Nothing of yours deploys on the 17th — the point of building it end to end is that you'll be reading and changing someone else's version of the same thing.
Async. CS50P never covers it, and both halves of this sprint assume it: the harness runs on an async runtime and kopf handlers are async def. Now an hour on Day 3.
Logging. A container has no console. Logs are the whole debugging surface on the cluster, and retrofitting them on Day 9 is miserable. Now Day 2.
In-code runaway controls. The one genuinely agent-specific risk. Step limits, tool timeouts, retry caps with backoff, a circuit breaker, a token budget checked in state. Day 4, before the first surprise rather than after it.
LangGraph underneath the harness. Deep Agents is a wrapper. If the team writes LangGraph directly, knowing only the wrapper is the gap that surfaces fastest. Ninety minutes on Day 11 building one graph by hand.
Provider swap and reproducibility. Point the harness at a different model — hosted or local — to find where that seam is, and make sure the repo runs from a clean clone. Both are Day 12, both are cheap now and annoying later.
Ten lectures, nine problem sets, one final project — and under a deadline you're not doing all of it. Six modules block the build and get days assigned; four wait until after the 17th.
| Module | What it gives you for the target | When |
|---|
Your Deep Agents build is the CS50P final project. Submit it as such if you want the certificate later. It's the only part of the course with no starter file, no given signature, and no spec — which is exactly why it's the real work rather than an assignment.
Twelve days, longer on weekends. At this pace the shape matters more than the hours — these are what keep a sprint from becoming a blur.
Ten modules, nine psets, final project. Your current spine.
cs50.harvard.edu/python146 exercises across 17 concepts, free human mentoring. Not for this sprint — there aren't spare windows. This is what you move to after the 17th, in place of Mimo.
exercism.org/tracks/pythonThe harness. Overview, quickstart, then tools, subagents, backends, permissions, skills, memory, streaming.
docs.langchain.com · deepagentsRead it, don't just import it. The best architecture lesson available to you right now.
github.com/langchain-ai/deepagentsList pods, stream logs, apply manifests, watch events. pip install kubernetes
Operator framework. A full operator in two files: a Dockerfile and a Python module. Stable, v1, well documented.
kopf.devPhase 01 · six weeks · Aug 18 – Sep 28 · 70 hours
Straight on from the sprint: still Python, still building things that run, no new mathematical machinery and no prerequisites you don't have. Six weeks at roughly twelve hours — a different pace from Phase 00 on purpose, because this one doesn't compress the same way.
One rule governs the whole phase. Build the structure from scratch before you solve a single problem with it.
The task lists below specify about 55 of the 70 hours. The rest is unallocated on purpose — your own implementations will have bugs, and debugging code you wrote is the learning rather than an interruption to it. If a week runs clean, spend the slack on drilling.
The standard failure mode is going straight to problem sites. You get fast at recognizing which structure a problem wants and never learn what the structure costs — so you can pick a hash table but can't tell me why it degrades, or why a poor key choice quietly turns your O(1) into O(n).
Writing your own is what makes the costs real. Every week here is implement first, drill second, and the drilling is much faster afterward because you're recognizing machinery you've already built.
It was the original recommendation here and it was wrong for this point in the plan.
6.006 is an MIT sophomore course that lists discrete mathematics as a prerequisite, and lecture one opens with models of computation and proving solutions correct. Coming off CS50P you'd burn your energy fighting the framing rather than learning the structures — and the framing isn't what you're here for yet.
The Runestone book is built for exactly this gap. Its own preface says it assumes you may still be struggling with basics from a first course and are ready to go further anyway. It's Python, it's free, and the code runs in the browser, which suits how you learn better than a lecture hall recording does.
6.006 isn't discarded — it moves to week six, as a sharper second pass over material you've already built. Read that way it lands as tightening rather than teaching. And the proofs it does are the ones you'll be equipped for after Phase 02.
Everything you write from nothing, and the few things you only read about. Each of these lands in one repo with tests, and by week six it's the artifact that proves the phase.
| Structure | What building it teaches | Verdict |
|---|
Handed an unfamiliar problem, your first instinct is to ask what structure it wants — and you're usually right.
The concrete test: twenty problem statements you haven't seen, and for each one you name the structure and justify the choice in a sentence, without solving any of them. If you're above sixteen, you're done. Below twelve, you skipped the implementing.
The spine. Free, interactive, code runs in the browser. Chapters 2 through 7 are the whole phase: analysis, basic structures, recursion, sorting and searching, trees, graphs.
runestone.academy · pythonds3Week six only, as a second pass. Free lectures, notes, and problem sets, taught in Python. Come back to it properly after Phase 02.
ocw.mit.edu · 6.006 Spring 2020Problems organized into a deliberate sequence rather than a pile. Start it only after you've built the structure a problem uses.
neetcode.io/roadmapReference, not reading. Look things up in it; don't work through it. 6.006 uses it as an optional companion for exactly this reason.
mitpress.mit.edu · CLRSAfter you've built your own dynamic array and hash table, read how the real ones work. The comments are unusually good.
github.com/python/cpython · ObjectsPhase 02 · six weeks · Sep 29 – Nov 9 · 45 hours · +1 optional
So the whole phase is built around that. Week one contains no proofs at all. The first proofs you write are about data structures you built yourself in Phase 01. And every technique here has a fixed shape you can look up — proofs are far more formulaic than their reputation suggests.
Six weeks at about seven and a half hours. Slower than anything else on the plan, deliberately. A seventh week on automata and computability sits at the bottom as an optional extension — take it and Phase 03 starts a week later.
This isn't hard math in the sense that decayed on you. There's almost no computation in it. It's careful argument — stating exactly what you're claiming, then showing it holds in every case rather than the cases you happened to test. That's structurally much closer to building an appellate argument than to integration by parts, and you already do the hard version of that professionally. What's unfamiliar is the notation, not the reasoning.
Two things are true about the difficulty. It genuinely feels foreign at first — expect roughly two weeks. And almost nobody quits after that point. The risk window is narrow and it's at the very start, which is why the first fortnight here is deliberately gentle.
Their proof course, CS103, states plainly that there are no math prerequisites — high-school algebra is enough. What it does require is the programming course before it, and it leans on recursion from that course throughout. That's the same ordering you're running: structures and recursion first, proof second, and no calculus anywhere near it.
They also run an entire optional companion course, CS103A, purely for extra proof practice and problem-solving strategy, described as existing because math is a skill that takes practice to develop. A university with Stanford's admissions bar staffs a support course specifically for this transition. The wall you're anticipating is real, institutionally acknowledged, and routinely got over.
The single most anxiety-reducing fact about proofs: each type has a fixed skeleton. You're not inventing an argument from nothing — you're picking a form and filling it in. Keep this table open for the first month.
| Type | Reach for it when | The skeleton |
|---|
When you're stuck on a proof, the question is almost never "what's the clever idea." It's "which shape is this." Work down the table: can I go direct? Is the contrapositive easier? Is there a smallest counterexample to rule out? Is there a recursive structure to induct on?
Nine times in ten, choosing the right shape does most of the work, and the rest is bookkeeping.
Not typed. Handwriting is slower, and the slowness is the mechanism — you can't autocomplete your way past a step you don't understand. This is also the one phase where the assistant does the most damage. Struggling with a proof is how the skill forms; watching someone else's finished proof is how you learn to recognize proofs without being able to write one.
Hammack develops proofs the way you'd actually think them through rather than presenting them finished, and there are fully written-out solutions in the back. That combination is the whole reason it's the right book here — but only if you write your attempt before you look. Reading a worked proof feels like learning and isn't.
Given a recursive function, you can write a correctness proof by induction without a template in front of you.
The concrete test: take a recursive function you wrote in Phase 01 that you haven't proved anything about — the BST search, or the recursive flatten. State precisely what it returns, then prove it. Base case, inductive hypothesis, inductive step, no reference material. If you can do that in twenty minutes, Phase 03 will work.
The spine. Free, and the Runestone version has interactive exercises with instant feedback. The 4th edition reorganized to start with logic and proofs, then practise those proofs on graph theory — which is exactly the order you want.
runestone.academy · dmoi-4The proof-technique companion. Free PDF. Assumes very little, develops proofs as a thought process rather than a finished artifact, and has fully worked solutions in the back.
richardhammack.github.io/BookOfProofstructures/ repoPhase 01's output, and the source of nearly every proof you write in weeks 2 through 4. Proving things about code you wrote beats proving things about arbitrary objects.
LocalOptional. Free lectures and a well-regarded textbook, considerably more rigorous. Dip into a lecture when you want a second explanation; don't adopt it as the spine.
ocw.mit.edu · 6.042JPhase 03 · nine weeks · Nov 10 – Jan 18 · 90 hours
Twice the size of anything else here. This is where you stop being someone who can code and start being someone who can say whether a plan is feasible before anyone builds it — and where the two phases before it finally pay off at once.
Nine weeks at about ten hours, including one deliberately fallow week over the holidays. One algorithmic idea per week, each closed out by a small implementation — the structure Stanford's algorithmic toolbox course uses, and it works because a week's idea sticks better when it ends in something that runs.
The task lists specify roughly 77 of the 90 hours. The remaining thirteen are slack for the weeks that overrun — and in this phase that will be weeks 4 and 5, because dynamic programming always takes longer than the estimate says.
Erickson's Algorithms — the spine for this phase — states its own prerequisites plainly: discrete mathematics including predicate logic, sets, functions, recursive definitions, trees and graphs as abstract objects; and proof techniques including direct, indirect, contradiction, exhaustive case analysis, and induction, especially strong and structural induction.
That is Phase 02's syllabus, almost line for line. You'll arrive holding exactly the tools this book assumes, which is the difference between reading it and fighting it. Its author also notes it isn't suitable as a first course in data structures and algorithms — which is why Phase 01 came first.
The counterpart to Phase 02's proof shapes card, and the harder of the two. Most algorithm problems are not hard because the technique is hard — they're hard because you picked the wrong technique and spent an hour before noticing. Work down this table before writing anything.
| Paradigm | The tell | What you must verify |
|---|
Each week's twenty-minute task is the minimum; the better version is a small implementation that uses the week's idea on data you care about. Karatsuba on big integers. Dijkstra on your own dependency graph. Edit distance on two versions of a file you wrote. It takes an hour and it's the difference between having read about an idea and having used one.
Go down the list, not to your favourite. The single most common failure is reaching for dynamic programming when a greedy choice is provably safe, or reaching for greedy when it isn't — and the second one produces code that passes your tests and is wrong.
When you can't tell, write the brute-force recursion first. It's always correct, it makes the subproblem structure visible, and if the subproblems overlap you've just discovered you're in dynamic programming territory. That path is the whole design of weeks 3 through 5.
You can look at a proposed system and give a defensible answer on whether it scales — before it's built.
The concrete test, in three parts. Given an unfamiliar problem: name the paradigm and justify the choice. Write the recurrence and solve it for a bound. And when the honest answer is that no efficient algorithm exists, recognise that and propose an approximation instead of searching for one that isn't there. The third part is the one that separates this from interview preparation.
The spine. Free, Creative Commons, grew out of years of lecture notes at Illinois. Chapters 0 through 8 and 12 are this phase; the flow chapters are the deliberate skip. Appendix II on solving recurrences is worth reading in week 1.
jeffe.cs.illinois.edu · algorithmsNow genuinely appropriate. You met it as a second pass in Phase 01; here it works as a full parallel track when you want a lecture instead of a page.
ocw.mit.edu · 6.006Volume, especially for the dynamic programming section in weeks 4 and 5. Use it after Erickson's treatment, never instead of it.
neetcode.io/roadmapReference only. Look things up; don't work through it. Useful when you want a second statement of a proof.
mitpress.mit.edu · CLRSPhase 04 · six weeks · Jan 19 – Mar 1 · 55 hours
The phase that answers "why is it slow" and "why did it crash" — questions nothing at the language level will ever explain. Six weeks at about nine hours, and structurally the most enjoyable stretch on the plan.
Nand2Tetris is the spine and it's built for how you learn: you construct a working 16-bit computer from NAND gates upward, with automated tests at every layer.
The task lists specify about 45 of the 55 hours. The rest is slack, and in this phase it goes to weeks 2 and 3 — a chip that fails its test script can eat an evening, and that debugging is the learning rather than an interruption to it.
Nothing depends on this and it has no prerequisites, so it's the one to pull forward if the math phases start to grind. But it also compounds harder than anything else with the work you'll have been doing since August: you borrowed ten hours of it back in Phase 00 to make containers legible, and this is where the layer underneath that arrives.
The through-line is the abstraction stack at the bottom of this page. Every layer hides the one below it until something breaks, and then the layer you don't understand is the one you're stuck in. By March there shouldn't be one.
The organising idea of the phase, and the third of these tables after Phase 02's proof shapes and Phase 03's paradigms. Each layer exists to let you ignore the one below it. That works until it doesn't — and when something breaks, the question is which layer you're actually in.
| Layer | What it lets you ignore | What leaks when it breaks |
|---|
When something is slow or wrong, walk down rather than sideways. Most debugging failure is staying at the language level — rereading your code — when the symptom is actually a cache miss, a page fault, a linker mismatch, or a cgroup limit. The symptom tells you the layer if you know what each one sounds like.
That's the whole reason this phase exists, and it's why the two layers you already met in Phase 00 sit near the top of the table rather than at the bottom.
You can profile something slow and form a real hypothesis about why, rather than guessing at the code.
The concrete test: take a program that's underperforming and, before changing anything, name the layer you think is responsible and say what evidence would confirm it. Then go get the evidence. Being right isn't the bar — having a falsifiable hypothesis instead of a hunch is.
The spine. Build the gates, the ALU, the registers and RAM, the CPU, and the assembler. Automated tests at every step, and there's a browser IDE so there's nothing to install.
nand2tetris.org/courseThe hardware simulator, in the browser. Load your HDL, run the supplied test script, get told immediately whether the chip is right.
nand2tetris.github.io/web-ideTargeted chapters only — data representation, the memory hierarchy, linking, and concurrency. Reference for weeks 4 through 6, not a book to read cover to cover.
CSAPP, 3rd edition
Phase 00's output, and the thing this phase explains. Every week has something in it you can point at running.
Local
Phase 05 · four weeks · Mar 2–29 · 30 hours
The shortest substantial phase on the plan, and the one with the most immediate payoff for the work you'll have been doing since August. Embeddings, similarity, attention, retrieval — all of it is this, and none of it makes sense without it.
Four weeks at about seven and a half hours. No calculus needed, which is why it comes before the calculus refresher rather than after.
Learn it geometrically, then implement it. Do not learn it as arithmetic. Most linear algebra courses teach you to row-reduce matrices by hand, which is the one skill you will never use and the one that makes people believe they hate the subject.
Every concept here has a picture attached — a matrix is a transformation of space, a determinant is how much it stretches area, an eigenvector is a direction the transformation doesn't rotate. Get the picture, then write the code, then let NumPy do the arithmetic forever after.
The fourth of these reference cards, after proof shapes, paradigms, and the abstraction stack. Every row is one object, its picture, and where you've already met it without knowing its name.
| Object | The picture | Where you meet it |
|---|
The exit criterion for this phase is reading the linear algebra in an ML paper as description rather than as noise. That's a translation skill: the notation is dense, but it's describing operations on shapes, and the shapes are what you're building intuition for.
When you hit an unfamiliar expression, ask what it does to the space rather than what it computes. That question is answerable from four weeks of work; the arithmetic question mostly isn't, and mostly doesn't matter.
You can read the linear algebra in an ML paper as description rather than as noise.
The concrete test: open a paper on something you actually care about — retrieval, attention, embeddings — and read the equations. For each one, say what it does to the space in a sentence. You don't need to derive anything. If you can narrate the shapes, you're done.
The spine for intuition. Fifteen short chapters, entirely geometric, and the single best explanation of the subject that exists in any medium. Watch it twice if needed; it's under four hours.
3blue1brown.com · linear algebraWhere the arithmetic lives after week one. Build each operation by hand once, then use the library and never hand-compute a determinant again.
numpy.org · absolute beginnersOptional, and the classic. Lectures free on OCW. Dip in when you want a second explanation with more rigour; don't take it as the spine — its emphasis on hand computation isn't what you need.
ocw.mit.edu · 18.06Free book. Part one is linear algebra written specifically for where you're heading, which makes it a better second source than a general textbook.
mml-book.github.ioPhase 06 · one week · ~10 hours
You took Calc I and lost it, which is fine, because you need about four ideas from it and none of the mechanics. This is intuition repair, not a course — the smallest phase on the plan, placed one week before the only phase that uses it.
Three blocks: watch, drill, then code it. The last one is what makes it stick.
This was Phase 01 on the first draft, which was wrong. Nothing in data structures, proof, algorithms, systems, or linear algebra needs calculus — it's load-bearing only for probability and for reading the gradient in an ML paper.
Learning it first would have meant six months of decay before first use, on material that is pure intuition and therefore decays fastest. Here it sits one week ahead of Phase 07, which is the only thing that consumes it.
Essence of Calculus is twelve chapters and roughly three hours. You need about half of it. The skips aren't laziness — they're the parts that exist to gate engineering majors rather than to serve you.
| Chapter | Why | Verdict |
|---|
One artifact settles it.
You can write gradient descent from scratch on a function of two variables — no library, no reference — and explain out loud what every term in it is doing and why the minus sign is there.
That single program uses all four things this phase exists to give you: derivative as rate of change, the chain rule, partial derivatives, and the gradient. If you can write it cold, you're done. If you can't, you know exactly which of the four is missing.
Twelve chapters, geometric intuition rather than mechanics. The whole watch block.
3blue1brown.com · essence of calculusWhere partial derivatives and the gradient live. Grant Sanderson wrote and narrated much of this series, so it's continuous with the videos above.
khanacademy.org · multivariable calculusChain rule drills only. Ignore the rest of the unit.
khanacademy.org · differential calculusYour answer key. Differentiate and integrate symbolically to check what you computed by hand or in code.
sympy.orgPhase 07 · five weeks · Apr 6 – May 10 · 35 hours · final core phase
The last phase of the core, and the one that underwrites the most: machine learning, randomized algorithms, average-case analysis, cache behaviour, cryptography, and every honest claim anyone makes about whether a system works.
Five weeks at seven hours. Also the subject most improved by already having Python — for every concept, write the Monte Carlo version and watch it converge.
Simulate before you derive. Every concept gets twenty lines of Python that generate the thing and count outcomes, run before you work through the algebra. You'll be nine months into a plan that started with Python; this is where that becomes a genuine mathematical advantage rather than just a skill you happen to have.
Bayes in particular clicks permanently the first time you simulate a counterintuitive result and watch the number arrive exactly where the maths promised. That experience is not available to someone learning this from a textbook alone, and it's most of the reason this phase sits at the end rather than the beginning.
The last of these reference cards. Every distribution is a story about how something is generated — and picking the right one is almost entirely a matter of recognising which story you're in. Blitzstein's book builds a flowchart showing how they all relate through conditioning or through limits; this is the practical version of that.
| Distribution | The story it tells | You meet it when |
|---|
Read the middle column first and ask which one describes your situation. Almost everyone reaches for the normal distribution by reflex, and it's frequently the wrong answer — latency isn't normal, retry counts aren't normal, and assuming otherwise is how confident people produce badly wrong estimates.
When none of the stories fits, that's real information too: it means you should simulate rather than reach for a closed form. Which is the whole method of this phase anyway.
You can quantify uncertainty in a system you built, and you reach for simulation before you reach for a closed form.
The concrete test: take a claim you'd want to make about your own work — this agent is better, this change reduced latency, this failure rate is acceptable — and state it with an honest interval around it. Say how many observations you'd need to believe it, and what would change your mind. If you can do that without looking anything up, the core is finished.
Nine months, 383 hours, eight phases. What comes next is on the electives page: probe three in mid-May, then one concentration with real depth. Neuromatch's prerequisites are Python, linear algebra, probability, statistics and calculus — you'll have finished the last of those the week before their July cohort opens.
Worth doing on the last day: reread the plan page. Not for nostalgia — to notice which of the things that looked hardest in August turned out not to be, because that recalibration is what you'll use to scope the next thing you decide to learn.
The spine. Free online, second edition. Notable for story proofs — proving results by interpretation and by counting the same thing two ways, rather than by algebra. That technique is Phase 02 cashing in.
probabilitybook.netThirty-four lectures, free, Blitzstein teaching the book. Watch selectively rather than all of it; the chooser table tells you which topics you actually need.
stat110.hsites.harvard.edu/youtubeThe interactive version — animations, embedded problem-solving, complementary to the lectures rather than a substitute. Free to sign up, and it suits how you learn better than passive video.
stat110.hsites.harvard.eduWhere every concept gets tested. One notebook per week, one simulation per idea. By May this is the most useful artefact the phase produces.
LocalElectives · probes · concentration · Sep 2026 – 2027
The core plan makes you competent. This decides what you're competent at. Three cheap probes spread across the core, then one concentration with real depth — and a monthly habit that costs nothing because it runs on hours you're already spending.
Nothing here competes with core hours. The failure mode for this plan was never difficulty, it was attrition.
You described the three differently, and the difference is the useful signal. AI is a bet about where the world is going. Data science and economics is justified by what's already on your CV. Neuroscience is the only one you described in terms of wanting.
And "everything will be AI-adjacent soon" is an argument against AI as a concentration. If it becomes the substrate, it stops being the differentiator — you're already getting forty hours a week of it, and Phases 00 through 07 are its foundation. The concentration is what you bring to it.
The last column is yours. Fill it in after each probe, in your own words, while it's fresh — the whole point of a probe is that it produces evidence, and evidence you don't write down turns back into a hunch within a fortnight.
| Interest | How you described it | What the probe tests | Verdict |
|---|
The concentration question and the business school question are the same question in different clothes. If the honest end state is research-adjacent work connected to neuroscience, an MBA is a strange instrument for getting there. If it's leading AI organisations, it's a very good one.
That's not a call anyone else should make. But notice the sequencing: probe one lands in early October 2026, probe two in March 2027, and the concentration in the summer. Every one of those produces information the Darden decision needs, and all of them arrive before it has to be made.
The worst version is deciding by default — letting the deadline choose because the probes never happened.
Free, complete, self-paced curricula in Computational Neuroscience and NeuroAI. Notebook-based. This is probe one and, quite possibly, the concentration.
neuromatch.io · open resourcesThe taught version: pods, TAs, projects, a global cohort. Runs each July, so July 2027 lands almost exactly where the core plan ends.
neuromatch.io/coursesPython, linear algebra, probability, basic statistics, and calculus including derivatives and ODEs. Read this list against Phases 05, 06, and 07 — the overlap is close to exact.
compneuro.neuromatch.io · prereqsEvery probe extends what you already built rather than starting fresh. Green-field probes don't get finished; extensions do.
Local