Volver a los cursos
AI020 Professional

JavaScript Elegante: Una Introducción Moderna a la Programación

Una guía completa sobre programación moderna utilizando JavaScript. El curso cubre principios fundamentales de programación, la especificación del lenguaje JavaScript, la integración con navegadores web y el desarrollo del lado del servidor con Node.js, incluyendo cinco aplicaciones prácticas en proyectos del mundo real.

5.0
30.0h
561 estudiantes
0 me gusta
Inteligencia Artificial
Comenzar a aprender

Descripción del curso

📚 Resumen del Contenido

Una guía completa sobre programación moderna utilizando JavaScript. El curso cubre principios fundamentales de programación, la especificación del lenguaje JavaScript, la integración con navegadores web y el desarrollo del lado del servidor con Node.js, incluyendo cinco aplicaciones prácticas basadas en proyectos reales.

Una profunda y elegante exploración del corazón de la programación en JavaScript.

Autor: Marijn Haverbeke

Agradecimientos: Apoyado por 454 patrocinadores financieros; ilustraciones de Wasif Hyder, Max Xiantu, Margarita Martínez, José Menor, Jim Tierney, Dyle MacGregor, Jeff Avallone, Thomas Palef y Antonio Perdomo Pastor.

🎯 Objetivos de Aprendizaje

  1. Definir qué es un programa y explicar los diferentes niveles de abstracción en los lenguajes de computadora.
  2. Utilizar números y operadores aritméticos de JavaScript para producir valores.
  3. Declarar y actualizar variables respetando convenciones de nombres y restricciones de palabras reservadas.
  4. Implementar flujos de control robustos usando bucles do, for y declaraciones switch, manteniendo código limpio mediante sangría e comentarios.
  5. Definir e invocar funciones usando múltiples notaciones, manejando parámetros, argumentos opcionales y ámbitos léxicos anidados.
  6. Aplicar conceptos funcionales avanzados como recursión, cierres y pila de llamadas para resolver acertijos algorítmicos complejos.
  7. Utilizar métodos especializados de objetos y arreglos para gestionar estructuras de datos complejas y cadenas.
  8. Implementar funciones de orden superior (filter, map, reduce) para abstraer lógica y componer transformaciones de datos.
  9. Navegar y manipular la cadena de prototipos para crear instancias de objetos estructuradas, reutilizables y interfaces polimórficas.
  10. Implementar interfaces polimórficas para manejar visualizaciones de datos complejas (tablas).

🔹 Lección 1: Fundamentos de JavaScript y Estructura de Programas

Resumen: Esta lección introduce los conceptos fundamentales de la programación usando JavaScript, pasando desde la definición filosófica de un programa hasta los mecanismos prácticos del código. Los estudiantes explorarán cómo se representa la data a través de tipos y bits, cómo manipular valores usando operadores y cómo estructurar programas usando variables, expresiones y sentencias. La lección también cubre comportamientos únicos de JavaScript, como la conversión automática de tipos y la evaluación de cortocircuito.

Resultados de Aprendizaje:

  • Definir qué es un programa y explicar los diferentes niveles de abstracción en los lenguajes de computadora.
  • Utilizar números y operadores aritméticos de JavaScript para producir valores.
  • Declarar y actualizar variables respetando convenciones de nombres y restricciones de palabras reservadas.

🔹 Lección 2: Funciones y Estructuras de Datos Complejas

Resumen: Esta lección explora los bloques básicos esenciales de la programación estructurada, centrándose en flujos de control avanzados, técnicas de programación funcional y organización compleja de datos. Los estudiantes dominarán cómo encapsular lógica dentro de funciones, gestionar la visibilidad de variables mediante ámbitos y cierres, y manipular objetos mutables para analizar datos del mundo real como correlaciones estadísticas.

Resultados de Aprendizaje:

  • Implementar flujos de control robustos usando bucles do, for y declaraciones switch, manteniendo código limpio mediante sangría e comentarios.
  • Definir e invocar funciones usando múltiples notaciones, manejando parámetros, argumentos opcionales y ámbitos léxicos anidados.
  • Aplicar conceptos funcionales avanzados como recursión, cierres y pila de llamadas para resolver acertijos algorítmicos complejos.

🔹 Lección 3: Funciones de Orden Superior y Prototipos

Resumen: Esta lección explora la transición desde la manipulación básica de datos hacia patrones avanzados de programación funcional y orientada a objetos en JavaScript. Cubre el almacenamiento eficiente de datos usando Mapas y objetos globales, el poder de las funciones de orden superior para abstraer acciones (filtrado, transformación y resumen), y los mecanismos subyacentes del sistema de objetos de JavaScript, incluyendo prototipos, constructores y polimorfismo.

Resultados de Aprendizaje:

  • Utilizar métodos especializados de objetos y arreglos para gestionar estructuras de datos complejas y cadenas.
  • Implementar funciones de orden superior (filter, map, reduce) para abstraer lógica y componer transformaciones de datos.
  • Navegar y manipular la cadena de prototipos para crear instancias de objetos estructuradas, reutilizables y interfaces polimórficas.

🔹 Lección 4: Programación Orientada a Objetos y Gestión de Errores

Resumen: Esta lección explora patrones avanzados de programación orientada a objetos en JavaScript, centrándose en el polimorfismo a través de interfaces de diseño de tablas y el diseño de un ecosistema simulado ("Vida Electrónica"). Transiciona hacia la confiabilidad del software cubriendo el "Modo Estricto", técnicas de depuración y la importancia de pruebas estructuradas para mitigar errores comunes de programadores.

Resultados de Aprendizaje:

  • Implementar interfaces polimórficas para manejar visualizaciones de datos complejas (tablas).
  • Contrastar herencia y composición para construir estructuras de objetos extensibles.
  • Gestionar el contexto de ejecución (this) dentro de funciones de orden superior y métodos de objetos.

