These are curated resources to potentially link from Problem-Formulation.md. Organized by topic, with notes on relevance and audience level.
I'd suggest a new section at the end of the chapter (before or after the values section), something like "## Further reading" or "## Going deeper: from problem formulation to professional practice". Could also sprinkle individual links inline where relevant (noted below).
- Full course for non-CS students: decomposition, pattern recognition, abstraction, algorithms
- Free to audit
- Level: Beginner
- Possible placement: Inline link in the "What is problem formulation" section, or in a further reading section
- Designed for librarians and information professionals (directly relevant audience!)
- Teaches computational thinking through practical scenarios, includes pseudocode exercises
- CC-BY licensed, free
- Level: Beginner
- Possible placement: Great inline recommendation since it's aimed at info science folks
- Free, peer-reviewed textbook chapter covering decomposition, pattern recognition, abstraction, algorithms
- Level: Beginner
- Possible placement: Further reading section
- Summary of Polya's 4-step framework (Understand, Plan, Execute, Review) applied to programming
- Written by the founder of fast.ai — a leader in accessible data science education
- Short read
- Level: Beginner
- Possible placement: Could work inline in the "What makes for a good problem formulation?" section, since it's about process/heuristics. Or further reading.
- University lecture on preconditions, postconditions, invariants
- Includes real-world failure examples (Ariane rocket, Mars probe) showing why specs matter
- Uses Java/Eiffel examples, but the conceptual framing transfers
- Level: Intermediate
- Possible placement: Further reading, with a note that the code examples are in other languages but the ideas apply
- The canonical introduction from the creator of Design by Contract
- Uses a "client-supplier contract" business metaphor that's intuitive for non-CS students
- Level: Beginner-Intermediate
- Possible placement: Further reading. The contract metaphor could also be referenced inline in the new "From problem formulation to specification" section.
- Written by a beginner for beginners
- Walks through red-green-refactor in Python with unittest
- Honest, relatable tone about why testing matters when you're still learning
- Level: Beginner
- Possible placement: Further reading, or inline in the "They become your tests" bullet
- From a data science education platform — framing aligns with students who work with data
- Practical Python TDD tutorial
- Level: Beginner
- Possible placement: Further reading
- Concise, language-agnostic explanation of TDD philosophy
- Emphasizes that writing tests first forces you to understand requirements before coding
- Level: Beginner
- Possible placement: Further reading
- Explains Behaviour-Driven Development: writing requirements in plain English "Given-When-Then" format
- Relevant for iSchool students who often bridge technical and non-technical teams
- Includes interview with Dan North (BDD's originator)
- Level: Beginner
- Possible placement: Further reading, with a note that the "Given-When-Then" format connects to the input/output examples practice
- Short, free video on using pseudocode to plan before coding
- Level: Beginner
- Possible placement: Could link inline in the problem formulation section, or further reading
- Explains debugging by explaining your code out loud — forces you to articulate your logic
- A lightweight "thinking before/while coding" technique
- Level: Beginner
- Possible placement: Further reading or inline in a debugging context
If adding a single section to the chapter, I'd group them like this:
Planning before you code:
- Library Carpentry: Computational Thinking (info science audience!)
- Polya's problem-solving framework applied to code
- Khan Academy: Planning with Pseudo-Code
From specifications to tests:
- freeCodeCamp: Intro to TDD with Python
- DataCamp: TDD in Python
- Inviqa: Beginner's Guide to BDD (writing requirements in plain English)
Going deeper (more advanced):
- USF Lecture: Programming by Contract (preconditions, postconditions, real-world failures)
- Eiffel Software: Design by Contract (the original "contract" metaphor)
- UPenn Coursera: Computational Thinking for Problem Solving (full course)