Volver a los cursos
AI019 Professional

Programación en Elixir

Una guía completa sobre programación funcional y concurrente usando Elixir. Cubre la transición desde el pensamiento orientado a objetos hacia el pensamiento funcional, coincidencia de patrones, inmutabilidad, el modelo de actor para concurrencia y la construcción de sistemas distribuidos robustos con OTP.

4.8
30.0h
981 estudiantes
0 me gusta
Inteligencia Artificial
Comenzar a aprender

Descripción del curso

📚 Resumen del Contenido

Una guía completa sobre programación funcional y concurrente con Elixir. Cubre la transición de la programación orientada a objetos hacia el pensamiento funcional, el patrón de coincidencia, la inmutabilidad, el modelo de actor para la concurrencia y la creación de sistemas distribuidos robustos con OTP.

Domina el arte de construir sistemas concurrentes resilientes mediante la belleza de la programación funcional.

Autor: Dave Thomas

Agradecimientos: José Valim, Corey Haines, Bruce Tate, Jessica Kerr, Anthony Eden, Chad Fowler, Kim Shrier, Candace Cunningham y Potomac Indexing.

🎯 Objetivos de Aprendizaje

  1. Contrastar el modelo de transformación de datos de Elixir con la programación convencional basada en estado.
  2. Configurar la shell interactiva de Elixir (IEx) y ejecutar código de Elixir mediante scripts y compilación.
  3. Aplicar el operador de coincidencia (=), el operador de fijación (^) y el comodín (_) para descomponer y validar datos.
  4. Explicar las implicaciones teóricas y prácticas de la inmutabilidad sobre el rendimiento y la gestión de memoria.
  5. Identificar y utilizar los tipos integrados de Elixir, incluyendo tipos de Valor, Sistema y Colección.
  6. Aplicar las reglas de ámbito de variables y la expresión with para gestionar transformaciones de datos complejas.
  7. Crear e invocar funciones anónimas utilizando notación estándar y notación de captura (&).
  8. Implementar funciones nombradas dentro de módulos usando coincidencia de patrones y recursión para manejar lógica compleja.
  9. Aplicar cláusulas de guarda y parámetros por defecto para controlar el flujo de ejecución de funciones.
  10. Descomponer y Construir Listas: Utilizar el patrón de cabeza/cola para navegar y construir estructuras de listas recursivas.

🔹 Lección 1: Introducción a Elixir y Coincidencia de Patrones

Resumen: Esta lección presenta Elixir como un lenguaje funcional centrado en la transformación de datos más que en la mutación de estados. Los estudiantes aprenderán a navegar en el entorno de Elixir (IEx), compilar y ejecutar scripts, y dominar la Coincidencia de Patrones—el mecanismo fundamental que Elixir utiliza para la asignación de variables y el flujo de control.

Resultados de Aprendizaje:

  • Contrastar el modelo de transformación de datos de Elixir con la programación convencional basada en estado.
  • Configurar la shell interactiva de Elixir (IEx) y ejecutar código de Elixir mediante scripts y compilación.
  • Aplicar el operador de coincidencia (=), el operador de fijación (^) y el comodín (_) para descomponer y validar datos.

🔹 Lección 2: Inmutabilidad y Conceptos Básicos de Elixir

Resumen: Esta lección explora la filosofía fundamental de Elixir: la inmutabilidad. Los estudiantes aprenderán cómo Elixir trata los datos como entidades inmutables, los beneficios de rendimiento de este enfoque y los diversos tipos integrados—desde tipos simples como átomos y rangos hasta colecciones complejas como mapas y binarios. La lección concluye con un análisis profundo del ámbito de variables y la poderosa expresión with.

Resultados de Aprendizaje:

  • Explicar las implicaciones teóricas y prácticas de la inmutabilidad sobre el rendimiento y la gestión de memoria.
  • Identificar y utilizar los tipos integrados de Elixir, incluyendo tipos de Valor, Sistema y Colección.
  • Aplicar las reglas de ámbito de variables y la expresión with para gestionar transformaciones de datos complejas.

