NICOLÁS BOTTARINI

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.

  1. 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.

    Testing

    TDD Basics · TDD as if you meant it · ZOMBIES · Test Structure · FIRST Principles · Parametrized Tests · Nested Tests · Transformation Priority Premise · Single Assert Rule

    Programming Languages

    Object-Oriented Programming

    Design Principles

    Clean Code · Encapsulation · Information Hiding

    Refactoring

    Refactoring Basics · Code Smells · Basic Refactorings

  2. 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 Principles

    Tell, 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

    Refactoring

    Encapsulation Refactorings · Moving Features Refactorings · Organizing Data Refactorings · Conditional Logic Refactorings · API Refactorings · Inheritance Refactorings

    Testing

    Test Data Builders · Object Mother · Test Fixtures · Test DSL

  3. 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 Patterns

    Introduction · 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

  4. Stage 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.

    Testing

    Test Doubles · Mockist TDD · Classical Outside-In · Integration Tests · End-to-End Tests · Humble Object · Walking Skeleton · Test Pyramid · Types of Tests · Legacy Code

  5. Stage 5

    Architecture

    How to separate the domain from the delivery mechanisms and the infrastructure.

    Architecture

    Clean Architecture · Hexagonal Architecture · Interaction Driven Design · UI Architectures

    Design Patterns

    Enterprise Patterns

  6. Stage 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 Practices

    Extreme Programming Basics · Automated Testing · Test First · Refactoring · TDD · Continuous Integration · Continuous Delivery · Pair/Mob Programming · Sustainable Pace

    Agile

    Agile Basics · Agile Culture · Scrum · Agile Economics · Lean · Kanban · NoEstimates · User Stories · Technical Debt · Story Mapping · Elevator Pitch · Teal Organizations · Software Craftsmanship

  7. Stage 7

    Domain-Driven Design

    Modeling complex domains together with the business, from strategic design to tactical patterns.

    Domain-Driven Design

    Strategic DDD · Knowledge Crunching · Bounded Context Integration · Value Objects · Entities · Domain Services · Domain Events · Aggregates · Factories · Repositories · Event Sourcing · Application Services · DDD UI · CQRS · Reporting

  8. Stage 8

    Architecture at scale

    How a system is organized beyond a single application: monoliths, microservices, event-driven architectures and how to scale.

    Macro Architecture

    Monoliths · Microservices Basics · Microservices Integration · User Interfaces · Splitting Monoliths · Scaling Microservices · Layered Architecture · Microkernel Architecture · Event Driven Architecture · Serverless · Cloud Native

    Testing

    Performance & Load Testing

  9. 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.