Both sides previous revisionPrevious revisionNext revision | Previous revision |
teaching:cc5115 [2020/02/10 16:56] – [Motivación y Objetivos] folmedo | teaching:cc5115 [2020/02/18 18:12] (current) – [Motivación, objetivos y contenido] folmedo |
---|
| |
| |
==== Motivación y Objetivos ==== | ==== Motivación, objetivos y contenido ==== |
| |
El propósito 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. | 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 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. | 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: | 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: |
* testear programas de manera automática, usando la librería QuickCheck. | * 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 {{teaching:cc5115:programa_cc5115.pdf|programa del curso (CC5115)}}. Para una discusión más a fondo sobre la relevancia y beneficios de la programación funcional consultar el artículo {{teaching:whyofy.pdf|Why functional programming matters}}. | Para un listado más detallado de los temas abordados en el curso consultar el {{teaching:cc5115:programa_cc5115.pdf|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 {{teaching:cc5115:whyfp90.pdf|Why functional programming matters}}. |
| |
| |
==== Material ==== | ==== Material ==== |
| |
* G. Winskel, //The Formal Semantics of Programming Languages//, MIT Press, 1993 ([[https://uchile-primo.hosted.exlibrisgroup.com/primo-explore/fulldisplay?docid=uchile_alma21142459530003936&context=L&vid=56UDC_INST&search_scope=uchile_scope&tab=uchile_tab&lang=es_CL|disponible en biblioteca]]) | * //Learn you a Haskell for great good: A beginner's guide//. Lipovača M., No Starch Press, 1º Edición, 2011. ([[http://learnyouahaskell.com|disponible online]]) |
* F. Nielson et al., //Semantics with Applications: An Appetizer//, Springer, 2007 ([[https://uchile-primo.hosted.exlibrisgroup.com/primo-explore/fulldisplay?docid=uchile_alma51170845280003936&context=L&vid=56UDC_INST&search_scope=uchile_scope&tab=uchile_tab&lang=es_CL|disponible en biblioteca]]) | * //Programming in Haskell//. Hutton. G. Cambridge University Press. 2º Edición, 2016. ([[http://www.cs.nott.ac.uk/~pszgmh/pih.html|disponible online]]) |
* F. Nielson et al., //Principles of Program Analysis//, Springer, 2015 ([[https://uchile-primo.hosted.exlibrisgroup.com/primo-explore/fulldisplay?docid=uchile_alma21123471330003936&context=L&vid=56UDC_INST&search_scope=uchile_scope&isFrbr=true&tab=uchile_tab&lang=es_CL|disponible en biblioteca]]) | * //Thinking functionally with Haskell//. Richard Bird. Cambridge University Press. 1º Edición, 2015. |
* P.W. O'Hearn, //A Primer on Separation Logic (and Automatic Program Verification and Analysis)//, Notas de la Escuela de Verano Marktoberdorf 2011 ([[http://www0.cs.ucl.ac.uk/staff/p.ohearn/papers/Marktoberdorf11LectureNotes.pdf|disponible online]]) | |
* J. B. Almeida et al., //Rigorous Software Development: An Introduction to Program Verification//, Springer, 2011 | |
* A. Appel et al., //Program Logics for Certified Compilers//, Cambridge University Press, 2014 | |
* P. Cousot, //A Tutorial on Abstract Interpretation//, VMCAI'05 Industrial Day on Automatic Tools for Program Verification, 2005 ([[https://homepage.cs.uiowa.edu/~tinelli/classes/seminar/|disponible online]]) | |
| |
==== Contacto ==== | ==== Contacto ==== |
Federico Olmedo, Oficia 311N, [[folmedo@dcc.uchile.cl|email]] | Federico Olmedo, Oficia 311N, [[folmedo@dcc.uchile.cl|email]] |
| |