🔹 Lección 3: Funciones, Módulos y el Operador de Tubo

Resumen: Esta lección explora el núcleo de la programación en Elixir: la transformación funcional. Cubre la transición desde funciones anónimas y cierres hasta módulos estructurados y funciones nombradas. Los estudiantes aprenderán a aprovechar la coincidencia de patrones, la recursión y el operador de tubo para crear código conciso, legible y mantenible, interactuando con la máquina virtual Erlang subyacente.

Resultados de Aprendizaje:

  • Crear e invocar funciones anónimas utilizando notación estándar y notación de captura (&).
  • Implementar funciones nombradas dentro de módulos usando coincidencia de patrones y recursión para manejar lógica compleja.
  • Aplicar cláusulas de guarda y parámetros por defecto para controlar el flujo de ejecución de funciones.

🔹 Lección 4: Listas Recursivas y Estructuras de Datos

Resumen: Esta lección cubre los mecanismos fundamentales de las listas de Elixir mediante recursión, centrándose específicamente en el patrón "Cabeza y Cola" para procesar y construir datos. Se transita hacia estructuras de datos complejas—Mapas, Structs y Listas de Palabras Clave—proporcionando un marco de decisión para seleccionar la estructura adecuada y técnicas avanzadas para manipular datos anidados usando el módulo Access y la teoría de tipos de Elixir.

Resultados de Aprendizaje:

  • Descomponer y Construir Listas: Utilizar la coincidencia de patrones de cabeza/cola para navegar y construir estructuras de listas recursivas.
  • Implementar Patrones de Alto Nivel: Crear funciones personalizadas map y reduce para transformar o agrupar datos de listas.
  • Seleccionar Estructuras de Datos Adecuadas: Diferenciar entre Mapas, Structs y Listas de Palabras Clave según necesidades de rendimiento, ordenación e integridad de datos.

🔹 Lección 5: Enumerables, Streams y Procesamiento de Cadenas

Resumen: Esta lección explora el enfoque dual para el procesamiento de colecciones en Elixir: el módulo Enum, que es agresivo, y el módulo Stream, que es perezoso y composicional. También ofrece un análisis profundo de la transformación de datos mediante comprensiones y los mecanismos internos de las cadenas de Elixir, distinguiendo entre listas de caracteres (entre comillas simples) y binarios (entre comillas dobles). Los estudiantes aprenderán a procesar estructuras de datos complejas, manejar datos infinitos y realizar extracción de bits a bajo nivel.

Resultados de Aprendizaje:

  • Distinguir entre evaluación agresiva y perezosa al procesar colecciones.
  • Utilizar comprensiones de listas con múltiples generadores y filtros para transformar datos y extraer información a nivel de bits.
  • Distinguir entre cadenas entre comillas simples (listas de caracteres) y cadenas entre comillas dobles (binarios) y aplicar el módulo correcto (List vs. String) para su manipulación.

🔹 Lección 6: Flujo de Control, Proyectos Mix y Herramientas Profesionales

Resumen: Esta lección guía a los desarrolladores a través de la transición desde escribir funciones aisladas de Elixir hasta construir, probar y monitorear aplicaciones profesionales. Cubre estructuras de control avanzadas (case, cond), el ciclo de vida de un proyecto Mix (desde la estructura de directorios hasta ejecutables CLI) y el conjunto de herramientas profesionales utilizadas para depuración, pruebas basadas en propiedades y monitoreo de servidores.

Resultados de Aprendizaje:

  • Implementar lógica de ramificación compleja usando case, cond y manejo de excepciones.
  • Estructurar proyectos de Elixir usando Mix, gestionar dependencias externas como HTTPoison y Poison, y configurar entornos de aplicación.
  • Desarrollar suites de pruebas robustas utilizando ExUnit, DocTest y pruebas basadas en propiedades con StreamData.

