Programación funcional (CC5115)
Motivación, objetivos y contenido
El objetivo de este curso es introducir la programación funcional a través del lenguaje Haskell. La programación funcional es reconocida por dar lugar a un estilo mucho más declarativo –y elegante– de programación, y tres características que la hacen particularmente atractiva son su conveniencia para verificar programas, razonando algebraicamente de la misma manera que lo hacemos en matemática, para paralelizar la ejecución de programas, ganando órdenes de magnitud en eficiencia, y por último, para abstraer patrones de programación recurrentes, generando código más compacto, robusto y reusable.
Lenguajes populares como Java, JavaScript o Scala han sabido explotar estas características adoptando un enfoque multi-paradigma. Para los objetivos de este curso utilizaremos sin embargo Haskell, un lenguaje puramente funcional. Haskell se considera en la frontera del diseño de lenguajes de programación y hoy en día tiene una penetración no menor en la industria, siendo usado por compañías como Microsoft, Facebook, IBM, Galois, AT&T, JaneStreet y la NASA.
A lo largo del curso cubriremos tanto la práctica como la teoría de la programación funcional. Al finalizar el mismo, los estudiantes serán capaces de:
- escribir programas funcionales usando el lenguaje Haskell;
- explotar un sistema de tipos estático, de características avanzadas;
- hacer un uso sofisticado de la recursión, para resolver problemas no-triviales;
- reconocer, encapsular y explotar diversos patrones de programación recurrentes;
- escribir programas que se ejecutan de manera paralela;
- reconocer y explotar diversas oportunidades de optimización, y
- testear programas de manera automática, usando la librería QuickCheck.
Para un listado más detallado de los temas abordados en el curso consultar el programa del curso. Para una discusión más a fondo sobre la relevancia y beneficios de la programación funcional consultar el artículo Why functional programming matters.
Elegibilidad
Curso electivo para Ingeniería Civil en Computación.
Requisitos
Algoritmos y estructura de datos (CC3001) y matemáticas discretas para la computación (CC3101).
Evaluación
Evaluación continua a través de tareas y una presentación oral (en base a un artículo o capítulo de libro). No habrá controles.
Material
- Learn you a Haskell for great good: A beginner's guide. Lipovača M., No Starch Press, 1º Edición, 2011. (disponible online)
- Programming in Haskell. Hutton. G. Cambridge University Press. 2º Edición, 2016. (disponible online)
- Thinking functionally with Haskell. Richard Bird. Cambridge University Press. 1º Edición, 2015.
Contacto
Federico Olmedo, Oficia 311N, email