Correct Code Press — We Teach Software Engineering the Correct Way.

CCF Recommended Reading

Master DSA Recommended Reading

Learn the language of software engineering.

These books introduce the principles, patterns, and design ideas professional software engineers use to build maintainable systems. CCF doesn't ask you to memorize them. Your CCF Companion books teach you how to reason about them.

Software Design

Your CCF Reading Path

Read the books in sequence. Each step builds the reasoning you will need at the next step. Your CCF Companion walks with you through every book.

  1. 01

    Clean Code

    Code that other engineers can read

  2. 02

    SOLID

    Why each responsibility belongs where it does

  3. 03

    Design Patterns

    Patterns as justified designs, not memorized answers

  4. 04

    Refactoring

    Structure that changes while behavior stays true

  5. 05

    Software Complexity

    What makes a system difficult to understand

  6. 06

    Domain-Driven Design

    What the system actually means

  7. 07

    Enterprise Architecture

    Where each decision belongs

  8. 08

    Clean Architecture

    What should depend on what, and why

The Curriculum

Master DSA Books

Every book below is paired with a CCF Companion that teaches you to reason about the book's ideas, not just remember them.

01 In the CCF Reading Path

Clean Code

A Handbook of Agile Software Craftsmanship

Robert C. Martin · 2nd Edition · Addison-Wesley Professional · ISBN 9780135398579

The modern rewrite of the classic guide to writing code that other engineers can read, understand, and safely change.

Why CCF Recommends It

Clean Code is the vocabulary course for the entire CCF reading path. It teaches the surface practices — naming, functions, comments, formatting — that make code legible, and it is the first place a CCF reader learns that code is written for other engineers, not just for the machine.

You Should Understand

  • Meaningful naming and readable functions
  • Comments that explain why, not what
  • Error handling as a design concern
  • Code that communicates to the next engineer

CCF Connection

CCF treats readable code as evidence a proof can survive contact with other engineers. If another engineer cannot read the code, the proof cannot be inspected, and an uninspectable proof is not a proof.

CCF Companion

CCF Companion: Reasoning About Code Quality

What makes code understandable to another engineer?

Moves beyond the checklist of clean-code practices to the reasoning beneath them: what it means for code to be understood, what understandability preserves, and how to judge a code quality rule against the invariant it protects.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

02 In the CCF Reading Path

Agile Software Development

Principles, Patterns, and Practices

Robert C. Martin · 1st Edition · Prentice Hall · ISBN 9780135974445

Uncle Bob's classic on agile design, class and package principles, and the reasoning that leads an object-oriented design toward maintainability.

Why CCF Recommends It

This is the book that made SOLID the common language of object-oriented design. CCF uses it to teach why a responsibility should live where it does — the first question a reasoning engineer asks before drawing a boundary.

You Should Understand

  • The SOLID principles of class design
  • Packaging principles and dependency management
  • Object-oriented design as disciplined reasoning
  • Agile practices as feedback, not ceremony

CCF Connection

CCF reads each SOLID principle as an invariant under change. A class that does not change for the reason it exists violates the single-responsibility intent; the framework asks which responsibility is the invariant before the code moves.

CCF Companion

CCF Companion: The Reasoning Behind SOLID

Why should this responsibility belong here?

Deconstructs SOLID into a chain of reasoning: which problem each principle solves, what forces it balances, when applying it is right, and when it becomes cargo cult.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

03 In the CCF Reading Path

Design Patterns

Elements of Reusable Object-Oriented Software

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides · 1st Edition · Addison-Wesley Professional · ISBN 9780201633610

The GoF catalog: 23 recurring solutions to design problems in object-oriented software, each documented with its forces, structure, and consequences.

Why CCF Recommends It

The GoF book is the canonical pattern catalog, but CCF does not teach it as memorization. The catalog is the map; the CCF Companion teaches the reader to navigate the problem space that produced each pattern.

You Should Understand

  • The 23 classic object-oriented patterns
  • Forces and consequences behind each pattern
  • When a pattern applies — and when it must not
  • Patterns as responses to recurring problems

CCF Connection

CCF reframes every pattern as a candidate design chosen from a problem space under constraints. A pattern is justified when the problem, forces, and constraints support it — and rejected when they do not.

CCF Companion

CCF Companion: Reasoning About Design Patterns

Which design is justified by the problem, not by the pattern?

Teaches the reasoning model — Problem Space → Constraints → Forces → Invariant → Candidate Design → Tradeoff → Proof — so patterns become conclusions you can reach, not answers you memorize.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

04 In the CCF Reading Path

Refactoring

Improving the Design of Existing Code

Martin Fowler · 2nd Edition · Addison-Wesley Professional · ISBN 9780134757599

Fowler's catalog of behavior-preserving transformations that improve the structure of existing code, with the testing discipline that makes each step safe.

Why CCF Recommends It

Refactoring introduces the two concepts CCF cares most about: behavior and structure. A refactoring changes structure while preserving behavior — which is exactly a CCF invariant-preserving transformation.

You Should Understand

  • Behavior versus structure
  • A catalog of behavior-preserving transformations
  • Code smells as signals of structural debt
  • Tests as the safety net for change

CCF Connection

