Learning Resources
This module is populated from the local chunked copy of How to Solve It by Computer (Dromey) in library/raw/semester-01-math-foundations/books. Use this page as a source map, not as an instruction to read everything.
Source Stack
| Book | Role | How to use it in this module |
|---|---|---|
| How to Solve It by Computer (Dromey) | Primary teaching source | Default escalation for Polya discipline, strategy selection, termination, verification, and the transition from problem to algorithm |
| How to Solve It (Polya, external) | Conceptual backbone | Read-if-curious; the four phases and heuristic catalogue originate here. Wikipedia summary cited below is sufficient for most needs |
| Mathematics for Computer Science (MCS) | Selective support | Use only for proof-technique reinforcement (contradiction, induction, invariants) |
| Introduction to Probability | Selective support | Story-proof chapter is a strong example of constructive-versus-counting reasoning |
| Linear Algebra and Its Applications (Strang) | Selective support | Use only for worked-problem examples of plan-versus-execution discipline |
Resource Map by Cluster
Cluster 1: Polya's Four-Phase Framework
| Need | Best local chunk | Why |
|---|---|---|
| getting started on a problem | Dromey: 1.2.2 Getting started on a problem | Best first pass on the "what am I actually being asked?" move |
| general problem-solving strategies | Dromey: 1.2.6 General problem-solving strategies | Catalogues the heuristic moves Polya names abstractly |
| carrying out a plan with verification | Dromey: 1.5 Program verification | Strongest short explanation of per-step justification in code and proofs |
| looking-back analogue: efficiency review | Dromey: 1.7.1 Computational complexity | Good example of the "can this be faster?" review move |
Cluster 2: Core Heuristics for Reducing Search
| Need | Best local chunk | Why |
|---|---|---|
| working-backwards examples | Dromey: 1.2.6 General problem-solving strategies | Contains concrete backward-reasoning examples |
| choosing a suitable data structure (analogy reinforcement) | Dromey: 1.3.2 Choice of a suitable data structure | Strong example of matching problem shape to known tool |
| special-cases and average-case thinking | Dromey: 1.7.4 Probabilistic average case analysis (Part 1) | Good drill on isolating one variable at a time |
Cluster 3: Structural Reasoning and Construction
| Need | Best local chunk | Why |
|---|---|---|
| verification with branches | Dromey: 1.5.5 Verification of program segments with branches | Strongest piece on invariant preservation across branching |
| proof of termination | Dromey: 1.5.8 Proof of termination | Best short treatment of monovariants and termination |
| loop termination | Dromey: 1.3.6 Termination of loops | Compact reinforcement of finiteness discipline |
| late-termination inefficiency (DP/D&C tradeoff) | Dromey: 1.6.2 Inefficiency due to late termination | Useful when deciding between divide-and-conquer and DP on efficiency grounds |
| complexity as a strategic lens | Dromey: 1.7.1 Computational complexity | Frames paradigm choice in terms of asymptotic payoff |
Cluster 4: Meta-Cognition and Growth as a Solver
| Need | Best local chunk | Why |
|---|---|---|
| debugging programs | Dromey: 1.4.4 Debugging programs | Best bridge from "program doesn't work" to "where is the reasoning bug?" |
| verification as a debugging aid | Dromey: 1.5 Program verification | Reinforces localization and per-step justification |
Cluster 5: Problem-Solving as the Bridge to Computing
| Need | Best local chunk | Why |
|---|---|---|
| informal prompt to formal problem | Dromey: 1.1 Introduction | Frames the problem-to-algorithm pipeline and the role of a precise problem statement |
| extracting the problem statement itself | Dromey: 1.2.2 Getting started on a problem | Strongest short treatment of moving from vague prompt to actionable question, including assumption surfacing |
| specs and per-step post-conditions | Dromey: 1.5 Program verification | Pre- and post-conditions as the vocabulary of a code spec |
| reading unfamiliar code (termination and invariants) | Dromey: 1.5.8 Proof of termination | Supplies the termination-measure discipline needed to understand someone else's loop |
| reading code as a debugging skill | Dromey: 1.4.4 Debugging programs | Bridges code reading to bug triage |
| triage, strategy under constraint | Dromey: 1.2.6 General problem-solving strategies | Strategy catalogue, useful when choosing what to try first under a time budget |
Probability note: Introduction to Probability (Blitzstein/Hwang) consistently translates English story problems into formal sample-space specifications. The opening chapters are a working model of informal-to-formal translation in a non-trivial domain; use them as exemplars if the Dromey chunks feel too code-centric.
External Resources (Read-If-Curious)
These are optional external anchors cited in the literature. None are required for module completion.
- How to Solve It by George Polya: the original four-phase framework (Wikipedia summary)
- Alan Schoenfeld, Learning to Think Mathematically, 1992: the standard academic treatment of metacognition in problem solving (PDF)
- Terence Tao, "Solving mathematical problems": a practicing research mathematician's advice (terrytao.wordpress.com)
- Art of Problem Solving (artofproblemsolving.com): a community resource for contest-level problem training, with wiki and exercise archive
- Project Euler (projecteuler.net): mathematical programming challenges graded by difficulty
- SICP §1.1, Structure and Interpretation of Computer Programs (mitpress.mit.edu SICP Ch. 1.1): classical introduction to specifying computations precisely before implementing them -- good exemplar for the informal-to-formal translation concept
Use these only if you want additional volume after the module work is complete.
Use Rules
- If you are stuck on "what is even being asked?", go to Dromey 1.2.2 first.
- If you are stuck on "what should I try?", go to Dromey 1.2.6.
- If your proof passed but felt shaky, go to Dromey 1.5 (verification).
- If your code runs but gives the wrong answer, go to Dromey 1.4.4 (debugging) before rewriting.
- Do not read linearly through Dromey. Open a single chunk for a single concept gap.
- If re-reading is not fixing the problem, stop and rewrite the plan in your own words before reading more.