Generalidades

Objetivos

Los objetivos principales consisten en presentar los conceptos básicos de la computación científica moderna mediante el lenguaje de programación Julia y su ecosistema de código abierto. Asimismo, se brindarán nociones y patrones de diseño que faciliten el uso de herramientas computacionales para la generación de códigos mantenibles, eficientes y reproducibles.

Forma de evaluación

La evaluación consta de la entrega semanal de una lista de ejercicios y de un trabajo final del curso. Por un lado, se requiere tener aprobado el 70% del total de los ejercicios propuestos. Por otro lado, se debe aprobar el trabajo final, que se enfoca al desarrollo de un paquete de Julia para la resolución de un problema de computación científica de interés para el/la estudiante. El/la estudiante defenderá un anteproyecto en un plazo límite establecido al inicio del curso. Finalmente, el proyecto completo, acompañado del código fuente y la documentación correspondiente, se defenderá en una exposición oral abierta a otros estudiantes del curso con preguntas de los docentes.

Temario

Herramientas básicas. Alcance de la computación científica. Revisión de lenguajes de alto nivel vs. lenguajes de programación de sistemas. Revisión de aritmética de punto flotante. Conceptos básicos de Julia. Entorno de desarrollo. Herramienta git para control de revisión. Conceptos de desarrollo open source. Patrones de diseño de software en la computación científica.

Fundamentos de Julia. Tipos de datos básicos. Variables. Arreglos. Módulos. Gestor de paquetes. Estructuras de datos. Gráficos en 2D y 3D. Lectura y escritura de archivos. Tipos concretos y abstractos. Tipos paramétricos. Despacho múltiple (multiple dispatch). Diseño de funciones. Evaluación en el sitio (in-place). Evaluación perezosa (lazy). Interfaces. Macros. Metaprogramación y ejemplos de lenguajes específicos de dominio (DSL).

Patrones de diseño. Generación de paquetes. Patrones para reutilización de código. Generación de tests. Documentación de código. Integración continua. Patrones para código de alto desempeño (performance). Análisis de desempeño (profiling). Depuración de código. Patrones de robustez. Programación genérica. Programación paralela. Anti-patrones.

Ecosistema de Julia para computación científica. Conceptos avanzados de gráficos y generación de gráficos para publicaciones. Paquetes para trabajar con datos, como data frames, y aprendizaje estadístico. Paquetes para resolver sistemas dinámicos, e.g. ecuaciones diferenciales ordinarias y ecuaciones en derivadas parciales. Paquetes para modelado y resolución de problemas de optimización matemática. Nota: los contenidos de esta parte son indicativos y se contempla adaptarlos a los intereses de los/las estudiantes.

Cronograma

SemanaClasesTemasFecha entregable
102/08 05/08Alcance del curso. Entorno de desarrollo.08/08
209/08 12/08Primeros pasos en Julia.15/08
316/08 19/08Computación numérica. Computación simbólica.24/08
423/08 26/08Fundamentos de Julia. Tipos de datos básicos. Reglas de alcance. Arreglos.02/09
530/08 02/09Gestor de paquetes. Estructuras de datos. Funciones.09/09
606/09 09/09Mecanismos de evaluación. Metaprogramación.-
720/09 23/09Patrones de diseño. Generación de paquetes. Patrones para reutilización de código. Patrones para performance.25/06
827/09 30/09Programación genérica. Anti-patrones. Librerías. Propuestas de proyecto.03/10
X04/10 07/10X-
911/10 14/10Patrones de robustez. Optimización. Modelado y simulaciones numéricas.-
1018/10 21/10Aprendizaje automático. Programación paralela. Gráficos para publicaciones.Última clase: 21/10
1125/10 28/10Cierre ejemplo Predation. Proyecto.Última clase: 25/10
1201/11 04/11Proyecto.-
1307/11 11/11Proyecto.-
1414/11 18/11Proyecto.-
1521/11 25/11Proyecto.Defensa del proyecto: 25/11 en FING

Notas:

  • La columna de semana se refiere al numero de semanas transcurridas respecto delinicio del curso.
  • El cronograma es tentativo y lo iremos actualizando con el correr del curso.

Horarios

Horarios del curso 2023 (1er semestre)

  • 18:30 a 20 teóricos jueves
  • 18:30 a 20 teóricos viernes
  • 20 a 21:30 práctico viernes

Bibliografía

A continuación se lista la bibliografía principal. Por otro lado, cada sección incluye referencias específicas ya sea a textos, a páginas web o a paquetes de Julia.

  • Hands-On Design Patterns and Best Practices with Julia: Proven solutions to common problems in software design for Julia 1. x. Kwong, T. Packt Publishing Ltd, 2020. ISBN: 9781838648817

  • Fundamentals of Numerical Computation (Vol. 154). Driscoll, T. A., & Braun, R. J. SIAM 2017. ISBN: 9781611975079

  • Algorithms for Optimization. Kochenderfer, M and Wheeler, T. A. 2019. ISBN: 9780262039420

  • Pro git. Chacon, S. and Straub, B. Springer Nature, 2014. ISBN: 9781430218333

  • Principles of scientific computing. Bindel, D. and Goodman, J. New York University, 2009.

  • Statistics with Julia. Nazarathy, Yoni, and Hayden Klok. 2021. 2365-5682

  • Numerical Linear Algebra with Julia. Darve E, Wootters M. SIAM; 2021. Darve E, Wootters M. ISBN: 9781611976540