| layout | default |
|---|---|
| title | How to Learn |
| nav_order | 3 |
| permalink | /learning-guide/ |
Advanced learning is not feature collecting. It is learning to predict behavior, control boundaries, measure trade-offs, and communicate why a design is safe enough for its context.
For each section:
- Terms: define every new word in your own language.
- Run: type the smallest example and predict its output.
- Analyze: trace object state, resource ownership, errors, and cleanup.
- Change: alter one assumption and observe the result.
- Explain: teach the mechanism and one reason not to use it.
Then solve Bug Hunters and practice before viewing help.
For a large example, identify:
caller contract
-> input validation
-> business rule
-> dependency boundary
-> result/error translation
-> cleanup and telemetry
Only then study implementation details. A descriptor, task group, cache, or circuit breaker should have a visible problem to solve.
For each experiment record Python version, operating system, input, expected behavior, actual result, measurement method, decision, and unresolved risk. This prevents a remembered guess from becoming a production fact.
- Write normal, boundary, failure, concurrency, and cleanup cases.
- Use the numbered hint only after a genuine attempt.
- Rebuild from memory after reading a solution direction.
- Compare at least one alternative and state its cost.
- Do not add concurrency, caching, metaclasses, or abstractions without a demonstrated need.
Continue when you can run the examples, solve at least eight of ten problems, explain the under-the-hood model, complete homework, and defend one rejected alternative. Revisit prerequisites when a chapter feels like unexplained magic.
Provide the contract, architecture/data-flow sketch, smallest reproducible code, full error, tests, measurements, security assumptions, and the trade-off you are considering. Good review depends on visible context.