Lambda world Cádiz, una de las conferencias sobre programación funcional más importantes de europa tuvo lugar en Cádiz los días 25 y 26 de octubre. Un equipo de Apiumhub estuvo allí atendiendo a algunas de las charlas que tuvieron lugar.

Puesto que las conferencias y los workshop tienen lugar en varios tracks simultáneos, no pudimos atender a todos, así que explicaremos aquellos a los que fuimos y daremos pinceladas de otros.

Lambda World Cádiz empezó con una unconference donde varias personas tuvieron palabra y dieron lightning talks.

 

Lambda World Cádiz: unconference

Fue una parte interesante donde el primer ponente fue Juan Manuel Serrano, CTO de Habla Apps, que también fue ponente en la Software Crafters BCN 18. Su charla trató sobre resolver un problema que requería tipos dependientes para la cual usó Scala + Shapeless, pero también implementó la misma solución con Agda. Muy interesante, donde mostró cómo extender los tipos de Colección nativos de Scala y nos dejó con muchas ganas de explorar más.

La siguiente lightning talk fue de la mano de José Escanciano, chief architect de Addison Global. Su charla trató sobre la arquitectura que tienen implementada en MoPlay, programada en Scala y haciendo un fuerte uso de microservicios y programación reactiva. Una arquitectura muy basada en CQRS y Event sourcing y con un interesante approach.

Nikita Tchayka mostró Eta lang y como su interoperabilidad con Java, Scala y demás lenguajes de la jvm usando un lenguaje basado en Haskell.

El siguiente turno también trató sobre Haskell, pero esta vez Haskell en live coding. Alejandro Serrano programó en directo la misma implementación que Juan Manuel Serrano enseñó en Scala y Agda, pero en Haskell. Impresionante.

La unconference acabó con una charla de Pepe García, de 47Deg nos dió un interesante punto de vista sobre cómo combinar métodos de parsing para encapsular la lógica de parsing. De aquí acabó pasando al uso de Contravariant y demás typeclasses para lograr un printing customizado y estrechamente ligado al su contraparte, el parsing.

 

Lambda World Cádiz: workshops

Dieron comienzo los workshops, en nuestra opinión un poco escasos, pero de un alto nivel.
El primer workshop al que acudimos fue “Build your own Monads” y con el ponente Alejandro Serrano de nuevo en la tarima recibimos una nueva dosis de Haskell.

Trató de un ejercicio en el que diseñaremos e implementaremos nuestro propio monad, el ejemplo que se llevó a cabo fue sobre el juego “Tik-tak-toe”.
Alejandro explicó tres maneras de fabricar nuestros nuevos monads, initial style, final y operational style, al principio en Scala y Haskell y finalmente mostrando las implementaciones y explicaciones en pizarra con Haskell. Una muy interesante charla donde nos abren el mundo de los Free monad, los Freer monad, la diferencia con los Free monad de Scala y cómo esto nos ayuda a abstraer gran parte de la implementación de nuestros propios y customizados monads.

Después de comer fuimos al workshop “A strongly typed martini. Shaken, not stirred” sobre tipos refinados en haskell. Allí pudimos aprender sobre LiquidHaskell, que mediante “comentarios” o “anotaciones” nos aporta más potencia sobre código puro haskell, similar a como Flow aporta tipos a Javascript. Los tipos refinados, algo que nosotros ya habíamos visto en Scala, se trata de la combinación de un tipo y un predicado que proporciona un nivel de restricción extra que los tipos simples no nos aportan. Se llevaron a cabo una serie de ejercicios refinando tipos, en el dominio de los cócteles, los vasos y los “shakers” en el que pudimos acabar definiendo una lógica “bastante” compleja que vivía enteramente en el predicado de los tipos refinados, muy interesante y algo a tener en cuenta de ahora en adelante.

Una vez acabaron los workshops empezaron las charlas. Las hubo de todos los niveles, aunque mentiría si dijera que el nivel estaba repartido. Muchas de ellas en Scala y Haskell aunque algunas sobre Java e incluso Javascript fueron a las que acudimos.

Jean-Baptiste Giraudeau dio una magistral charla sobre cómo programar excepcionalmente bien en Java usando functional programming. Fue agradable ver que no todo el mundo ha dado el paso a Scala, y que se pueden hacer cosas excepcionales en Java.


Fuimos a la charla How to get away with functional programming in frontend applications con muchas ganas de ver que opinión tenía la gente sobre Javascript en estas conferencias, ver qué nos aportaba, novedades y demás. La charla en si no estuvo mal, sin embargo disertó demasiado rato sobre si usar Flow o Typescript para dedicar relativamente poco espacio a la programación funcional en frontend.

