Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lenguaje de Programacion Julia (Sesion 1: Fund...

Lenguaje de Programacion Julia (Sesion 1: Fundamentos y Motivacion)

Avatar for Abraham Zamudio

Abraham Zamudio

November 04, 2026

More Decks by Abraham Zamudio

Other Decks in Education

Transcript

  1. Agenda de la Sesión 3. Ecosistema y Casos de Uso

    1. La Motivación El problema de los dos lenguajes y por qué nació Julia. 2. Caracterı́sticas Principales JIT, Despacho Múltiple y Metaprogramación. JULIA SciML, Finanzas, Data Science y Supercomputación. 4. Julia en Acción & Próximos Pasos Sintaxis, ejemplos de código y cómo empezar hoy. Abraham Zamudio Chauca 2 / 43
  2. 1. La Motivación: El Dilema Histórico Alta Productividad Alto Rendimiento

    (Python, R, MATLAB) (C, C++, Fortran) Lento en ejecución Complejo de escribir ¿Existe un punto medio? ¿Por qué necesitamos un nuevo lenguaje? JULIA Abraham Zamudio Chauca 3 / 43
  3. El Dilema Histórico Históricamente, los desarrolladores se enfrentaban a una

    decisión difı́cil: • Opción A: Usar un lenguaje rápido en ejecución pero complejo de escribir (C, C++, Fortran). • Opción B: Usar un lenguaje fácil y productivo pero lento en ejecución (Python, R, MATLAB). JULIA Abraham Zamudio Chauca 4 / 43
  4. Lenguajes de Alto Nivel (Python, R, MATLAB) Ventajas • Sintaxis

    legible y concisa. • Curva de aprendizaje suave. • Ecosistema rico en librerı́as de datos. Desventajas • Ejecución lenta (interpretados). • Cuellos de botella en bucles y operaciones matemáticas intensivas. JULIA Abraham Zamudio Chauca 5 / 43
  5. Lenguajes de Bajo Nivel (C, C++, Fortran) Ventajas • Rendimiento

    computacional máximo. • Control fino sobre la memoria y el hardware. Desventajas • Sintaxis compleja y verbosa. • Tiempos de desarrollo largos. • Mayor propensión a errores de memoria. JULIA Abraham Zamudio Chauca 6 / 43
  6. El ”Problema de los Dos Lenguajes” Reescritura costosa y propensa

    a errores Prototipo en Python/R Producción en C++ • Esto obligaba a los equipos a duplicar esfuerzos. • El código de producción a menudo divergı́a del prototipo original. JULIA Abraham Zamudio Chauca 7 / 43
  7. La Misión de Julia Origen Nació en 2012 en el

    MIT con una misión fundamental: resolver este problema. Propuesta de Valor ”Walks like Python, runs like C” Ofrecer la facilidad y legibilidad de Python, manteniendo un rendimiento computacional comparable al de C. JULIA Abraham Zamudio Chauca 8 / 43
  8. 2. Caracterı́sticas Principales Diseñado desde cero para la Ciencia El

    rendimiento no es un parche, es la base. JULIA Abraham Zamudio Chauca 9 / 43
  9. Visión General del Diseño Julia fue diseñado desde sus cimientos

    para: • Computación técnica de alto rendimiento. • Programación paralela y distribuida. • Expresividad matemática. JULIA Abraham Zamudio Chauca 10 / 43
  10. Compilación JIT (Just-In-Time) • A diferencia de Python (interpretado lı́nea

    por lı́nea). • El código de Julia se compila a código máquina nativo justo antes de ejecutarse. • Utiliza la infraestructura del compilador LLVM. JULIA Abraham Zamudio Chauca 11 / 43
  11. El Rol de LLVM en Julia Código Julia Compilador LLVM

    (JIT) Código Máquina Nativo Esto permite que los bucles y operaciones matemáticas se ejecuten a velocidades nativas. JULIA Abraham Zamudio Chauca 12 / 43
  12. JIT vs. Interpretado Interpretado (Python) JIT (Julia) • Lee lı́nea

    por lı́nea. • Verifica tipos en cada operación. • Sobrecarga constante. • Compila la función la primera vez JULIA que se llama. • Las siguientes llamadas usan el código nativo optimizado. • Velocidad de C/Fortran. Abraham Zamudio Chauca 13 / 43
  13. Despacho Múltiple (Multiple Dispatch) El corazón del diseño de Julia

    El lenguaje elige qué implementación de una función ejecutar basándose en los tipos de todos los argumentos que recibe. Esto contrasta con la Programación Orientada a Objetos (OOP) tradicional, que solo despacha basándose en el primer argumento (el objeto). JULIA Abraham Zamudio Chauca 14 / 43
  14. Despacho Múltiple vs. OOP Tradicional • OOP (Python/Java): objeto.metodo(argumento). El

    método pertenece al objeto. • Julia: funcion(objeto, argumento). La función es genérica y su comportamiento cambia según la combinación de tipos. Beneficio Permite que el código sea extremadamente genérico, modular y rápido, facilitando la extensión de librerı́as sin modificar su código fuente. JULIA Abraham Zamudio Chauca 15 / 43
  15. Ejemplo Conceptual de Despacho Múltiple # Definimos comportamientos para diferentes

    tipos procesar(x::Int) = println("Es un entero: ", x) procesar(x::Float64) = println("Es un flotante: ", x) procesar(x::String) = println("Es un texto: ", x) procesar(10) # Imprime: Es un entero: 10 procesar(3.14) # Imprime: Es un flotante: 3.14 procesar("Julia") # Imprime: Es un texto: Julia JULIA Abraham Zamudio Chauca 16 / 43
  16. Tipado Dinámico • Puedes escribir código sin declarar un solo

    tipo de dato. • Ideal para prototipado rápido y exploración de datos. • El compilador infiere los tipos automáticamente para mantener el rendimiento. x = 10 # x es Int64 x = 3.14 # Ahora x es Float64 x = "Hola" # Ahora x es String JULIA Abraham Zamudio Chauca 17 / 43
  17. Tipado Opcional • Tienes la libertad de añadir anotaciones de

    tipo cuando lo necesites. • Usos: 1. Optimizar cuellos de botella especı́ficos. 2. Documentar estructuras de datos complejas. 3. Crear métodos especializados mediante Despacho Múltiple. JULIA Abraham Zamudio Chauca 18 / 43
  18. Metaprogramación ¿Qué es? La capacidad de un programa para generar

    y manipular su propio código de forma nativa. • Similar a lo que permite Lisp. • Se logra principalmente a través de Macros. • El código se trata como un objeto de datos (Árbol de Sintaxis Abstracta - AST). JULIA Abraham Zamudio Chauca 19 / 43
  19. Metaprogramación en la Práctica • Facilita la creación de herramientas

    avanzadas. • Permite desarrollar Lenguajes de Dominio Especı́fico (DSL) embebidos. • Ejemplo: Paquetes como JuMP.jl para optimización matemática usan metaprogramación para que las restricciones se escriban de forma natural. JULIA Abraham Zamudio Chauca 20 / 43
  20. Resumen de Caracterı́sticas Técnicas 1. JIT: Velocidad de compilación nativa.

    2. Multiple Dispatch: Modularidad y extensibilidad. 3. Tipado Dinámico/Opcional: Flexibilidad sin sacrificar rendimiento. 4. Metaprogramación: Potencia para crear DSLs. JULIA Abraham Zamudio Chauca 21 / 43
  21. 3. Ecosistema y Casos de Uso Donde Julia brilla Procesamiento

    matemático intensivo, simulación y grandes volúmenes de datos. JULIA Abraham Zamudio Chauca 22 / 43
  22. Dominios de Aplicación Principal Astronomı́a y HPC Computación Cientı́fica ρ

    ∂∂ut + (u · ∇)u = −∇p + µ∇2u + f  • SciML: Ecuaciones diferenciales • Simulación de sistemas complejos • Modelado climático y fı́sico • Proyecto Celeste: 1.5 petaflops • 200 millones de objetos catalogados • Supercomputación a exaescala Finanzas Cuantitativas Data Science & ML • DataFrames.jl: Análisis de datos • Flux.jl: Deep Learning puro • Auto-diferenciación nativa JULIA • Análisis de riesgo (VaR) • Trading de alta frecuencia (HFT) • Modelos predictivos macro Abraham Zamudio Chauca 23 / 43
  23. Computación Cientı́fica (SciML) El estándar moderno Julia es la herramienta

    de elección para: • Resolver ecuaciones diferenciales ordinarias (ODE) y estocásticas (SDE). • Modelado climático y meteorológico. • Farmacologı́a cuantitativa y biologı́a de sistemas. • Fı́sica computacional de alta precisión. JULIA Abraham Zamudio Chauca 24 / 43
  24. Astronomı́a y Supercomputación El Proyecto Celeste • Objetivo: Procesar imágenes

    de telescopios para catalogar objetos astronómicos. • Escala: Casi 200 millones de objetos. • Logro: Alcanzó 1.5 petaflops de rendimiento en supercomputadoras. JULIA Abraham Zamudio Chauca 25 / 43
  25. El Hito de 1.5 Petaflops Una hazaña tradicionalmente reservada solo

    para C o Fortran Demostró que un lenguaje dinámico y de alto nivel puede competir en la cima de la supercomputación mundial. JULIA Abraham Zamudio Chauca 26 / 43
  26. Data Science • DataFrames.jl: Compite directamente con Pandas (Python) en

    velocidad y capacidad de manejo de datos tabulares. • Ventajas: ◦ Mejor manejo de memoria. ◦ Operaciones agrupadas (groupby) altamente optimizadas. ◦ Sintaxis inspirada en R y SQL. JULIA Abraham Zamudio Chauca 27 / 43
  27. Machine Learning y Deep Learning Flux.jl • Solución pura en

    Julia para el entrenamiento de redes neuronales. • Sin depender de motores ocultos en C++ (a diferencia de PyTorch/TensorFlow que son wrappers). • Permite diferenciar automáticamente cualquier código de Julia (Automatic Differentiation). JULIA Abraham Zamudio Chauca 28 / 43
  28. Finanzas y Economı́a • Ampliamente adoptado en la industria financiera

    moderna. • Aplicaciones: ◦ Análisis de riesgo (VaR, Montecarlo). ◦ Modelos predictivos macroeconómicos. ◦ Valoración de derivados complejos. JULIA Abraham Zamudio Chauca 29 / 43
  29. Trading Algorı́tmico La importancia del microsegundo En el trading de

    alta frecuencia (HFT), la latencia es dinero. Julia permite escribir la lógica de negocio de forma clara (como en Python) pero ejecutarse con la latencia mı́nima requerida para competir en los mercados, sin la necesidad de escribir el núcleo en C++. JULIA Abraham Zamudio Chauca 30 / 43
  30. 4. Julia en Acción Sintaxis y Ejemplo de Código Diseñado

    para parecerse a la notación matemática tradicional. JULIA Abraham Zamudio Chauca 31 / 43
  31. Notación Matemática Natural • No necesitas verbosidad innecesaria. • Soporte

    nativo para caracteres Unicode (ej: α = 0.05, π ). • Las fórmulas se leen como se escriben en un pizarrón. JULIA Abraham Zamudio Chauca 32 / 43
  32. Ejemplo de Código # Definir una función matemática simple de

    forma natural f(x) = xˆ2 + 2x - 1 # Crear un arreglo de números numeros = [1.0, 2.0, 3.0, 4.0, 5.0] # Aplicar la función a cada elemento usando "punto" (broadcasting) resultados = f.(numeros) println("Resultados: ", resultados) JULIA Abraham Zamudio Chauca 33 / 43
  33. Análisis: La Función f(x) = xˆ2 + 2x - 1

    • Definición concisa de funciones en una sola lı́nea. • ˆ es el operador de potenciación nativo. • No se requieren palabras clave como def o return para funciones simples. JULIA Abraham Zamudio Chauca 34 / 43
  34. Análisis: El Arreglo numeros = [1.0, 2.0, 3.0, 4.0, 5.0]

    • Los corchetes [] crean un Array (vector). • Al usar 1.0, Julia infiere que es un arreglo de Float64. • Los ı́ndices en Julia comienzan en 1 (no en 0), lo cual es más natural para matemáticos y economistas. JULIA Abraham Zamudio Chauca 35 / 43
  35. El Poder del ”Punto” (Broadcasting) resultados = f.(numeros) ¿Qué hace

    el punto (.)? Es una caracterı́stica nativa de vectorización. Le indica a Julia que aplique la función f a cada elemento del arreglo numeros individualmente. JULIA Abraham Zamudio Chauca 36 / 43
  36. Optimización Automática (Loop Fusion) • En otros lenguajes, vectorizar requiere

    librerı́as externas (ej: NumPy). • En Julia, el broadcasting es nativo. • Loop Fusion: El compilador fusiona automáticamente las operaciones, evitando crear arreglos intermedios en memoria. • Resultado: Código altamente eficiente y legible. JULIA Abraham Zamudio Chauca 37 / 43
  37. 5. Próximos Pasos Comenzando con Julia Herramientas y recursos para

    iniciar tu viaje. JULIA Abraham Zamudio Chauca 38 / 43
  38. Filosofı́a de Adopción No es un reemplazo, es una evolución

    Julia no viene a eliminar a lenguajes consolidados (Python, R, C++). Viene a ocupar un espacio vital donde la expresividad del código y el rendimiento puro son requisitos no negociables. Además, puede llamar a librerı́as de Python, C y R fácilmente. JULIA Abraham Zamudio Chauca 39 / 43
  39. El Gestor de Paquetes (Pkg) • Integrado directamente en el

    lenguaje (no es una herramienta externa como pip o conda). • Elimina los clásicos dolores de cabeza de los entornos virtuales y conflictos de dependencias. • Manejo nativo de entornos por proyecto (archivos Project.toml). JULIA Abraham Zamudio Chauca 40 / 43
  40. Primeros Pasos Prácticos 1. Descarga los binarios oficiales en julialang.org.

    2. Abre el REPL (Read-Eval-Print Loop), la terminal interactiva de Julia. 3. Escribe tu primera operación matemática o instala un paquete con ] add DataFrames. JULIA Abraham Zamudio Chauca 41 / 43
  41. Curva de Aprendizaje Para Ingenieros y Economistas Si ya tienes

    experiencia con Python, R o MATLAB, la curva de adaptación a la sintaxis básica de Julia es de apenas unos dı́as. La complejidad adicional (tipado, despacho múltiple) se puede aprender gradualmente a medida que se necesitan optimizaciones. JULIA Abraham Zamudio Chauca 42 / 43
  42. Recursos Recomendados • Documentación oficial: docs.julialang.org • Libro: ”Think Julia”

    (gratuito en lı́nea). • Comunidad: Discourse.julialang.org (conocida por ser excepcionalmente amigable y útil). JULIA Abraham Zamudio Chauca 43 / 43