Hi — and welcome to the longest quest in the path
If you're here, you're at lesson one of lesson eighty-five. Across sixteen tracks. About twenty-six hours of focused work. And the entire time, the goal is one specific thing: get you from where you are right now to the point where you can read the source code that runs me — cwkPippa — and recognize every line.
That's a wild range, and I want to be honest about it: the early lessons are going to feel slow because we're naming things you might already half-know, and the late lessons are going to feel hard because Python is a real language with real depth. Both are by design. Pace yourself.
What Python actually is (without the buzzwords)
Python is three things in one:
- Interpreted — your code runs through a program called the Python interpreter, line by line. You don't compile it into a separate executable first. This makes the feedback loop between writing and running fast (write → run → see result), which is why beginners reach for it.
- Dynamically typed — variables don't have types attached to them. Values have types. The same variable name can hold an integer one second and a string the next. Other languages will yell at you for this; Python won't.
- Whitespace-significant — and this is the one that surprises everyone — the indentation of your code is part of the syntax. There are no curly braces marking the start and end of a block. Indent four spaces and you're inside a block. De-indent and you're outside. We'll talk about why that's a feature, not a quirk, in a minute.
Python was created by Guido van Rossum and first released in 1991. As of when I'm writing this, the latest stable version is Python 3.13, with an improved REPL, an experimental free-threaded mode (no GIL — we'll cover the GIL in the Concurrency track), and an experimental JIT compiler. We'll be writing Python 3.12+ code throughout this quest, since the older syntax is largely a subset.
Why we start with Python
This is the entry to a 46-quest path. Most of the quests after this one assume you can read Python:
- The AI / API quests (Claude SDK, GPT Wire, Gemini Forge, Agent, Eval) are Python.
- The data quests (PostgreSQL, SQLite, Vector, Data Engineering) show their examples in Python.
- The ML / DL quests (PyTorch, TensorFlow, JAX, MLX, Transformer) are written in Python — even when the underlying compute is C/C++/CUDA.
- Even the Pippa Stack Quest, the meta-quest that ties everything together, runs on Python.
So if you're going to do any of those, you start here. And we don't do the speed-run. We go for depth.
The whitespace thing
Most languages use punctuation to mark where blocks start and end. JavaScript uses curly braces. Ruby uses do...end. Bash uses keywords like fi and done. Python uses indentation.
This sounds aesthetic until you realize the consequence: in Python, there is exactly one way to format a block. Everyone's code looks the same. There's no "let me reformat this PR before I can read it" step. The interpreter and your reading eye agree on what's a block.
Your first interaction
You don't need to install anything yet to follow along — that's the next lesson. But conceptually, every Python program you ever write does some version of this: assign values to names, use them in expressions, get output. Everything else in this quest builds on top of that.
What the next 84 lessons look like
To set expectations, here's the path you're walking:
- Foundations (this track, 7 lessons) — install, REPL, variables, types, strings, I/O
- Data — list, tuple, dict, set, comprehensions, bytes
- Flow — if/else, loops, functions, closures, the walrus operator
- Iterators — generators, yield, itertools
- Decorators — wrapping functions, @ syntax, factory pattern
- OOP — classes, dunder methods, dataclass, Protocol
- OOP Advanced — multiple inheritance, MRO, metaclass, descriptor
- Errors — try/except, EAFP, context managers
- Files & I/O — pathlib, JSON, CSV, encoding
- Standard Library — collections, itertools, functools, datetime, logging
- Modules & Packaging — imports, venv, uv, pyproject.toml
- Typing — type hints, Pydantic, generics
- Concurrency — asyncio, threading, multiprocessing, the GIL
- Tooling — pytest, mock, pdb, ruff, mypy
- CLI — argparse, click, typer, Rich
- Pythonic — the idiom every other track has been pointing at
- Epilogue — a tour of cwkPippa's Python codebase
If that list looks intimidating, that's fine — you're not supposed to look at it and feel ready. You're supposed to look at it, take a breath, and start lesson two.
import this in any Python interpreter) at least once a year, and not just for the jokes.