🔹 Lección 7: Concurrencia y Nodos Distribuidos

Resumen: Esta lección explora la transición de aplicaciones de Elixir de un solo proceso a sistemas distribuidos. Cubre los mecanismos de manejo de mensajes, la persistencia de procesos mediante bucles recursivos de cola y la gestión robusta del ciclo de vida de procesos mediante enlaces y monitores. Finalmente, introduce el modelo de distribución de la máquina virtual Erlang, enseñando a conectar nodos, protegerlos con cookies y manejar la entrada/salida a través de una red.

Resultados de Aprendizaje:

  • Implementar procesos estatales y persistentes usando recursión de cola y temporizadores de mensajes.
  • Construir árboles de procesos tolerantes a fallos usando enlaces (spawn_link) y monitores (spawn_monitor).
  • Configurar y conectar nodos distribuidos usando convenciones de nombres, cookies de seguridad y registro global de procesos.

🔹 Lección 8: Fundamentos de OTP: Servidores y Supervisores

Resumen: Esta lección presenta el marco Open Telecom Platform (OTP) dentro del ecosistema de Elixir, centrándose específicamente en el comportamiento GenServer y los patrones de Supervisor. Los estudiantes aprenderán a construir procesos de servidor robustos y estatales, diferenciar entre comunicación síncrona y asíncrona, e implementar árboles de supervisión tolerantes a fallos que gestionen automáticamente el ciclo de vida de los procesos.

Resultados de Aprendizaje:

  • Definir los componentes principales de OTP e implementar el ciclo de vida estándar de GenServer.
  • Diferenciar entre y implementar patrones de mensaje síncronos (call) y asíncronos (cast).
  • Configurar y desplegar un Supervisor para monitorear procesos trabajadores y mantener la confiabilidad del sistema ante fallos.

🔹 Lección 9: Arquitecturas OTP Complejas y Gestión de Estado

Resumen: Esta lección pasa de los GenServers individuales a diseñar y desplegar aplicaciones OTP complejas y multi-componente. Cubre el diseño arquitectónico del buscador de archivos duplicados "Duper", los mecanismos de especificaciones de aplicaciones OTP y técnicas avanzadas de despliegue incluyendo actualizaciones en caliente usando Distillery. Además, explora alternativas simplificadas de gestión de estado como Tasks y Agents, proporcionando un marco para elegir la herramienta adecuada según las necesidades de concurrencia específicas.

Resultados de Aprendizaje:

  • Analizar los requisitos de la aplicación usando el marco de cinco preguntas para identificar puntos focales y características de tiempo de ejecución.
  • Construir una aplicación OTP multi-servidor (Duper) utilizando servidores especializados (Results, PathFinder, Gatherer) y Supervisores Dinámicos.
  • Realizar lanzamientos de código y actualizaciones en caliente usando Distillery, incluyendo la migración de estado mediante la devolución code_change.

🔹 Lección 10: Metaprogramación, Protocolos y Seguridad de Tipos

Resumen: Esta lección explora la extensibilidad avanzada de Elixir, centrándose en cómo manipular el código como datos mediante metaprogramación y macros. Los estudiantes aprenderán a lograr polimorfismo usando Protocolos y Comportamientos, estructurar sistemas a gran escala con proyectos Umbrella y implementar un manejo robusto de errores. Finalmente, la lección aborda añadir una capa de análisis estático usando el sistema de tipos de Elixir y Dialyzer para garantizar la corrección del código.

Resultados de Aprendizaje:

  • Dominar el uso de quote y unquote para insertar y manipular bloques de código dentro de macros.
  • Implementar Protocolos y Comportamientos personalizados para crear estructuras de código polimórficas y reutilizables.
  • Construir proyectos Umbrella multi-app y aplicar Especificaciones de Tipo formales al código dinámico de Elixir.