Diseño de software

    1. Diseño de software
      1. Diseño y arquitectura de software

        1. Principios de diseño orientado a mantenibilidad
          1. Acoplamiento bajo y cohesión alta
          2. Separación de responsabilidades (SoC)
          3. Encapsulamiento y ocultamiento de información
          4. Principios SOLID
          5. Interfaces estables y contratos claros
          6. Evolución controlada de componentes
          7. Facilidad de pruebas y capacidad de ser testeable
          8. Observabilidad y depurabilidad
        2. Principios como evitar repetición innecesaria y mantener la simplicidad
          1. DRY (Don’t Repeat Yourself)
          2. KISS (Keep It Simple, Stupid)
          3. YAGNI (You Aren’t Gonna Need It)
          4. Minimización de complejidad accidental
          5. Ley de Demeter
          6. Principio de menor sorpresa
          7. Minimización de dependencias implícitas
        3. Patrones de diseño (creacionales, estructurales y de comportamiento)
          1. Patrones creacionales
            1. Factory Method
            2. Abstract Factory
            3. Builder
            4. Prototype
            5. Singleton
            6. Object Pool
            7. Dependency Injection
          2. Patrones estructurales
            1. Adapter
            2. Bridge
            3. Composite
            4. Decorator
            5. Facade
            6. Flyweight
            7. Proxy
            8. DTO (Data Transfer Object)
          3. Patrones de comportamiento
            1. Strategy
            2. Observer / Publish–Subscribe
            3. Command
            4. Chain of Responsibility
            5. State
            6. Template Method
            7. Iterator
            8. Mediator
            9. Memento
            10. Visitor
            11. Specification
            12. Null Object
          4. Patrones concurrentes
            1. Producer–Consumer
            2. Reader–Writer
            3. Reactor
            4. Circuit Breaker
            5. Bulkhead
            6. Retry / Backoff
          5. Patrones arquitectónicos
            1. MVC / MVP / MVVM
            2. CQRS (Command Query Responsibility Segregation)
            3. Event Sourcing
            4. Pipes and Filters
        4. Arquitectura en capas
          1. Capa de presentación
          2. Capa de aplicación / servicio
          3. Capa de dominio / negocio
          4. Capa de infraestructura / persistencia
          5. Separación lógica vs separación física
          6. Dependencias dirigidas hacia adentro
          7. Problemas comunes del modelo de capas tradicional
        5. Arquitectura limpia
          1. Círculos concéntricos y dependencia hacia el dominio
          2. Entidades y casos de uso
          3. Interfaces de entrada y salida
          4. Controladores y presentadores
          5. Gateways / repositorios
          6. Independencia de frameworks
          7. Testabilidad y reemplazo de infraestructura
        6. Arquitectura hexagonal y separación de puertos/adaptadores
          1. Dominio como núcleo independiente
          2. Puertos (interfaces dirigidas hacia el dominio)
          3. Adaptadores primarios (driving)
          4. Adaptadores secundarios (driven)
          5. Sustitución de infraestructura (DB, colas, APIs externas)
          6. Aislamiento de efectos secundarios
          7. Pruebas a nivel de puerto
        7. Diseño guiado por el dominio (Domain-Driven Design)
          1. Lenguaje ubicuo
          2. Contextos delimitados (bounded contexts)
          3. Mapeo de contexto y relaciones entre contextos
          4. Modelo de dominio explícito
          5. Entidades de dominio
          6. Objetos de valor
          7. Servicios de dominio
          8. Agregados y raíces de agregado
          9. Repositorios
          10. Eventos de dominio
          11. Anti-corrupción layer
          12. Refactorización del modelo a partir del conocimiento del negocio
        8. Monolitos modulares y microservicios
          1. Monolito tradicional
          2. Monolito modular
          3. Fronteras de módulo internas
          4. Microservicios
          5. Criterios para extraer un microservicio
          6. Comunicación síncrona vs asíncrona
          7. Despliegue independiente
          8. Consistencia eventual entre servicios
          9. Observabilidad distribuida
          10. Versionado e independencia de ciclo de vida
          11. Enrutamiento y descubrimiento de servicios
          12. Gestión de fallas en cascada
        9. Arquitecturas dirigidas por eventos
          1. Productores y consumidores de eventos
          2. Bus de eventos y colas de mensajería
          3. Event Sourcing
          4. CQRS y eventos como fuente de verdad
          5. Coreografía vs orquestación
          6. Idempotencia en el consumo de eventos
          7. Consistencia eventual
          8. Retries y colas muertas
          9. Garantías de entrega (at-most-once, at-least-once, exactly-once)
        10. Versionado de interfaces y ciclos de vida de APIs
          1. Versionado de endpoints
          2. Versionado semántico
          3. Compatibilidad hacia atrás
          4. Deprecación controlada de contratos
          5. Estabilidad de contratos públicos
          6. Gestión del ciclo de vida de API
          7. Cambios breaking y comunicación interna/externa
          8. Evolución de esquemas y modelos de datos
          9. Control de capacidad y límites de uso (rate limiting)
          10. Políticas de seguridad y autenticación
        11. Documentación técnica orientada a desarrolladores y mantenimiento
          1. Documentación de arquitectura
          2. Diagramas de componentes y dependencias
          3. Especificación de APIs
          4. Contratos de servicios internos
          5. ADRs (Architecture Decision Records)
          6. Guías de despliegue y operación
          7. Manuales de resolución de incidentes
          8. Documentación de límites y garantías (SLO, SLA)
          9. Registro de cambios técnicos
          10. Estándares de estilo y convenciones
          11. Versionado de la documentación
          12. Documentación cercana al código vs documentación externa
        12. Modularización y empaquetado de componentes reutilizables
          1. Diseño de librerías internas
          2. Paquetes reutilizables por equipo/proyecto
          3. Reutilización vs copia localizada
          4. Estabilidad de interfaces internas
          5. Control de dependencias internas
          6. Gestión de versiones de componentes compartidos
          7. Monorepos vs multirepos
          8. Plugins y extensiones
          9. Políticas de rompimiento de compatibilidad interna
          10. Reglas de ownership por módulo
          11. Catálogo interno de servicios y librerías
          12. Distribución binaria vs distribución de código fuente
      2. Algoritmos y estructuras de datos

        1. Complejidad temporal y espacial (notación asintótica)
          1. O grande
          2. Ω y Θ
          3. Mejor caso, peor caso y caso promedio
          4. Complejidad amortizada
          5. Costos de memoria y caché
          6. Complejidad de acceso a memoria
        2. Análisis de eficiencia algorítmica
          1. Conteo de operaciones dominantes
          2. Análisis de bucles anidados
          3. Análisis de recurrencias
          4. Optimización temprana vs microoptimizaciones
          5. Trade-offs tiempo vs espacio
          6. Escalabilidad asintótica
        3. Estructuras lineales (listas, pilas, colas, colas dobles)
          1. Arreglos (arrays) y listas contiguas
          2. Listas enlazadas simples y dobles
          3. Pilas (stacks)
          4. Colas (queues)
          5. Colas dobles (deques)
          6. Listas circulares
          7. Listas bloqueadas / chunked
          8. Buffers circulares
          9. Implementación sobre memoria dinámica
          10. Costos de inserción, borrado y acceso
        4. Árboles, montículos, tries y estructuras jerárquicas
          1. Árboles binarios
          2. Árboles binarios de búsqueda (BST)
          3. Árboles balanceados (AVL, Red-Black)
          4. Árboles B y B+
          5. Árboles segmentados (segment trees)
          6. Fenwick / Binary Indexed Trees
          7. Montículos (heaps)
          8. Priority queues
          9. Heaps binomiales y Fibonacci
          10. Tries
          11. Compresión de tries y radix trees
          12. Árboles cuaternarios y octrees
          13. Árboles de intervalo y de rango
          14. Árboles de decisión
          15. Árboles de sufijos
        5. Grafos
          1. Representación de grafos (matriz de adyacencia, lista de adyacencia)
          2. Grafos dirigidos y no dirigidos
          3. Grafos ponderados
          4. Árboles de expansión mínima
          5. Caminos mínimos
          6. Detección de ciclos
          7. Ordenamiento topológico
          8. Componentes fuertemente conexas
          9. Flujos máximos
          10. Matching y emparejamiento
          11. Grafos bipartitos
          12. Conectividad y puentes
          13. Grafos dinámicos y online
          14. Grafos probabilísticos
        6. Hashing y tablas hash
          1. Funciones hash
          2. Colisiones y métodos de resolución
          3. Direccionamiento abierto
          4. Encadenamiento separado
          5. Rehashing y factor de carga
          6. Hash consistente
          7. Bloom filters
          8. Cuckoo hashing
          9. Tablas hash inmutables
          10. Trade-offs entre hash y árboles balanceados
        7. Algoritmos de ordenamiento y búsqueda
          1. Búsqueda lineal
          2. Búsqueda binaria
          3. Ordenamiento por comparación (quicksort, mergesort, heapsort)
          4. Ordenamiento no comparativo (counting sort, radix sort, bucket sort)
          5. Estabilidad del ordenamiento
          6. Selección del k-ésimo elemento
          7. Ordenamiento externo
          8. Ordenamiento parcial e incremental
          9. Búsqueda aproximada
        8. Recursividad y divide y vencerás
          1. Recurrencias clásicas
          2. Descomposición de problemas
          3. Mergesort / Quicksort como divide y vencerás
          4. Búsqueda binaria recursiva
          5. Poda y recursión con backtracking
          6. Recursión de cola y optimización de cola
          7. Profundidad máxima y stack frames
        9. Programación dinámica y memoización
          1. Subproblemas solapados
          2. Estados y transiciones
          3. Tablas bottom-up
          4. Memoización top-down
          5. Optimización de espacio
          6. Reutilización incremental de resultados
          7. DP con reconstrucción de solución
          8. DP en grafos acíclicos dirigidos
          9. DP probabilística
        10. Algoritmos de concurrencia y sincronización
          1. Secciones críticas
          2. Exclusión mutua
          3. Locks, mutexes y semáforos
          4. Barreras y barreras cíclicas
          5. Paso de mensajes
          6. Algoritmos sin bloqueo (lock-free)
          7. Algoritmos wait-free
          8. Consistencia de memoria
          9. Algoritmos de consenso
          10. Deadlocks y prevención
          11. Scheduling y fairness
          12. Control de contención
        11. Estructuras de datos inmutables o persistentes
          1. Árboles persistentes
          2. Listas persistentes
          3. Hash tries inmutables
          4. Copy-on-write
          5. Versionado estructural
          6. Sharing estructural
          7. Costos de mutación lógica
          8. Estructuras puramente funcionales
        12. Algoritmos probabilísticos y aproximados
          1. Algoritmos Monte Carlo
          2. Algoritmos Las Vegas
          3. Sampling aleatorio
          4. Sketches de datos
          5. Conteo aproximado y cardinalidad estimada
          6. Algoritmos streaming
          7. Aprox. para problemas NP-duros
          8. Randomización para balance de carga
          9. Probabilistic hashing
          10. Tolerancia a error y control de confianza
      3. Procesos de ingeniería de software

        1. Requisitos de software
          1. Requisitos funcionales
          2. Requisitos no funcionales
          3. Atributos de calidad (rendimiento, seguridad, confiabilidad, escalabilidad)
          4. Restricciones técnicas y regulatorias
          5. Requisitos operacionales
          6. Priorización de requisitos
          7. Gestión de expectativas de stakeholders
        2. Análisis, especificación y trazabilidad de requisitos
          1. Historias de usuario
          2. Casos de uso
          3. Escenarios de negocio
          4. Requisitos formales
          5. Modelos de dominio y vocabulario compartido
          6. Matrices de trazabilidad
          7. Control de cambios de requisitos
        3. Diseño de software
          1. Modelado de arquitectura
          2. Diseño de componentes y módulos
          3. Diagramas estructurales y de interacción
          4. Definición de interfaces
          5. Diseño orientado a pruebas
          6. Diseño para observabilidad
          7. Diseño para despliegue y operación
        4. Construcción y estándares de codificación
          1. Estándares de estilo
          2. Convenciones de nombres
          3. Revisión de código (code review)
          4. Guías de ramificación y control de versiones
          5. Integración continua
          6. Automatización de builds
          7. Gestión de dependencias externas
          8. Gestión de secretos y configuración
          9. Prácticas seguras de codificación
          10. Políticas de deuda técnica
        5. Verificación y validación
          1. Pruebas unitarias
          2. Pruebas de integración
          3. Pruebas de contrato
          4. Pruebas end-to-end
          5. Pruebas de regresión
          6. Pruebas de rendimiento y carga
          7. Pruebas de seguridad
          8. Fuzzing
          9. Revisión estática de código y análisis estático
          10. Auditorías técnicas
          11. Aprobación de despliegues
        6. Mantenimiento evolutivo y correctivo
          1. Corrección de defectos
          2. Refactorización continua
          3. Gestión de deuda técnica
          4. Extensión de funcionalidades existentes
          5. Migración tecnológica
          6. Compatibilidad hacia atrás
          7. Gestión de riesgos en cambios
          8. Planificación de fin de vida
        7. Gestión de la configuración
          1. Control de versiones
          2. Estrategias de branching
          3. Versionado semántico
          4. Gestión de releases
          5. Trazabilidad de cambios en producción
          6. Infraestructura como código
          7. Gestión de entornos
          8. Auditoría y cumplimiento
        8. Ingeniería de calidad de software
          1. Aseguramiento de calidad (QA)
          2. Control de calidad
          3. Estrategias de pruebas automatizadas
          4. Cobertura de pruebas
          5. Definición de criterios de aceptación
          6. Definición de DoD (Definition of Done)
          7. Observabilidad como parte de la calidad
          8. Gestión de incidentes y postmortems
          9. Revisión continua de confiabilidad
          10. Gestión de vulnerabilidades
        9. Procesos de desarrollo
          1. Cascada
          2. Prototipado evolutivo
          3. Iterativo incremental
          4. RUP / procesos unificados
          5. Agile / Agile industrial
          6. Scrum
          7. Kanban
          8. Lean software
          9. DevOps
          10. GitOps
          11. Continuous Delivery / Continuous Deployment
          12. Inner source y colaboración abierta interna
        10. Métricas de productividad y calidad del software
          1. Velocidad de entrega
          2. Lead time de cambios
          3. Tiempo medio de recuperación (MTTR)
          4. Frecuencia de despliegues
          5. Tasa de cambios fallidos
          6. DORA metrics
          7. Densidad de defectos
          8. Cobertura de pruebas útil
          9. SLOs y SLIs
          10. Disponibilidad y confiabilidad percibida
          11. Estabilidad vs velocidad de cambio
          12. Costo total de propiedad (TCO)
        11. Herramientas de soporte al ciclo de vida del software
          1. Sistemas de control de versiones
          2. Integración continua y pipelines de CI/CD
          3. Sistemas de seguimiento de issues
          4. Gestión de requisitos y especificaciones
          5. Gestión de arquitectura y documentación
          6. Monitoreo y alertas en producción
          7. Trazabilidad de despliegues
          8. Gestión de incidentes y on-call
          9. Feature flags y despliegues progresivos
          10. Entornos efímeros y pruebas aisladas
          11. Observabilidad (logs, métricas, trazas)
          12. Gestión de secretos y configuración segura
        12. Mejora continua de procesos y madurez operativa
          1. Ciclo de retroalimentación corta
          2. Postmortems sin culpa
          3. Revisión de arquitectura evolutiva
          4. Iteración sobre estándares internos
          5. Automatización sistemática de tareas manuales
          6. Reducción de trabajo no planificado
          7. Gestión activa de deuda técnica
          8. Capacitación continua y transferencia de conocimiento
          9. Escalamiento organizacional de prácticas efectivas
          10. Madurez operacional y confiabilidad como característica del producto
          11. Gobernanza técnica y responsabilidad compartida
          12. Cultura de seguridad incorporada en el proceso