Leyendo sobre programación funcional

Publicado el Martes, 20 de marzo de 2012

El año pasado tuve una época en que me interesé bastante en el tema de la programación funcional.  Uno de los principales responsables es Gabriel Claramunt, antiguo colega de oficina y evangelista de Scala (y/o programación funcional en general). Además de Scala con Gabriel he tenido la oportunidad de conversar sobre varios lenguajes de este paradigma.

Descubrí que resolver los problemas con este paradigma es divertido gracias a Ruby. Ruby incluye bloques, procks y lambdas, todo "funcional". Cuando empecé con Ruby, de a poco me fui viendo expuesto a estos nuevos términos, y esta nueva forma de pensar. Mucho antes había aprendido algunas básicas incluso en IRC recuerdo que estuve hablando del tema y aprendiendo. Pero nunca pasó más que eso.

Buscando especializarme un poco en Ruby, estuve leyendo al respecto para entender de qué se trataba la cosa. Hubo un artículo que me "arruinó la cabeza":
Understanding Ruby Blocks, Procs and Lambdas
En este post se explica bastante bien con ejemplos qué es cada cosa. Me arruinó la cabeza en el sentido en que me llevó a pensar que había un mundo entero de código por escribir con lo aprendido, y era muy entretenido.

We need to go deeper

We need to go deeper

No satisfecho con ese post salí a buscar más. Mi razonamiento fue el siguiente: Los elementos de programación funcional que incluye Ruby lo hacen bastante poderoso. Pero, al estar acostumbrado a otros lenguajes, todavía no entré en el modo "esto lo podría hacer funcionalmente" en mi cabeza y aprovecharlos del todo. Por eso, decidí escarbar un poco más.

Esto me llevó a programación funcional en su estado más puro: Haskell. Aprendiendo un poco de Haskell, seguramente podría hacer mucho mejor uso de las características de programación funcional. A todo esto habría que sumarle que los lenguajes funcionales son cada vez más usados y siempre es bueno tener una herramienta más en el cinturón (bati-cinturón o cinturón de herramientas, como prefieran) a la hora de resolver un problema.

Learn You a Haskell for Great Good!

Learn You a Haskell for Great Good!

En fin, mi estudio de Haskell me llevó hasta el libro Learn You a Haskell for Great Good!: A Beginner's Guide. Este libro puede ser comprado en papel o leído online.

Se los recomiendo si como yo quieren agarrar conceptos de programación funcional. Empezamos con GHCi, el compilador de Haskell que incluye un modo interactivo que permite interactuar interactivamente con scripts. Interactivamente.

Prelude> :set prompt "picandocodigo>"
picandocodigo> 37 + 5
42
picandocodigo> "Hola" ++ " " ++ "mundo"
"Hola mundo"
picandocodigo> [1..16]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
picandocodigo> take 7 (cycle["Ruby", "Haskell", "Scala"])
["Ruby","Haskell","Scala","Ruby","Haskell","Scala","Ruby"]

Es bastante fácil de digerir, y didáctico como todo buen libro de programación. En algún momento seguiré con él para aprender un poco más (ya está agregado a mi wishlist de Amazon para posible compra futura 😀 ).

Otro libro interesante que también agregué a mi lista fue The Little Schemer - 4th Edition. También fue recomendado por Gabriel (incluso me prestó la versión impresa unos días). Este libro intenta enseñar a pensar de manera recursiva de manera bastante particular. Usa diálogos graciosos y sencillos para que el lector se familiarice con los conceptos de Scheme.

En los comentarios Bob agrega este enlace:
http://www.fing.edu.uy/inco/cursos/progfunc/pmwiki/field.php/Materiales/Teorico
Se trata de material teórico de la materia Programación Funcional del Instituto de Computación en Facultad de Ingeniería.

Todo esto fue parte de lo que anduve leyendo y dejo los links acá para compartirlos y tenerlos como referencia. Me queda mucho por leer y mucho código por escribir. Pero está muy interesante y divertido de estudiar. En mi nuevo trabajo voy a estar aprendiendo y usando Ruby, así que iré mejorando por ese lado. Pero también estoy con ganas de armar algún proyecto en Scala - el nuevo Java-, lenguaje del cual también he leído bastante y dedicaré otro post en algún momento.

12 comentarios en este post

Feed de comentarios
  1. Avatar

    Lu 20 marzo. 2012 - 10:14

    1. Scala no es el nuevo Java. ¬¬
    2. Tengo Haskell: The craft of functional programming por si lo querés.
    3. Aguante Haskell. 😀

    • Avatar

      Fernando 20 marzo. 2012 - 10:20

      Scala es Java hecho para este siglo 😛

      ¿Está bueno el libro? Pasame un “review” cortito 😀

      Por lo poco que he visto hasta el momento, te acompaño en el sentimiento: ¡Aguante Haskell!

  2. Avatar

    helq 20 marzo. 2012 - 21:42

    Ahora veo que hay más personas en la programación funcional.

    Mi experiencia a sido similar a la tuya, iniciando con la programación de funciones recursivas y con el ánimo de aprender Haskell. Desafortunadamente lo he dejado como proyecto a futuro, me falta aún entender lo de monadas y otras cosillas curiosas.

    Por otro lado la pureza no es lo más aconsejable para cuando se programan ciertas cosas, ya que suele suceder que cosas fáciles en otros lenguajes de programación sean toda una odisea en Haskell. Hay soluciones a ciertos problemas en lo que lo mejor es usar varios paradigmas a la vez.

    “Haskell el lenguaje de programación que hace fáciles a las cosas complejas y difíciles a las fáciles.”

    • Avatar

      Fernando 20 marzo. 2012 - 23:09

      Sí, la programación funcional se usa mucho en el mercado.

      Mi intención de aprender Haskell es con un fin académico por ahora, como decía en el post. No sé si lo tendré que usar profesionalmente en algún momento, pero más vale estar preparado 🙂
      A mí también me falta mucho todavía, pero de a poco se va aprendiendo.

  3. Avatar

    Gabriel C. 21 marzo. 2012 - 16:23

    Lo que son las malas juntas! Creo que tengo que pedirte disculpas por llevarte por el mal camino, a mi me arruino la vida! 😀

    Espero verte en las reuniones de hackers funcionales 😉

    • Avatar

      Fernando 21 marzo. 2012 - 23:17

      Jaja, “oficial, es culpa de Gabriel, él me dijo que usara un lambda acá” 😛

      De última es algo más por aprender, y está bastante divertido.

      Voy a estar al tanto de las reuniones, a ver si me sumo a alguna. Voy a estar re pintado, pero de última me sirve para conocer a gente que anda en el tema y tener conversaciones interesantes 🙂

      ¡Saludos y gracias por la mala influencia!

  1. Meetups de Scala en Montevideo | Picando Código | 17 junio. 2013 - 11:59

    […] Scala estuve viendo algo en su momento, me parece un lenguaje super interesante y me gustaría programar algo con él (mi lista […]

Dejar un comentario

Toasty!