Thank you for your interest in improving this course. Contributions of all kinds are welcome -- fixing typos, improving explanations, adding exercises, or writing new modules.
- Fork the repository
- Create a branch for your changes (
git checkout -b improve-module-05) - Make your changes
- Test that all code examples run correctly
- Submit a pull request with a clear description of what you changed and why
- Plain English first. Explain concepts in everyday language before introducing technical terms.
- Show, do not tell. Every concept should have a runnable code example.
- Be precise. "Fast" is vague. "O(1) lookup" is precise.
- Use British English for prose (colour, behaviour, organised). Code uses standard Python conventions.
- Every code example must be complete and runnable on its own. No fragments that cannot execute.
- Use realistic variable names and scenarios, not
fooandbar. - Include comments only where the code is not self-explanatory.
- Target Python 3.14+ syntax.
- Each module should have 3-5 exercises graduated by difficulty:
- Practice (1-2): Direct application of one concept
- Challenge (1-2): Combine multiple concepts, require planning
- Extension (1): Open-ended, connects to real-world problems
- Use
<details>tags for hints so learners can choose when to peek. - Solutions should include commentary explaining the reasoning, not just the code.
Starter files should help learners begin, but they should not become hidden walkthroughs.
- Early modules: be explicit. Show input/output, example sessions, and the obvious next step.
- Middle modules: show intended usage and expected result shape, but leave the implementation approach to the learner.
- Late modules: show one realistic demo path or interface example, with fewer process hints and less narration.
Use these patterns consistently:
- Function exercises: 2-3 example calls and expected outputs.
- Class exercises: create instances, call key methods, print one or two results.
- Data-structure exercises: show a short sequence of operations in order.
- API/database exercises: show one happy path and one edge or error path.
- Design exercises: show scenario prompts and output format, not pseudo-solutions.
Maintainer checklist:
- Does
main()show intended usage? - Does the learner know the output or result shape to expect?
- Does the file avoid leaking implementation?
- Is the help level appropriate for the module stage?
- Is the starter file doing something different from
exercises.md?
Follow the standard format defined in the root README:
- Introduction
- Prerequisites
- Learning Objectives
- Concepts (with code examples)
- Worked Examples
- Exercises
- Key Takeaways
- Further Reading
- Fixes a factual error or clarifies a confusing explanation
- Adds a practical exercise with a well-written solution
- Improves accessibility (better explanations, alternative approaches)
- Adds content to a planned but unwritten module that fits the existing course structure
- Do not add content that requires paid tools or services
- Do not add framework-specific content beyond what the curriculum covers
- Do not change the module numbering or part structure without discussion
- Do not add content that only applies to a specific operating system without noting it