Labs¶
Labs are short and mechanical: 15–45 minutes, one skill, immediate feedback. They exist so that a concept moves from "I read that" to "my fingers know that".
Status
Labs are being written alongside the volumes. The exercises embedded inside each lesson are complete and available now — start there.
How a lab works¶
- Setup — a starting repository state or a snippet to paste.
- Task — one clearly specified goal with a testable outcome.
- Checks — how to know you succeeded, usually a command that must pass.
- Stretch — an optional harder variant.
Planned labs¶
| Lab | Volume | Skill |
|---|---|---|
| Set up a project with uv | 3 | Packaging |
| Write your first pytest suite | 3 | Testing |
| Add ruff and mypy to CI | 3 | Quality gates |
| Build a GitHub Actions pipeline | 3 | CI/CD |
| Containerise a FastAPI service | 3 | Docker |
| Load and clean a messy CSV | 5 | pandas |
| Same task in Polars | 5 | Polars |
| Query Parquet with DuckDB | 4 | Analytics |
| Build a leak-free train/test split | 6 | ML |
| Chunk and embed a document set | 9 | RAG |
In the meantime, every lesson contains its own exercises with worked solutions: