About these courses

Choose a language. Learn by making things. Seven days at your own pace.

Choose your language

Learn to Code brings together practical, seven-day learning paths. Python has beginner, intermediate and advanced courses. JavaScript beginner starts from zero, with 36 lessons and a study-planner project. JavaScript intermediate adds 36 lessons on modules, asynchronous work, and a tested reading-queue app. TypeScript beginner adds 30 lessons with real compiler diagnostics, runtime validation and a typed planner. JavaScript advanced adds library design and bounded concurrency; TypeScript intermediate adds typed application boundaries. TypeScript advanced adds derived API contracts and a tested event gateway. Each has 30 public lessons. Java beginner starts from zero with 36 public lessons and a tested multi-file study planner.

Every course is public. Signing in is optional: it keeps your Python progress in an account, so it follows you between devices — signed out, it's kept in this browser. Seven days is a suggested pace: take as many sessions as you need.

JavaScript lessons run console examples in a Worker and webpage exercises in a separate preview. They include hints, independent practice and delayed review. The following details describe the original Python beginner course.

Who it is for

People who have never programmed, and people who program in another language and want Python quickly. It assumes nothing beyond being able to read English and use a browser.

If you already write Python comfortably, this is not for you — though Day 6 and Day 7 may still fill in corners.

How it is meant to be used

Read a lesson, then change the code in it. Not the exercise at the end — the examples in the middle. Break them deliberately, and read the error. The people who learn a language fastest are the ones who treat every example as a thing to poke rather than a thing to finish.

One day a day for a week is the intended pace, and 30 lessons in a long weekend is perfectly possible. What matters is doing them in order — every day leans on the one before it.

What it leaves out

A great deal, on purpose. There is nothing here on async, decorators beyond @dataclass and @property, metaclasses, regular expressions, threading, or the C API. None of it is needed to write useful Python, and all of it is easier to learn once the essentials are second nature.

The last lesson points at where to go for each of those.

How the code runs

Every editor on this site is a code-playpad element — a CodeMirror editor wired to a Python runtime. That runtime is Pyodide: CPython 3.14 compiled to WebAssembly, with the standard library intact.

It runs in a Web Worker inside your own browser tab. There is no server executing your code, nothing is uploaded, and a runaway loop can be stopped without reloading the page. The interpreter downloads once — roughly 11 MB — and your browser caches it after that.

The consequences are worth knowing: no threads, no multiprocessing, no subprocess, and no raw sockets. Files you write live in a private in-memory filesystem that resets when the runtime does.

How the site is built

Static pages generated by Astro, with lessons written as MDX, styling from Tailwind, and full-text search by Pagefind. There is no backend and no tracking.

Corrections

Technical writing is never finished. If a lesson is wrong, unclear, or an example does not run, that is a bug worth reporting — the fastest way to improve a course is a reader who says which paragraph lost them.

Ready when you are

Day 1 starts with a one-line program.

Start Day 1