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
Semana | Clases | Temas | Fecha entregable |
---|---|---|---|
1 | 02/08 05/08 | Alcance del curso. Entorno de desarrollo. | 08/08 |
2 | 09/08 12/08 | Primeros pasos en Julia. | 15/08 |
3 | 16/08 19/08 | Computación numérica. Computación simbólica. | 24/08 |
4 | 23/08 26/08 | Fundamentos de Julia. Tipos de datos básicos. Reglas de alcance. Arreglos. | 02/09 |
5 | 30/08 02/09 | Gestor de paquetes. Estructuras de datos. Funciones. | 09/09 |
6 | 06/09 09/09 | Mecanismos de evaluación. Metaprogramación. | - |
7 | 20/09 23/09 | Patrones de diseño. Generación de paquetes. Patrones para reutilización de código. Patrones para performance. | 25/06 |
8 | 27/09 30/09 | Programación genérica. Anti-patrones. Librerías. Propuestas de proyecto. | 03/10 |
X | 04/10 07/10 | X | - |
9 | 11/10 14/10 | Patrones de robustez. Optimización. Modelado y simulaciones numéricas. | - |
10 | 18/10 21/10 | Aprendizaje automático. Programación paralela. Gráficos para publicaciones. | Última clase: 21/10 |
11 | 25/10 28/10 | Cierre ejemplo Predation. Proyecto. | Última clase: 25/10 |
12 | 01/11 04/11 | Proyecto. | - |
13 | 07/11 11/11 | Proyecto. | - |
14 | 14/11 18/11 | Proyecto. | - |
15 | 21/11 25/11 | Proyecto. | 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