Skip to main content

Learning Resources

This module is populated from the local chunked books in library/raw/semester-03-software-design/books, plus a small set of validated external references for code-review and ADR practice. Use this page as a source map, not as an instruction to read everything.

Source Stack​

BookRoleHow to use it in this module
Clean Code (Martin)Primary teaching sourceDefault escalation for clarity, review rubrics, comments, functions, classes, simple design, and stewardship
Good Code, Bad Code (Hansen)Primary / judgmentStrong for code-quality rubrics, testability, dependency injection, mocks, and defensive design
Refactoring (Fowler)Primary / tradeoffsWhen to refactor, YAGNI, two hats, problems with refactoring, commit cadence
Head First Design PatternsSelective supportPattern combinations (MVC, compound patterns) and "pattern sense" -- when patterns are and are not the answer
Design Patterns (GoF)Reference onlyCanonical vocabulary and pattern-selection discussion; do not read cover-to-cover
OOADSelective supportWhen a diagram is warranted, which UML diagram to pick, sequence-diagram examples

External Resources (validated)​

All links below were fetched and verified on 2026-04-22.

SourceWhat you getBest use
Google: Engineering practices -- Code reviewA complete, canonical rubric and etiquette guide used by a large engineering orgPrimary external reference for Clusters 2 and 5
Google: What to look for in a code reviewExpanded rubricCluster 2, Concept 04
Google: How to write code review commentsTone, clarity, explicit-suggest vs nit distinctionsCluster 2, Concept 05
Google: Handling pushback in code reviewsBoth sides of disagreement; useful for the author tooCluster 2, Concept 06
Google: The CL author's guidePre-review discipline from the author's sideCluster 5, Concept 13
Google: Speed of code reviewsWhy prompt review is a team policyCluster 5, Concept 14
Michael Lynch: How to do a code review (human side)Practical guide for kind, effective commentsCluster 2, Concept 05
adr.github.io -- Architectural Decision RecordsADR organization, templates, background referencesCluster 3, Concept 07
Nygard: Documenting Architecture Decisions (2011)The post that popularized ADRs; also itself an ADRCluster 3, Concept 07
joelparkerhenderson/architecture-decision-recordTemplates (short, long, Nygard, MADR) and real-world examplesCluster 3, Concept 07
c4model.com -- C4 modelThe simplest widely-used framework for architecture diagramsCluster 3, Concept 09
Conventional Commits v1.0.0Commit-message convention used in examples throughoutCluster 5, Concept 13 and 15

Resource Map by Cluster​

Cluster 1: Integrating Patterns in Real Systems​

NeedBest local chunkWhy
recognizing when a pattern is warrantedHFDP: Intro to design patternsGrounds the "problem first, pattern second" habit
"pattern sense" and force-based thinkingHFDP: May the force be with you (part 1)Most explicit treatment of pattern pressure
combining patternsHFDP: Compound patternsBest narrative example of layering patterns
pattern selection in GoF vocabularyGoF: 1.7 How to select a design patternShort, dense checklist
the four rules of simple designClean Code: Simple design rulesCanonical statement
duplication and emergenceClean Code: Emergence, no duplicationApplies the rules in a worked example

Cluster 2: Code Review as a Design Conversation​

NeedBest local chunkWhy
what clean code even meansClean Code: What is clean code (part 1)Foundational vocabulary for review
schools of clean-code thoughtClean Code: What is clean code (part 2)Shows disagreement is normal
comments vs namesClean Code: Comments do not make up for bad codeSupports review comments about unnecessary comments
constructive commentsClean Code: Redundant comments to scary noiseSharpens what counts as noise
quality rubricGood Code Bad Code: Code QualityClean, short rubric framing
"it has to work"Good Code Bad Code: Code should workCorrectness-first bucket
contracts between engineersGood Code Bad Code: Other engineers and code contractsFeeds receiving-feedback and review-as-conversation

Cluster 3: Design Documents and Decision Records​