Y finalmente acabó el día 1 con una keynote de Koko Muroya y Steven W.T. Cheung, doctorandos en la universidad de Birmingham. Una charla mucho más enfocada al ámbito científico que al práctico en el que enseñaron qué hace realmente un programa funcional cuando lo ejecutas, mostrando modelos diagramáticos para comprender qué caminos siguen nuestros programas, usando un lenguaje de programación que ellos mismos están desarrollando. Con ejemplos muy interesantes nos enseñaron cómo se evalúa una función dependiendo de si le pides una estrategia de evaluación u otra(call-by-value, call-by-need) y las bondades que nos proporciona un generador de diagramas para código como el suyo.

Y aquí empieza el día 2, compuesto enteramente de charlas y abriendo con una fantástica keynote de Felienne Hermans. A diferencia de la closing keynote del día 1, esta keynote fue al extremo contrario, nada técnica, pero sí científica! Felienne habló sobre su vida, sobre cómo descubrió(y creó una disertación al respecto) que los excels son programas, que la gente que trabaja con ellos son programadores y que tienen su propio lenguaje. Cómo se dio cuenta de lo tóxica que es nuestra comunidad cuando presentas ideas como esta. Y finalmente habló de algo de lo que sorprendentemente no nos damos: No tenemos una forma común de leer código. No sabemos cómo suena, cómo se lee, cada uno lee los if y los for de una forma distinta. Cómo podemos enseñar a programar entonces a los niños, si cada persona les dice una cosa distinta respecto al mismo concepto? Una charla que no trató sobre la programación funcional y que sin embargo nos pareció de las mejores de la Lambda world Cadiz.

Y puesto que no habíamos recibido nuestra dosis de haskell aún, nos dirijimos a Headfirst Haskell con la esperanza de que nos dieran consejos y una senda a recorrer para los que quieran empezar con este lenguaje. Abby Sassel nos habló de su año aprendiendo Haskell y los consejos que podía dar al respecto. Fue menos técnica de lo que esperábamos, pero nos dio muchas ideas.

Y volvimos con Javascript. Flavio Corpa en Functional Lenses in JavaScript nos dio una palmadita en la espalda a todos aquellos que programamos en Javascript usando Ramda y lenses, haciéndonos ver que no estamos solos y que es una técnica útil y usada en el mundo de la programación funcional.

Una de las charlas que más llenó la sala fue Testing in the world of Functional Programming, por Luka Jacobowitz. En un mundo como el de la programación funcional donde el testing no se tiene “tanto” en cuenta como en el de OOP, Luka explicó, entre otras cosas, qué nos aporta el property based testing, las limitaciones que tiene. Cómo solventar algunas de estas limitaciones con, por ejemplo refined types en Scala.

Itamar Ravid nos dio ejemplos de uso de multitud de conceptos en Scala, demostrando el uso práctico de diversos conceptos como Writer, WriterT, IO, IndexedStateT, Coproductos, Codensity, una charla muy ligada a la dada a continuación por Paweł Szulc ( A roadtrip with monads: from MTL, through tagless to BIO ) donde usó gran parte de estos conceptos y muchos más no mencionados anteriormente en un refactor brutal hacia un código totalmente abstracto, con un buen análisis en cuanto a qué nos había aportado(y quitado) cada fase del refactor.

Y la última charla a la que acudimos ( The Complexity Trap: Think Before You Leap ) fue una que nos explicó: Todo esto está realmente bien, pero no tenemos que perder de vista la complejidad accidental que aportamos. Que no tenemos que obsesionarnos con la abstracción, porque tiene un coste. Las soluciones aburridas son, a veces, un beneficio.

La conferencia cerró con una keynote sobre el síndrome del impostor, algo que la mayoría de la sala había sentido en algún momento, y que seguramente vosotros también. Otra keynote nada técnica pero que hizo sentir mejor a mucha gente.

 

Lambda World Cádiz: conclusiones

Nuestras conclusiones con estas charlas son que si bien hace falta tener un nivel medio-alto de programación funcional para poder enterarte de qué se está hablando, también es un trampolín para aprender conceptos ideas y tecnologías que te mantendrán ocupado el año entero hasta la siguiente Lambda World Cadiz. Los niveles son diversos, ya que puedes ir a charlas sobre javascript, donde el uso de la programación funcional es más bien práctico, y también puedes ir a charlas sobre type level programming en Scala y de aquí a charlas nada técnicas y que te ayuden o den ideas.
Lambda World Cádiz es una gran opción como conferencias si quieres entrar en este mundo y llenar tu libreta de conceptos que te mueres de ganas de aprender!

Si queréis tener más información sobre Lambda World Cádiz, no olvidéis de subscribiros a nuestro newsletter mensual aquí

 

Si te gustó este artículo sobre Lambda World Cádiz, te puede gustar: 

 

Barcelona como ciudad intelignete

Mapa de los “main players”: ecosistema startup y tech en Barcelona

Proyectos IoT que cambiarán el mundo 

Ecosistema de salud digital en Barcelona

Cluster de salud digital  

Inovación disruptiva: ejemplos 

Búsqueda visual en el comercio electrónico