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.