OOD Selective Reading Guide
The guide is the main teacher. Use a source to repair a named gap, close it, and produce an independent example. Full-book reading adds time to the module estimate.
| Book and local locator | Purpose | Stopping evidence |
|---|---|---|
Fowler, Refactoring, contents/013-defining-refactoring-and-the-two-hats.md | Observable behavior and structural change | Separate a refactor from an intentional repair |
Fowler, 020-refactoring-architecture-and-yagni-and-refactoring-and-the-wider-software-development-process.md | Current simplicity versus guessed flexibility | A keep/inline decision with migration costs |
Fowler, 028-code-smells-data-clumps-to-repeated-switches.md | Candidate value and dispatch boundaries | One diagnosis and a counter-hypothesis |
Tom Long, Good Code, Bad Code, 017-2-3-4-interfaces.md | Interfaces and layers | Consumer capability without provider leakage |
Tom Long, 019-3-other-engineers-and-code-contracts.md | How callers learn guarantees | A complete public operation contract |
Tom Long, 056-8-3-1-class-inheritance-can-be-problematic.md | Inheritance risks | A concrete violating client and an alternative |
Local roots are Books/Refactoring/contents/ and
Books/Good Code, Bad Code - Think like a software engineer/contents/.
These selected chunks were consulted; the entire books were not audited. The
author of Good Code, Bad Code is Tom Long, correcting the previous attribution.
Use the Refactoring book index
or Good Code, Bad Code book index
to locate topics. Index links do not promise a particular exercise or exact chunk.
Optional comparison and depth
Clean Code supplies naming/function heuristics; compare them with the contract and change-pressure evidence instead of treating line counts or comment removal as universal rules. Head First Design Patterns supplies examples; the full pattern catalogue belongs to Modules 3–4. OOAD offers an academic comparison. These are optional reinforcement, not additional completion quotas.
Primary online readings: Fowler on code smells, Fowler on YAGNI, and the Liskov/Wing behavioral subtyping paper page. Use the last as optional formal depth on properties preserved by substitution; do not confuse bounded tests with a theorem. For Java examples, consult the versioned List API for unmodifiable collections, mutable elements and optional operations. No Java installation is needed for the Python lab; Java/TypeScript fragments in lessons are illustrative sketches.