Skills que aprenderás
Convocatorias
No hay convocatorias abiertas ahora mismo, pero no te pierdas la oportunidad: guarda este curso y te avisamos en cuanto se abra una convocatoria.
Recursos
No hay recursos disponibles todavía para esta convocatoria
Dirigido a desarrolladores con dominio sólido de Kotlin que buscan llevar su práctica profesional al nivel de diseño arquitectónico y optimización sistémica. A lo largo de diez horas, el participante aborda los mecanismos más avanzados del lenguaje y su ecosistema: construirá sistemas de procesamiento asíncrono con Flow frío y caliente aplicando operadores de contrapresión, diseñará DSLs tipadas con funciones con receptor y @DslMarker, y evaluará el impacto real en bytecode JVM de las funciones inline, reified y crossinline. También aprenderá a detectar y eliminar cuellos de botella en corrutinas concurrentes con herramientas de profiling, a anticipar y neutralizar condiciones de carrera seleccionando el mecanismo de sincronización correcto, y a comparar críticamente estrategias de gestión de errores tipados para casos de negocio reales. Al finalizar, el participante será capaz de tomar decisiones de diseño fundamentadas en métricas, aplicar análisis estático avanzado en pipelines de CI y estructurar proyectos multi-módulo con compilación incremental optimizada.
Flow frío y caliente, los operadores de contrapresión disponibles y los principios que rigen la sincronización entre corrutinas concurrentes.@DslMarker, garantizando seguridad en tiempo de compilación.inline, reified y crossinline, comparando métricas de tamaño de artefacto y overhead de invocación frente a alternativas equivalentes.Mutex, Channel, Actor) y validar la ausencia de deadlocks bajo pruebas de carga.sealed class, Result, Either de Arrow-kt) documentando sus trade-offs y seleccionando la más adecuada para un caso de negocio concreto.Bloque 1 — Flow avanzado y gestión de contrapresión. Se estudia en profundidad la diferencia conceptual y práctica entre Flow frío y caliente (SharedFlow, StateFlow), los operadores de contrapresión (buffer, conflate, collectLatest) y los criterios de rendimiento que justifican la elección de cada uno. Los participantes arquitecturan un sistema de procesamiento de eventos asíncrono completo, razonando sobre cada decisión de diseño.
Bloque 2 — Concurrencia segura y sincronización. Se analizan los patrones de concurrencia problemáticos más frecuentes en proyectos Kotlin: bloqueos en dispatcher, leaks de scope y condiciones de carrera en datos compartidos. El bloque cubre la selección fundamentada entre Mutex, Channel y el modelo Actor, e incluye técnicas de prueba de carga para validar la ausencia de deadlocks. Se conecta con la optimización de rendimiento de corrutinas mediante profiling con YourKit y Android Profiler, haciendo hincapié en la lectura e interpretación de métricas de CPU y memoria.
Bloque 3 — Metaprogramación y bytecode JVM. Se examina el funcionamiento interno de las funciones inline, reified y crossinline, evaluando su impacto en el bytecode generado con métricas concretas de tamaño de artefacto y overhead de invocación. A continuación se aborda el diseño de DSLs tipadas mediante funciones con receptor y builders anidados, utilizando @DslMarker para prevenir ambigüedades de scope en tiempo de compilación.
Bloque 4 — Gestión de errores tipados. Se comparan en detalle tres estrategias para modelar errores en dominios complejos: sealed class jerárquicas, el tipo Result estándar y Either de la librería Arrow-kt. A partir de un caso de negocio concreto, los participantes documentan los trade-offs de cada enfoque (expresividad, interoperabilidad, coste cognitivo) y justifican la elección final.
Bloque 5 — Calidad, tooling y escalabilidad del proyecto. Se integran reglas Detekt personalizadas en pipelines de CI para la detección automática de antipatrones (bloqueos en dispatcher, leaks de corrutinas, shadowing de scope). Seguidamente se aborda la arquitectura de módulos multiplatforma (KMP): distribución de lógica de dominio en commonMain, implementación de adaptadores en source sets específicos y gestión de las limitaciones de interoperabilidad con Swift y JavaScript. El bloque cierra con estrategias de optimización del tiempo de compilación incremental en proyectos multi-módulo: decoupling de API/implementación, opciones avanzadas del compilador (-Xbackend-threads) y configuración de caché de Gradle.
suspend, CoroutineScope, launch/async, dispatchers y manejo básico de excepciones con CoroutineExceptionHandler.Flow estándar: creación con flow { }, operadores intermedios (map, filter, flatMapMerge) y colección con collect.in/out), funciones de extensión y lambdas con receptor.