Learning path
The topics I consider essential to develop software professionally, with the readings, videos and book chapters I chose to learn each one.
The path
Each stage mixes topics from several subjects. The basics of TDD come first, so you practice everything else by doing TDD.
Stage 1
TDD and objects
You start with the basics of TDD and use it from day one in simple katas. At the same time you learn to think in objects and to write clean code.
TestingTDD Basics · TDD as if you meant it · ZOMBIES · Test Structure · FIRST Principles · Parametrized Tests · Nested Tests · Transformation Priority Premise · Single Assert Rule
Programming LanguagesObject-Oriented Programming
Design PrinciplesClean Code · Encapsulation · Information Hiding
RefactoringRefactoring Basics · Code Smells · Basic Refactorings
Stage 2
Design principles
With TDD already in place, the katas get harder and help you practice the principles that make a design easy to change.
Design PrinciplesTell, Don't Ask · Law of Demeter · 4 Rules of Simple Design · Command Query Separation · Uniform Access Principle · YAGNI · DRY · Balanced Abstraction Principle · Law of Leaky Abstractions · Principle of Least Astonishment · SOLID · Coupling · Cohesion · Software Design Odors · Design by Contract · ETC · Connascence · Composition over Inheritance
RefactoringEncapsulation Refactorings · Moving Features Refactorings · Organizing Data Refactorings · Conditional Logic Refactorings · API Refactorings · Inheritance Refactorings
TestingTest Data Builders · Object Mother · Test Fixtures · Test DSL
Stage 3
Design patterns
Well-known solutions to recurring design problems. You practice them with TDD to recognize when they simplify the code and when they complicate it.
Design PatternsIntroduction · Creational Patterns: Factory Method, Abstract Factory, Builder, Prototype · Structural Patterns: Adapter, Bridge, Composite, Decorator, Façade, Proxy · Behavioral Patterns: Chain of Responsibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor, Null Object · Double Dispatch
CoursesDesign patternsStage 4
Outside-In and legacy code
Test doubles, Outside-In TDD and how to add tests to and refactor code that wasn't written with that in mind.
TestingTest Doubles · Mockist TDD · Classical Outside-In · Integration Tests · End-to-End Tests · Humble Object · Walking Skeleton · Test Pyramid · Types of Tests · Legacy Code
CoursesAdvanced TDDStage 5
Architecture
How to separate the domain from the delivery mechanisms and the infrastructure.
ArchitectureClean Architecture · Hexagonal Architecture · Interaction Driven Design · UI Architectures
Design PatternsEnterprise Patterns
CoursesClean ArchitectureStage 6
Technical practices and agile
How a team works to deliver quality software in a sustainable way: XP, continuous integration and delivery, and agility.
Technical PracticesExtreme Programming Basics · Automated Testing · Test First · Refactoring · TDD · Continuous Integration · Continuous Delivery · Pair/Mob Programming · Sustainable Pace
AgileAgile Basics · Agile Culture · Scrum · Agile Economics · Lean · Kanban · NoEstimates · User Stories · Technical Debt · Story Mapping · Elevator Pitch · Teal Organizations · Software Craftsmanship
Stage 7
Domain-Driven Design
Modeling complex domains together with the business, from strategic design to tactical patterns.
Domain-Driven DesignStrategic DDD · Knowledge Crunching · Bounded Context Integration · Value Objects · Entities · Domain Services · Domain Events · Aggregates · Factories · Repositories · Event Sourcing · Application Services · DDD UI · CQRS · Reporting
KatasMastermindStage 8
Architecture at scale
How a system is organized beyond a single application: monoliths, microservices, event-driven architectures and how to scale.
Macro ArchitectureMonoliths · Microservices Basics · Microservices Integration · User Interfaces · Splitting Monoliths · Scaling Microservices · Layered Architecture · Microkernel Architecture · Event Driven Architecture · Serverless · Cloud Native
TestingPerformance & Load Testing
Final project
An X-like social network, from the console to the web and mobile, where you apply everything together.
View the kata description
In parallel
Habits and skills you work on throughout the whole path.
Computing foundations
The technical base, to complete at your own pace.