Aprende a diseñar y desarrollar software de calidad en el mundo real
Curso online avanzado de diseño de software. Próxima edición: Comienza el 9 de Enero de 2025.
Desarrolladores de software, con un mínimo de experiencia profesional, que:
Fundamentos de diseño evolutivo de software y mentalidad de software crafter.
Una forma de programar adaptada a explotar el potencial de la IA, las herramientas modernas y capaz de adaptarse al cambio, con Test-driven development y Refactoring.
Cómo producir diseños mantenibles desde el principio y hacerlos crecer incrementalmente.
Conceptos clave de programación orientada a objetos y programación funcional, y cómo utilizarlos.
Cómo tomar decisiones de diseño en base a anti-patrones y balancear propiedades del código, en lugar de principios dogmáticos.
Cómo evitar bugs creando diseños resilientes, que protejan las reglas de negocio más importantes por diseño.
Patrones de diseño y sus usos en la actualidad, y cómo aplicarlos en el momento más adecuado.
Cómo integrar tus diseños con sistemas externos usando dobles de test.
Cómo documentar y comunicar el diseño.
¡Te damos la bienvenida!
Tu mapa del curso
Qué necesitas para afrontar esta formación
Cómo entrar a la comunidad
Metodología de este curso
Calendario del curso (¡compruébalo a menudo!)
El principio "Just sharing"
Excelencia vs Perfeccionismo
Entregarse al proceso vs dogmatismo
El poder de los hábitos y la mejora continua: El programador 1.1x
La disciplina del programador: cómo estudiar y practicar
Reconecta con tu pasión
DIRECTO: Sesión de grupo 1
Objetivos del diseño de software
Complejidad accidental vs complejidad esencial
BDUF vs Just enought design up front
Buen diseño = diseño simple
Diseño ágil
Wrap up
DIRECTO: Sesión de grupo 2
TDD como workflow de diseño incremental
La mecánia de test-driven development, explicada
DEMO: Workflow de TDD con Leap Year Kata
Rediseño via Micro-refactoring continuo, explicado
DEMO: Cómo practicar Micro-refactoring con Refactoring Golf
Cómo practicar Test-driven development
Conoce tus herramientas: Refactoring, IA y cómo combinarlas
PROYECTO (1.1). Servidor web HTTP
PROYECTO (1.2). Refactoring de la lógica de respuesta HTTP
TDD por sí solo no garantiza un buen diseño
DIRECTO: Sesión de grupo 3
DIRECTO: Sesión de grupo 4
Desarrollo incremental: Empezar por un primitive whole + continuar con incrementos
Cómo identificar el primitive whole + incrementos el método de lo hamburguesa
Cómo comenzar el flujo de TDD para implementar el primitive whole: el Walking Skeleton
Extraer responsabilidades para hacer crecer la solución
Refactorizando los tests: descendiendo en la pirámide de tests
Tips para diseñar una API simple: CQS principle + niveles de aislamiento + dependencias
PROYECTO (2.1). Routing
PROYECTO (2.2). Gestión de errores en código de usuario
PROYECTO (2.3). Permitir pasar path params
DIRECTO: Sesión de grupo 5
DIRECTO: Sesión de grupo 6
El diseño es mindfulness: Cómo tomar mejores decisiones de diseño escuchando al código
Code Smells: Definición y Origen
Principales smells (1/4): Duplicated Code
Principales smells (2/4): Primitive Obsession
Principales smells (3/4): Feature Envy
Principales smells (4/4): Message Chain
Categorías (1/5): Bloaters
Categorías (2/5): Object oriented abusers
Categorías (3/5): Change preventers
Categorías (4/5): Couplers
Categorías (5/5): Dispensables
Ejercicio: The code smell explorer
PROYECTO (3.1). Refactoring de path params matching
DIRECTO: Sesión de grupo 7
DIRECTO: Sesión de grupo 8
Desarrollarás tu propio micro-framework web, similar a Spring Boot, ASP.NET Core o Symfony.
Implementarás un framework en el que desarrollarás los siguientes componentes, desde cero:
Desarrollarás este framework de principio a fin con TDD, aplicando todos los conceptos, patrones y técnicas que verás en el curso.
El desarrollo del proyecto estará disponible íntegramente en video, para que puedas elegir entre seguir el paso a paso o desarrollarlo tú mismo.