NeedBest local chunkWhy
thinking about systems as wholesClean Code: How would you build a cityFrames "design is about boundaries"
cross-cutting concerns in designClean Code: Scaling up, cross-cutting concernsFeeds both ADR-07 and design-doc-08
design-first postureGood Code Bad Code: How this book is organizedSupports design-doc-08
why diagrams earn (or don't) their keepOOAD: Choosing the diagramsBest diagram-selection source
which UML to pickOOAD: Which UML diagrams should we chooseDirect answer for Concept 09
sequence-diagram modellingOOAD: Sequence diagrams (MVC chapter)Worked sequence example

Cluster 4: Pragmatic Tradeoffs​

NeedBest local chunkWhy
YAGNI vs architectureRefactoring: YAGNI and the wider processCanonical over/under-engineering lens
two hats and when to refactorRefactoring: Defining refactoring and two hatsSeparates behavior change from shape change
when to refactor (part 1)Refactoring: When should we refactor (part 1)Opportunistic stewardship
when to refactor (part 2)Refactoring: When should we refactor (part 2)Planned refactor windows
tests as testability enablersGood Code Bad Code: Make code testableCluster 4, Concept 11 anchor
DI as a design, not a test trickGood Code Bad Code: Design with DI in mindSeams without damaging the domain
"visible only for tests" as a smellGood Code Bad Code: Don't make things visible just for testsDirect prescription for Concept 11
mocks and stubs gone wrongGood Code Bad Code: Mocks and stubs can be problematicBalancing test doubles
reversibility via incremental refactorClean Code: Successive refinementFeeds reversibility Concept 12

Cluster 5: Review Workflows and Craftsmanship​

NeedBest local chunkWhy
small, clean, coherent classesClean Code: Classes should be smallSupports reviewable PR shape
cohesion and small classesClean Code: Maintaining cohesionSupporting
fast, independent, repeatable testsClean Code: F.I.R.S.T.Automated-checks hygiene
clean testsClean Code: Clean testsTests as first-class code
self-testing codeRefactoring: Value of self-testing codeFeeds Concepts 14 and 15
stewardship attitudeClean Code: Clean code attitudeDirect support for boy-scout rule
"we are authors"Clean Code: We are authorsFeeds narrative history
"why refactor"Refactoring: Why should we refactorFeeds broken windows and boy-scout framing

Primary Concept -> Book Chunk Map​

Every primary concept maps to at least one book chunk:

Primary ConceptBook chunk (primary)Book chunk (secondary)
01 Choosing patterns as response to pressureHFDP: Intro to design patternsHFDP: May the force be with you
02 Combining patterns: Decorator + Strategy + FactoryHFDP: Compound patternsHFDP: Decorator pattern
03 Simple design: the four rulesClean Code: Simple design rulesClean Code: Emergence, no duplication
04 Code review rubricsGood Code Bad Code: Code qualityClean Code: What is clean code (part 1)
05 Writing review commentsClean Code: Redundant comments to scary noiseGood Code Bad Code: Comments are a poor substitute
07 ADRs: format and purposeClean Code: How would you build a cityClean Code: Scaling up
08 Design documentsGood Code Bad Code: How the book is organizedRefactoring: Going further
10 Over- vs under-engineeringRefactoring: YAGNI and processRefactoring: Two hats
11 Designing for testabilityGood Code Bad Code: Make code testableGood Code Bad Code: Don't make things visible just for tests
13 Reviewable commits and PR shapeClean Code: Successive refinementClean Code: Classes should be small
15 Long-term stewardshipClean Code: AttitudeRefactoring: Why should we refactor

Use Rules​

  • If you are stuck on whether a pattern is warranted, go to Head First Design Patterns first -- its narrative style teaches pressure-before-pattern.
  • If you are stuck on a review comment, go to Google's eng-practices first; the one-page concept page usually covers the need.
  • If you are stuck on an ADR, open the joelparkerhenderson/architecture-decision-record repository for templates; write a draft before reading more.
  • If you are stuck on testability, Good Code, Bad Code is the best short source.
  • Open one chunk for one concept gap; do not read a whole chapter by default.
  • If rereading is not fixing the problem, stop and attempt the practice artifact (review, ADR, kata) before reading more.

Required review-and-repair evidence​

Complete the evidence-based review extension and all AR1–AR6 gates. Reuse its packet in the project; HCI/accessibility work remains separate and required.