Skip to main content

Learning Resources

This module is populated from the local chunked books in library/raw/semester-03-software-design/books. 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 / readability and craftDefault escalation for naming, functions, comments, and SRP at class scope; smells chapter is a catalog second opinion
Refactoring, 2nd ed. (Fowler)Primary / smell catalog and movesCanonical catalog for Cluster 4-5 smells and their refactorings; read only the chunks the concept pages point at
Head First Design Patterns (Freeman & Robson)Primary / approachable OO principlesBest first pass on OCP, loose coupling, SRP, and the principle-behind-pattern framing
Good Code, Bad Code (Hansen)Selective supportPragmatic second opinion on classes, interfaces, comments, dependency injection, and "caring too much"
Object-Oriented Analysis, Design and Implementation (Dathan & Ramnath)Selective supportAcademic framing for cohesion, coupling, ISP, and LSP with clear contract-style examples
Design Patterns (GoF)ReferenceRead only the introduction chapters chunked here; the pattern catalog itself belongs to Modules 3-4
SICP (Abelson & Sussman)Background onlyUse only for abstraction-barrier vocabulary when encapsulation is not clicking

Resource Map by Cluster

Cluster 1: Cohesion, Coupling, and Encapsulation

NeedBest local chunkWhy
cohesion as a class-scope propertyClean Code: Maintaining cohesionStrongest "what does a cohesive class look like" passage
cohesion and coupling definitions side-by-sideOOAD: Cohesion and couplingCleanest academic framing; distinguishes kinds of coupling
loose coupling in practiceHead First: The Power of Loose CouplingBest operational explanation with worked example
encapsulation at module scopeOOAD: Modular design and encapsulationSolid framing of information hiding vs data hiding
encapsulating mutable stateRefactoring: Encapsulate VariableMechanical move that cements the concept
encapsulating collectionsRefactoring: Encapsulate CollectionDirectly fixes the most common leak

Cluster 2: The SOLID Principles

NeedBest local chunkWhy
SRP at class scopeClean Code: Single Responsibility PrincipleBest compact statement + cohesion bridge
SRP reframed as "one reason to change"Head First: Single Responsibility PrincipleAlternate explanation, good for second pass
OCP with worked exampleHead First: The Open-Closed PrincipleShortest credible walkthrough
OCP from a design-for-change angleDesign Patterns: Designing for changeCanonical framing from the pattern vocabulary authors
LSP with a concrete violationOOAD: Why a Pixel is not a SolidRectangle / LSPClearest non-Square example; contract-style
ISP in one moduleOOAD: Interface Segregation PrincipleAcademic-but-short ISP statement
DIP from a testability angleGood Code, Bad Code: Design with DI in mindPragmatic second opinion on mechanism vs principle
DIP at the systems levelClean Code: Systems / Dependency InjectionScales the principle beyond single classes

Cluster 3: Naming, Functions, and Readability

NeedBest local chunkWhy
meaningful names -- the rulesClean Code: Meaningful Names introductionCanonical list of naming rules with examples
naming -- pronounceability and scopeClean Code: Use pronounceable namesUseful for reviewing one's own names out loud
naming -- adding meaningful contextClean Code: Add meaningful contextBest for "is this name scope-appropriate?"
functions -- small, doing one thingClean Code: Functions -- Small, Blocks and IndentingStarting point for the stepdown rule
functions -- top-down readingClean Code: Functions -- Do One ThingOperationalizes "one thing, one level"
function decomposition as refactoringRefactoring: Extract Function (Part 1)Mechanics of the move, with code
comments -- when they lieClean Code: Comments do not make up for bad codeBest framing of comments as liability
comments as naming failuresGood Code, Bad Code: Comments are a poor substitute for namesTightest "rename instead" argument

Cluster 4: Code Smells -- Method and Class Level

NeedBest local chunkWhy
long function / long parameter listRefactoring: Long FunctionCanonical catalog entry
feature envy and data clumpsRefactoring: Divergent Change to Feature EnvyCanonical definitions + moves
data clumps and primitive obsessionRefactoring: Data Clumps to Repeated SwitchesCovers three smells in one chunk
Replace Primitive with ObjectRefactoring: Replace Primitive with ObjectMechanics of the canonical fix
Replace Conditional with PolymorphismRefactoring: Replace Conditional with Polymorphism (Part 1)Mechanics + justification
Clean Code smell catalog (second opinion)Clean Code: Chapter 17 -- Smells G12 to G18Uncle Bob's parallel catalog; useful for vocabulary

Cluster 5: System-Level Smells and Design Judgment

NeedBest local chunkWhy
divergent change and shotgun surgeryRefactoring: Divergent Change to Feature EnvyCanonical definitions side-by-side
moving scattered behavior homeRefactoring: Move Function (Part 1)Mechanics of the shotgun-surgery fix
combining scattered functionsRefactoring: Combine Functions into ClassHome-finding move for scattered behavior
parallel hierarchies and collapseRefactoring: Extract Superclass / Collapse HierarchyMechanics for flattening parallel trees
YAGNI and refactoringRefactoring: Architecture, YAGNI, and refactoringBest local statement of the tradeoff
"when layers get too thin"Good Code, Bad Code: When layers get too thinPragmatic check against speculative generality

External Resources

All URLs below were validated against the live web before inclusion. Each is non-duplicative with the local chunks.

Canonical reference

Primary lectures

Practitioner essays

Use Rules

  • If you are stuck on cohesion/coupling vocabulary, go to OOAD Chapter 1 first; Clean Code Chapter 10 second.
  • If you are stuck on a smell name or move, go to Fowler's Chapter 3 chunk for the smell and then the specific refactoring chunk -- do not try to read the book linearly.
  • Open one chunk for one gap; do not read a whole chapter sequence by default.
  • External URLs are for alternate exposition and for "is this principle still relevant?" arguments. They are not a second syllabus.
  • If rereading is not fixing the problem, stop and write the design critique of a real file in your own words before reading more.