Appendix D — A 90-day plan
Each week: read the chapters, run every snippet, break each one on purpose,
and do the stretch goals. Put your work in the rust-labs workspace from
§0.4.
| Weeks | Chapters | Build | Done when |
|---|---|---|---|
| 1 | 0–5 | setup; port five small Go or C programs you have written before | cargo clippy is clean without #[allow] |
| 2–3 | 6–9, 13 | the checkpoint, plus a Matrix type with Add/Mul and a tokenizer for arithmetic |
you can explain each E0382/E0502 you hit without looking it up |
| 4 | 10–12, 14–15 | wordfreq, hostsparse; a thiserror error enum for one of them |
errors have context and nothing panics on bad input |
| 5–6 | 16–22, 25 | rgrep, lru; implement Iterator for one of your own types |
the LRU passes property tests (§23.3) |
| 7 | 23–24 | add unit, integration, doc, and property tests to everything so far | cargo test covers each project's error paths |
| 8–9 | 28–31 | pool, then the health checker (§31.1) and graceful shutdown (§31.4) |
tokio-console shows no tasks blocking the executor |
| 10 | 32, 38, 45–46 | echo, framing, chat, dnsq, tinyhttp |
each one survives the hostile inputs from §46 and §53 |
| 11 | 39–44 | all Part IV labs on Linux, then rewrite one of the OS guide's Go labs | minibox runs a shell as PID 1 in its own cgroup |
| 12 | 47–50 | api, retries, safefetch, mtls, revproxy |
the §50 demo output matches yours, and you can explain each line |
| 13 | 51–56 | authsvc; fuzz dnsq for an hour; add cargo deny |
no unwrap in request paths; cargo deny check passes |
| 14–15 | 57–64 | MiniVec under Miri, kv, lifecycle; one kv stretch goal |
redis-benchmark runs against kv; Miri is clean |
| Ongoing | 65–68 | a workspace with CI from §66.2, deployed as a container with §67.2 settings | the service drains cleanly on kubectl rollout restart |