Programación Ruby: La guía de los programadores pragmáticos (Segunda edición)
Una referencia completa y tutorial para el lenguaje de programación Ruby, que cubre la sintaxis básica, el diseño orientado a objetos, características avanzadas como reflexión y hilos, y una referencia completa de la biblioteca para la versión 1.8.
Descripción del curso
📚 Resumen del contenido
Una referencia completa y tutorial para el lenguaje de programación Ruby, que cubre la sintaxis básica, el diseño orientado a objetos, características avanzadas como reflexión y multihilo, y una referencia completa de la biblioteca para la versión 1.8.
Domina el arte de la programación elegante y potente con la guía definitiva del lenguaje Ruby.
Autor: Dave Thomas, Chad Fowler, Andy Hunt
Agradecimientos: Revisores de la lista de correo de Ruby, Yukihiro Matsumoto (Matz), Chad Fowler, Kim Wimpsett, y la comunidad de Pragmatic Programmers.
🎯 Objetivos de aprendizaje
- Instalar y configurar el entorno de Ruby utilizando diversos métodos (binario, fuente o CVS) y utilizar herramientas interactivas como irb y ri.
- Aplicar las convenciones de nombres de Ruby y los principios orientados a objetos para definir métodos y gestionar variables.
- Manipular datos usando arreglos básicos, hashes y expresiones regulares.
- Definir e implementar jerarquías de clases usando herencia simple, super y mixins.
- Controlar la visibilidad de objetos e integridad de datos usando Control de acceso (Público, Privado, Protegido) y Atributos.
- Construir clases contenedoras robustas (por ejemplo, SongList) integradas con pruebas unitarias.
- Implementar lógica numérica usando diversas bases (hexadecimal, octal, binaria) y utilizar iteradores numéricos para el flujo de control.
- Crear cadenas complejas usando interpolación, heredocs y diversos formatos de delimitadores.
- Aplicar Rangos como "interruptores" en lógica condicional y como evaluadores de intervalos.
- Definir e invocar métodos usando listas de argumentos flexibles (operador splat), argumentos basados en hash ("palabras clave") y conversiones bloque-a-proc.
🔹 Lección 1: Cap. 1-2: Fundamentos y puesta en marcha con Ruby.new
Resumen: Esta lección ofrece una introducción completa al ecosistema de Ruby, cubriendo métodos de instalación desde distribuciones binarias hasta compilar desde el código fuente y utilizar gestión de código fuente. Los estudiantes explorarán la sintaxis fundamental de Ruby, enfatizando su naturaleza puramente orientada a objetos, convenciones de nombres y constructores de programación básicos como contenedores, estructuras de control y bloques.
Resultados de aprendizaje:
- Instalar y configurar el entorno de Ruby usando diversos métodos (binario, fuente o CVS) y utilizar herramientas interactivas como irb y ri.
- Aplicar las convenciones de nombres de Ruby y sus principios orientados a objetos para definir métodos y gestionar variables.
- Manipular datos usando arreglos básicos, hashes y expresiones regulares.
🔹 Lección 2: Cap. 3-4: Clases, Objetos, Variables y Contenedores
Resumen: Esta lección explora los mecanismos fundamentales del sistema orientado a objetos de Ruby, centrándose en cómo los objetos mantienen estado mediante herencia y cómo funciona la cadena de búsqueda de métodos. Transita hacia la implementación práctica de contenedores usando Arrays y lógica similar a Hash, finalizando con un análisis profundo de la arquitectura única de bloques de Ruby: cubriendo iteradores, clausuras y gestión de recursos.
Resultados de aprendizaje:
- Definir e implementar jerarquías de clases usando herencia simple, super y mixins.
- Controlar la visibilidad de objetos e integridad de datos usando Control de acceso (Público, Privado, Protegido) y Atributos.
- Construir clases contenedoras robustas (por ejemplo, SongList) integradas con pruebas unitarias.
🔹 Lección 3: Cap. 5: Dominio de tipos estándar y expresiones regulares
Resumen: Esta lección profundiza en los tipos escalares fundamentales de Ruby—Números, Cadenas y Rangos—y transita hacia el poderoso mundo de las Expresiones Regulares. Los estudiantes aprenderán cómo Ruby maneja automáticamente el desbordamiento numérico, cómo manipular cadenas mediante interpolación y delimitadores, y cómo utilizar expresiones regulares tanto como patrones funcionales como entidades orientadas a objetos para procesamiento complejo de texto.
Resultados de aprendizaje:
- Implementar lógica numérica usando diversas bases (hexadecimal, octal, binaria) y utilizar iteradores numéricos para el flujo de control.
- Crear cadenas complejas usando interpolación, heredocs y diversos formatos de delimitadores.
- Aplicar Rangos como "interruptores" en lógica condicional y como evaluadores de intervalos.
🔹 Lección 4: Cap. 6-7: Lógica de métodos y control de expresiones
Resumen: Esta lección explora la naturaleza flexible de los métodos de Ruby y el poder de la programación basada en expresiones. Los estudiantes dominarán la definición de métodos con argumentos variables, la integración dinámica de bloques y el uso de estructuras de control avanzadas como asignaciones paralelas y expresiones case de coincidencia de patrones. El contenido enfatiza que en Ruby casi todo es una expresión que devuelve un valor, permitiendo un código conciso y legible.
Resultados de aprendizaje:
- Definir e invocar métodos usando listas de argumentos flexibles (operador splat), argumentos basados en hash ("palabras clave") y conversiones bloque-a-proc.
- Ejecutar lógica compleja mediante asignaciones paralelas/anidadas y expresiones booleanas sofisticadas.
- Implementar control de flujo usando condiciones basadas en expresiones (if, unless, case) y modificadores avanzados de bucle (break, redo, next).
🔹 Lección 5: Cap. 8-9: Manejo de errores y arquitectura modular
Resumen: Esta lección cubre la gestión robusta de errores y el diseño estructural en Ruby. Explora la jerarquía de excepciones y los mecanismos para manejar errores (rescue, retry) o controlar el flujo entre ámbitos (catch, throw). Además, detalla cómo los Módulos facilitan la reutilización de código mediante espacios de nombres y mixins, la integración del módulo Enumerable y los mecanismos para incluir archivos externos.
Resultados de aprendizaje:
- Implementar un manejo de errores resistente usando la jerarquía de la clase Exception y estructuras de control no locales.
- Construir bases de código modulares usando Módulos para espacios de nombres y Mixins para funcionalidad entre clases.
- Aplicar el módulo Enumerable a clases personalizadas y resolver ambigüedades de nombres de métodos en entornos con múltiples módulos.
🔹 Lección 6: Cap. 10-11: Operaciones de E/S y concurrencia
Resumen: Esta lección cubre los fundamentos del sistema de Entrada/Salida (E/S) de Ruby y su modelo de concurrencia. Los estudiantes aprenderán a gestionar recursos externos a través de objetos IO—incluyendo archivos, cadenas y sockets de red—mientras exploran la programación multi-hilo. El currículo pasa de la manipulación básica de archivos a técnicas avanzadas de sincronización (Monitores, Colas) y gestión de procesos externos para manejar tareas paralelas de forma eficiente.
Resultados de aprendizaje:
- Realizar operaciones de archivo usando gestión manual y por bloques de recursos para garantizar la integridad de los datos.
- Procesar flujos de datos usando iteradores y la biblioteca StringIO para una gestión flexible de E/S.
- Establecer comunicación de red mediante sockets TCP y protocolos de nivel superior como HTTP.
🔹 Lección 7: Cap. 12-13: Pruebas, depuración y optimización
Resumen: Esta lección proporciona una guía completa para asegurar la calidad y rendimiento del código en Ruby. Cubre los principios de pruebas unitarias usando el marco Test::Unit, técnicas de depuración sistemática mediante el depurador de Ruby y métodos para identificar cuellos de botella de rendimiento mediante benchmarking y profiling. Los estudiantes aprenderán a estructurar pruebas, solucionar errores comunes de lógica y optimizar el código basándose en datos empíricos.
Resultados de aprendizaje:
- Implementar pruebas unitarias automatizadas usando el marco Test::Unit y diversos tipos de afirmaciones.
- Diagnosticar y resolver defectos de código usando el depurador de línea de comandos de Ruby y estrategias comunes de solución de problemas.
- Analizar el rendimiento del código usando el módulo Benchmark y el Profiler para identificar y corregir cuellos de botella de ejecución.
🔹 Lección 8: Cap. 14-16: El ecosistema de Ruby y el flujo de trabajo
Resumen: Esta lección explora el entorno operativo de Ruby, centrándose en cómo los programas interactúan con la línea de comandos, gestionan su entorno de ejecución y utilizan herramientas interactivas. Los estudiantes también aprenderán a documentar su código usando RDoc y el sistema ri para crear documentación profesional, buscable y sistemas de ayuda integrados.
Resultados de aprendizaje:
- Controlar el comportamiento de programas de Ruby usando argumentos de línea de comandos, variables de entorno y métodos de terminación.
- Optimizar el flujo de trabajo de Interactive Ruby (irb) mediante prompts personalizados, autocompletado y gestión de subsesiones.
- Generar documentación estructurada usando marcado RDoc, lógica de hipervínculos y modificadores para producir HTML y datos ri.
🔹 Lección 9: Cap. 17-18: Distribución y servicios web
Resumen: Esta lección cubre los mecanismos esenciales para distribuir código Ruby y construir aplicaciones basadas en web. Explora el sistema RubyGems para gestión de paquetes y control de versiones, la implementación de interfaces web mediante CGI y sistemas de plantillas, y la integración de sistemas distribuidos usando SOAP y servicios web.
Resultados de aprendizaje:
- Definir y empaquetar bibliotecas de Ruby usando la especificación Gem y Rake.
- Desarrollar aplicaciones web dinámicas usando cgi.rb para manejar parámetros de consulta, cookies y sesiones.
- Implementar sistemas de plantillas (ERB, Amrita) para separar la lógica de la aplicación de la presentación.
🔹 Lección 10: Cap. 19-20: GUI e integración con plataforma
Resumen: Esta lección cubre la construcción de interfaces gráficas de usuario (GUI) en Ruby usando la biblioteca Tk, desde la configuración básica de widgets hasta la gestión avanzada de canvas y barras de desplazamiento. Además, explora la integración específica de plataformas en Windows, centrándose en la realización de benchmarks de rendimiento para automatización y el uso de la biblioteca DL para acceder directamente a DLLs de Windows.
Resultados de aprendizaje:
- Construir una aplicación Ruby Tk funcional usando widgets y diversos gestores de geometría (pack, place, grid).
- Implementar elementos interactivos mediante enlace de eventos y comunicación bidireccional de desplazamiento.
- Traducir documentación existente de Perl/Tk a código Ruby válido y utilizar la biblioteca DL para llamadas de API de bajo nivel en Windows.
🔹 Lección 11: Cap. 21: Extensión de Ruby (La API en C)
Resumen: Esta lección explora la interfaz entre el lenguaje de programación Ruby y C, centrándose en cómo extender la funcionalidad de Ruby usando extensiones en C y cómo incrustar el intérprete de Ruby en aplicaciones C. Los estudiantes aprenderán la representación interna de objetos de Ruby, el protocolo para envolver estructuras de datos en C y las herramientas necesarias para compilar y configurar estas extensiones.
Resultados de aprendizaje:
- Comprender y manipular el tipo VALUE de Ruby y los objetos inmediatos dentro de un entorno C.
- Implementar el protocolo de asignación y inicialización de múltiples pasos para clases personalizadas de Ruby respaldadas por C.
- Automatizar el proceso de compilación de extensiones de Ruby usando mkmf y extconf.rb.
🔹 Lección 12: Cap. 22: Especificación completa del lenguaje
Resumen: Esta lección ofrece una profundización técnica en la especificación del lenguaje Ruby, cubriendo los bloques fundamentales necesarios para el desarrollo profesional. Los estudiantes explorarán los matices de los tipos de datos básicos de Ruby, las reglas estrictas que gobiernan el ámbito de variables y constantes, y los mecanismos de expresiones y argumentos de métodos.
Resultados de aprendizaje:
- Diferenciar entre diversos tipos básicos (Enteros, Cadenas, Símbolos) y aplicar notaciones abreviadas como %w y %q.
- Gestionar el ámbito de variables y la visibilidad de constantes a nivel global, de clase, de instancia y local.
- Implementar flujos de control complejos usando expresiones booleanas, declaraciones case y modificadores de bucle.
🔹 Lección 13: Cap. 23-24: Tipado por pato y invocación de objetos
Resumen: Esta lección explora los mecanismos mediante los cuales Ruby ejecuta código a través de invocación de métodos, definiciones de objetos y manejo de errores, culminando en la filosofía del "Tipado por pato". Los estudiantes aprenderán a definir interfaces flexibles usando bloques y Procs e implementar sistemas robustos usando los protocolos de excepción y coerción de Ruby.
Resultados de aprendizaje:
- Ejecutar búsquedas de métodos complejas y manipular el comportamiento de métodos usando super y alias.
- Construir bases de código estructuradas usando definiciones de clases/módulos y declaraciones de atributos.
- Implementar patrones de programación funcional usando bloques, clausuras y objetos Proc.
🔹 Lección 14: Cap. 24-25: Objetos avanzados y seguridad
Resumen: Esta lección explora la arquitectura interna de objetos de Ruby, centrándose en la relación sofisticada entre instancias, clases y metaclasses. Los estudiantes dominarán el comportamiento dinámico mediante clases específicas de objetos y técnicas de metaprogramación mientras aprenden a proteger aplicaciones usando los niveles seguros incorporados de Ruby y mecanismos de taint de datos.
Resultados de aprendizaje:
- Mapear la estructura interna de punteros (klass y super) que gobierna la interacción entre clases y objetos.
- Implementar comportamientos específicos de objetos usando clases singleton y gestionar estado mediante variables de instancia de clase.
- Aplicar metaprogramación y congelamiento de objetos para crear código robusto, inmutable o generado dinámicamente.
🔹 Lección 15: Cap. 26-28: Reflexión y Biblioteca estándar
Resumen: Este módulo explora las poderosas capacidades introspectivas de Ruby, permitiendo a los desarrolladores inspeccionar objetos y clases, llamar métodos dinámicamente y gestionar serialización de objetos mediante Marshaling y YAML. También proporciona una referencia completa y una guía de aplicación para la Biblioteca Estándar de Ruby, cubriendo clases principales, protocolos de red, almacenamiento de datos y utilidades del sistema.
Resultados de aprendizaje:
- Implementar Reflexión: Usar ObjectSpace, respond_to? y send para inspeccionar y manipular objetos en tiempo de ejecución.
- Dominar la Serialización: Aplicar estrategias de Marshaling y YAML para persistir estados de objetos y facilitar la comunicación en Distributed Ruby (DRb).
- Utilizar la Biblioteca Estándar: Navegar y emplear módulos especializados para Red (Net::HTTP), XML/Web (REXML, CGI) y Almacenamiento de Datos (PStore, CSV, SDBM).