CCF names refactoring's hidden contract: the invariant is the behavior, and each transformation must preserve it. The reader learns to ask which behavior must stay true while the structure is allowed to move.

CCF Companion

CCF Companion: Reasoning About Refactoring

How can the structure of a system change while preserving its behavior?

Places the catalog inside the CCF change model: name the invariant that behavior depends on, verify it with evidence, then authorize movement of structure without breaking the guarantee.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

05 In the CCF Reading Path

A Philosophy of Software Design

Complexity as the enemy of good software

John Ousterhout · 2nd Edition · Yaknyam Press · ISBN 9781732102217

Ousterhout's argument that the fundamental problem in software design is complexity, and that deep, information-hiding modules are the primary defense against it.

Why CCF Recommends It

This book names the enemy the entire CCF curriculum fights: complexity. It introduces abstraction, modularity, coupling, and information hiding as the weapons, and gives CCF the language to ask what makes a system difficult to understand.

You Should Understand

  • Complexity and its causes
  • Deep modules and information hiding
  • Abstraction and interfaces
  • Design tradeoffs and red flags

CCF Connection

CCF treats complexity as a measure of the reasoning burden a system imposes. A deep module is a place where the reader's reasoning about the outside does not need to include the inside.

CCF Companion

CCF Companion: Reasoning About Software Complexity

What makes a software system difficult to understand?

Turns complexity into a reasoning audit: where must an engineer hold state in their head, what forces the system to reveal, and where does a module hide its movement behind a stable interface.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

06 In the CCF Reading Path

Domain-Driven Design

Tackling Complexity in the Heart of Software

Eric Evans · 1st Edition · Addison-Wesley Professional · ISBN 9780321125217

Evans' landmark work on modeling the domain at the heart of the software: ubiquitous language, entities, value objects, aggregates, and bounded contexts.

Why CCF Recommends It

DDD is where the software stops being about code and starts being about meaning. It gives CCF its enterprise vocabulary: worlds, boundaries, invariants, and the language a system speaks.

You Should Understand

  • Ubiquitous language
  • Entities, value objects, aggregates, and repositories
  • Domain services and domain models
  • Bounded contexts

CCF Connection

CCF reads a bounded context as a world with a lawful boundary, and an aggregate as a boundary that protects an invariant. The domain model becomes the invariant set the system is built to preserve.

CCF Companion

CCF Companion: Reasoning About the Domain

What does the system actually mean?

Trains the reader to extract meaning before structure: what the domain must preserve, where its boundaries belong, and how ubiquitous language becomes a shared invariant across the team.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

07 In the CCF Reading Path

Patterns of Enterprise Application Architecture

The catalog of application structure

Martin Fowler · 1st Edition · Addison-Wesley Professional · ISBN 9780321127426

Fowler's catalog of patterns for layering enterprise applications, organizing domain logic, and tying that logic to a relational database.

Why CCF Recommends It

This book gives CCF readers the map of where application decisions belong: where domain logic sits, how it connects to the database, and how presentation stays out of the way.

You Should Understand

  • Layering an enterprise application
  • Domain logic organization patterns
  • Data source and database access patterns
  • Distributed and offline-concurrency concerns

CCF Connection

CCF uses these patterns to teach decision placement: each pattern answers where a decision belongs, and the framework checks whether the chosen location preserves the boundaries the architecture depends on.

CCF Companion

CCF Companion: Reasoning About Enterprise Architecture

Where does this decision belong?

Converts the pattern catalog into a placement discipline: which layer owns a responsibility, what each boundary protects, and how to place a decision where the invariant survives change.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

08 In the CCF Reading Path

Clean Architecture

A Craftsman's Guide to Software Structure and Design

Robert C. Martin · 1st Edition · Prentice Hall · ISBN 9780134494166

Martin's guide to structuring software so the business rules stay independent of frameworks, databases, and delivery mechanisms.

Why CCF Recommends It

Clean Architecture is the capstone of the Student path because it makes dependency direction explicit: what may depend on what, and why. That single question is the CCF question at architectural scale.

You Should Understand

  • The dependency rule
  • Boundaries between layers
  • Use cases and entities at the center
  • Architectural boundaries as business decisions

CCF Connection

CCF turns the dependency rule into a directional invariant: each arrow of dependency must be justified by what the depending layer needs, and the framework checks whether inverting the arrow changes what must be preserved.

CCF Companion

CCF Companion: Reasoning About Architectural Boundaries

What should depend on what — and why?

Teaches the reasoning behind dependency direction: what each boundary protects, which change each layer is allowed to tolerate, and how to draw a boundary from the invariants, not from the framework.

Where would you like to order?

Prices and availability may change. See the retailer for the current price. Prices last checked 2026-08-08.

Why CCF Recommends Reading

The Philosophy Behind This Reading Path

CCF is not designed to replace the software-engineering literature. These books represent decades of accumulated knowledge about software design and architecture. CCF adds another layer: reasoning. You don't become a better engineer by memorizing more rules. You become a better engineer by learning when a rule applies, why it exists, what problem it addresses, and what tradeoffs it creates.

Ready to move beyond software design?

Continue into Master Systems Reasoning and begin reasoning about systems.

Explore Master Systems Reasoning