Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
teaching:cc5115 [2020/02/10 12:55]
folmedo [Motivación y Objetivos]
teaching:cc5115 [2020/02/10 13:15]
folmedo [Objetivos y contenido]
Line 2: Line 2:
  
  
-==== Motivación y Objetivos ​ ====+==== Motivación, objetivos ​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 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.
Line 17: Line 17:
   * 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 {{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 {{teaching:​cc5115:​programa_cc5115.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}}.
  
  
Line 35: Line 35:
 ==== 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 goodA beginner'​s guide//. Lipovača M., No Starch Press1º  Edición2011. ([[http://learnyouahaskell.com|disponible ​online]])   
-  * F. Nielson et al., //Semantics with Applications:​ An Appetizer//Springer2007 ([[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//. HuttonGCambridge University Press2º 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ón2015.
-  * P.WO'​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 +
-  * AAppel et al., //Program Logics for Certified Compilers//, ​Cambridge University Press, 2014 +
-  * PCousot//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]]