🔹 Lección 5: Coincidencia de Patrones y Modularización

Resumen: Esta lección aborda los requisitos dualistas de la programación moderna: procesar datos de texto complejos y organizar el código en estructuras mantenibles. Los estudiantes aprenderán a usar Expresiones Regulares para describir y manipular patrones de texto, seguido de una exploración de la modularización para aislar código, gestionar espacios de nombres y facilitar la reutilización.

Resultados de Aprendizaje:

  • Construir y probar expresiones regulares usando notación literal y constructora.
  • Implementar técnicas avanzadas de coincidencia de patrones incluyendo agrupamiento, retroceso y repetición no codiciosa.
  • Aplicar principios de diseño modular para prevenir la contaminación de espacios de nombres y desacoplar componentes del programa.

🔹 Lección 6: Diseño de Lenguajes y Entorno Web

Resumen: Esta lección explora la transición desde el diseño de software estructurado hasta la creación de un lenguaje de programación personalizado llamado "Egg". Además, conecta estos conceptos con el entorno web, detallando cómo redes, HTML y el Modelo de Objetos del Documento (DOM) crean una interfaz programable para navegadores. Los estudiantes aprenderán a gestionar la complejidad del código mediante modularidad y manipular documentos web en vivo usando JavaScript.

Resultados de Aprendizaje:

  • Implementar sistemas de módulos robustos usando la función define y gestionar dependencias complejas.
  • Construir un analizador y evaluador funcional para un lenguaje específico del dominio, incluyendo gestión de ámbito y soporte de funciones.
  • Explicar la arquitectura de la Web, incluyendo TCP/IP, estructura HTML y las implicaciones de seguridad del sandbox del navegador.

🔹 Lección 7: Eventos y Plataformas Interactivas

Resumen: Esta lección explora la sinergia entre la manipulación del DOM, el estilo CSS y el manejo de eventos complejos para crear experiencias web interactivas y juegos. Los estudiantes aprenderán a controlar el diseño y animaciones, gestionar la naturaleza asíncrona de las entradas del usuario, optimizar el rendimiento mediante técnicas de temporización y arquitectar un juego de plataforma basado en rejilla usando principios orientados a objetos.

Resultados de Aprendizaje:

  • Manipular el Diseño y Estilos del DOM: Usar JavaScript para leer dimensiones de elementos, aplicar estilos en cascada y animar elementos usando posicionamiento CSS y trigonometría.
  • Dominar la Orquestación de Eventos: Implementar manejo avanzado de eventos incluyendo control de propagación, prevención de acciones predeterminadas y gestión de eventos especializados (teclado, ratón, desplazamiento y foco).
  • Optimizar la Ejecución de Scripts: Aplicar trabajos web para procesamiento en segundo plano y utilizar debouncing/throttling para gestionar eventos de alta frecuencia.

🔹 Lección 8: Gráficos en Canvas y Protocolos de Red

Resumen: Esta lección explora la transición desde la representación de juegos basada en DOM hacia la API de alto rendimiento HTML5 Canvas, junto con los fundamentos de la física de plataformas 2D. Los estudiantes aprenderán a implementar lógica de juego compleja incluyendo gravedad y detección de colisiones mientras dominan técnicas imperativas de dibujo. Además, la lección introduce el protocolo HTTP y el objeto XMLHttpRequest para manejar la comunicación cliente-servidor.

Resultados de Aprendizaje:

  • Implementar detección de colisiones basada en rejilla y movimiento impulsado por gravedad en un entorno de juego.
  • Utilizar la API HTML5 Canvas para renderizar caminos, curvas, imágenes y hojas de sprites animadas.
  • Aplicar transformaciones de coordenadas (escalamiento, rotación, volteo) y gestionar estados del contexto usando save y restore.

🔹 Lección 9: Formularios Avanzados y Aplicaciones Persistentes

Resumen: Esta lección explora técnicas avanzadas de desarrollo web, centrándose en comunicación asíncrona mediante XMLHttpRequest y Promesas, interacción profunda con campos de formularios HTML y persistencia de datos del lado del cliente. Los estudiantes aprenderán a gestionar solicitudes de red con encabezados personalizados y manejar errores en flujos asíncronos al construir una aplicación modular de pintura y una herramienta persistente de toma de notas.

Resultados de Aprendizaje:

  • Configurar y ejecutar solicitudes de red asíncronas usando XMLHttpRequest y encadenamiento basado en Promesas.
  • Manipular comportamientos complejos de formularios, incluyendo gestión de foco, deshabilitación de campos y manejo de archivos.
  • Implementar almacenamiento de datos del lado del cliente usando localStorage y sessionStorage para mantener el estado de la aplicación.

🔹 Lección 10: Desarrollo del Lado del Servidor con Node.js

Resumen: Esta lección cierra la brecha entre la interactividad avanzada del lado del cliente y la lógica del lado del servidor. Los estudiantes primero dominarán herramientas avanzadas de manipulación de canvas y limitaciones de seguridad del navegador antes de pasar al entorno Node.js para construir servidores de archivos asíncronos y aplicaciones web en tiempo real usando polling prolongado y ruteo RESTful.

Resultados de Aprendizaje:

  • Implementar herramientas de dibujo avanzadas (Línea, Borrar, Pintura Spray, Relleno) y gestionar la seguridad del canvas (taint).
  • Ejecutar scripts del lado del servidor usando Node.js, gestionar dependencias mediante NPM y manejar entrada/salida asíncrona con callbacks y promesas.
  • Construir un servidor HTTP funcional capaz de manipulación de archivos, procesamiento de solicitudes JSON y actualizaciones en tiempo real mediante polling prolongado.