Lambda World 2019 Blog Post
The Spanish town of Cadiz lies outward in the ocean, circled by ancient walls, protected by two castles. Grids of alleys, old houses facing at a short distance across narrow streets, narrow balconies enclosed in windowed structures. Warm, light brown rocks and stone. Old, ancient, historical and yet so filled with sun and sparkling energy.
It is just a heck of a journey to get there to attend the best functional programming conference in the world. You start from your ordinary small northern Italy town, get by car to the nearest airport, fly first to Barcellona, hoping that the turmoils for the recent sentence on the separatist leaders cause no problem with your flight exchange. Wait for a while at the airport terminal, eating a sandwich, then you board on another plane that will carry you to Jerez de la Frontera. There you are up to a ride on the train. Eventually, you reach Cadiz, but you still need to walk to your hotel in the historic downtown. “Walk” because at Cadiz core everything is at a walking distance and most of the streets are impractical to any car.
This is my third year in a row that I manage to get my employer to sponsor my attendance at Lambda World Cadiz. I like this conference, I like the eclectic view of the functional-programming-verse that provides and last, but not least, I like the setting.
As for my other conference reports (Lambda World 2018, Scala Italy 2018, it++ 2018, Scala Italy 2019, it++2019), I’ll try to stick with my comments on each talk rather than providing a full report, since you should be able to find the videos of the talks online for free (and possibly the slides). (Also because preparing the summary of an hour-long technical talk, cross-indexing it with links to what has been referenced is quite a long job that would take me forever).
Before talking about demographics, let’s talk headcount. This year we were some 650 attending the conference. Last year 550 and, according to Jorge Galindo – 47 degrees founder and heart/soul/shaker/mover/promoter of the conference, since 5 years ago when the first edition held, the count has continuously increased. I reckon that for a conference with a so specific theme and held in a not so well-connected town, it is a huge success.
Also, I consider a huge success the variety of people attending the conference. With respect to other technical conferences the percentage of girls and women was unexpectedly high. By rough estimation, it could be somewhat below 20%. I’m not sure about the reason for this – maybe it is because there is quite a direct interest from and for the academic world, or maybe because the conference organization is very attentive to the under-represented groups. Anyway, it is a joy to be in a conference where people are diverse.
Also noteworthy I saw quite an increase in middle-aged fellows. Usually, these are quite rare in the functional conference world, which was mainly the domain of youngsters.
This year the exhibitors’ space was basically doubled with respect to last year’s conference. Using an additional space, the result was not cramped as you might expect. In the main courtyard, the usual 4 stands with a coffee table and then another 6 stands in the room aside.
Exhibitors were both international (e.g. Signify) and local. They never ran out of gadgets in the two days and talking with them was interesting and entertaining as it should be.
Food & Location
The conference took place at the usual location – the Congress Centre of Cadiz. This facility combines the traditional architecture with a central patio and balconies with a modern conference room. Three large open spaces were available with power outlets for people to work, network and relax.
Talking about network I think that some kudos are really deserved for the wifi connection – it is not trivial to grant access to 650 people, possibly with two or more connected devices. The only problem was at the beginning of the workshop when everyone tried to download the required tools. Aside from that, internet connection worked like a charm.
Also, there was plenty of food, breakfast time and coffee breaks included. Quality was high. I heard that the first day there was no specific food (sorry I don’t remember if it was vegan or gluten-free). Can’t tell exactly what happened and if/how the organization handled this. For sure, they apologized and made sure that on the second day everything was there.
From Italian to Italians I have to admit that the coffee was somewhat suboptimal. We are not used to filter coffee and we desperately longed for an expresso. The small coffee cup available created some expectations that were quickly dispelled when the waitress poured in the coffee from the same thermos they used for large cups.
The conference schedule this year was somewhat evolved – the first day was dedicated to unconference and workshops, the second day to the talks. The resulting format is quite a good mix, even if the second day ended up to be a bit crammed with talks.
Day 1 – The Unconference
You can sign up to give a short speech in the “Unconference”. The idea is that if you have something you would like to show or share and you didn’t manage to get it through the call for papers, then you have your chance here.
It is quite simple… if you are prepared. You register your talk on a dedicated website, then proposed talks get voted, the ones that get most votes are presented.
The winning strategy is to come out with an intriguing title even if unrelated to what you are going to talk and then when you’ll be on the stage and start talking no one will stop you and claim this unfair 🙂
Day 1 – Unconference – Agda’s greatest hits
Agda is one of those languages that grants first citizenships to types. Meaning that you treat types just like any other data – integers, strings, arrays, functions and so on. This talk worked like an extremely brief introduction to the language and gave some glimpse over what the language can accomplish. Type definitions have quite an odd way – e.g. integers are defined by their inductive mathematical definition. Lists are recursively defined and the programmer can use special properties to state rules that the type has to obey to.
Pretty weird stuff for traditional programmers. The blazingly fast talk is not enough to make you understand the syntax but could trigger your interest.
Day 1 – Unconference – Functional programming in swift with Bow
Swift is a programming language designed and developed by Apple (basically to replace the hideous objective C). Tomas quickly cited that this language has all the constructs that are needed for functional programming and then started the presentation of the bow library.
I remember this talk mostly as a description of bullet lists, but if you are in swift programming and you are wondering if you can push the FP approach to the level other FP languages enjoy, then this talk can give you some precious hints.
Day 1 – Unconference – Generic Functional Programming with Type Classes
I’m not sure why, but I recorded this speech under the title “Visibility Optimization for 3D rendering in Scala” and spent a good time trying to understand why Tapio wasn’t talking about geometry and projections.
With this new hindsight knowledge, the talk has been a quick rush through the functional programming concepts up to Monoids, Monads, tagless final, and tagless final interpreters. I hope to see something about 3D at the next Lambda World.
Day 1 – Unconference – Our smooth transition to functional programming
Alfredo de Hoces – Solutions Architect – games division
I greatly enjoyed this talk because Alfredo exposed their success story in migrating from a legacy messy on-line application to a modern functional and well-sorted service. He presented the engineering approach and the action taken from chaos to success.
Time is limited so details are scarce, but I found this talk inspiring. (memorable quote “Wrap the crap”)
Day 1 – Unconference – Reason – a language created by the creator of React
This talk is a quick intro to ReasonML and some of its motivation. If you would like to have types and functional programming in browser development, then you may want to take a look at this language.
Day 1 – Unconference – Achieve mastery through challenge
This talk went a bit pearshaped. For me, it is a memento for how difficult and challenging is to climb on a stage to give a talk.
Day 1 – Workshop – Hand’s on ZIO
All workshops were plagued by the very same problem – the attendees discovered what to install and how to prepare their computers at the workshop itself. This caused major network congestion and many people failing to get the beginning of the workshop since they were trying to solve issues on their computers. Also the ratio trainer to attendees was some 1 to 300, which is too low for the speaker to effectively help those who lag behind.
I found that the workshop is a very good idea and I hope that the next editions could improve on the format.
Day 1 – Workshop – Making the Most of Scala Through Functional Programming
Day 1 – Opening Keynote: Implicits Revisited
I’ve attended another Odersky’s talk less than one month ago. He presented the major innovation in the upcoming Scala 3 language. In this talk, he focused on the loss of implicit and its replacement (given).
Martin’s dissected the current design of implicit in Scala language splitting goods and bads. Then analyzed bads and presented the new design in Scala 3 that is going to replace implicits.
Implicits trigger mixed feelings in me. While I think that implicit class is a good way to add methods and functionalities to existing classes, avoiding the need for explicit inheritance; on the other hand, implicit arguments are somewhat tricky. Every abstraction needs to hide details so that you can focus on a higher level of thought. Some details are really uninfluential – e.g. most of the time, as long as the compiler performs a correct translation, I don’t care about the generated machine code. Sometimes abstracting is not so neat and unambiguously adequate, e.g. when you write a C++ expression you may be calling constructors and operators in a non-evident way. Implicits parameters fall in this second category, they create spooky actions at a distance.
The new design fixes the identified problems but doesn’t really do anything to avoid such quantum oddities. In other words the implicit concept is not going away in Scala 3.
Luckily for us that work with Scala, the first release of Scala 3 compiler will still handle the implicits in the same way Scala 2 does. So there is time to convert relevant code.
Day 2 – Keynote: A categorical view of computational effects
With this keynote, we enter in the heat of the conference – hard algebra. Emily is an associate professor at John Hopkins University (USA) and talked about algebra and effects. Effects have always been problematic to FP – since they break the referential transparency. Dealing with effects in a functional way is possible and in recent years an increasing number of libraries are available (Zio and cats-effects just to name two in the Scala domain).
The objective of the talk is to provide a mathematical foundation for effects.
The presentation starts quite easily describing what category and compositions are, what an isomorphism is. Then suddenly the complexity rises steeply. Effects are turned in mathematical representation to describe possible outcomes from a computation and Lawvere Theories (note that Theory is not what is commonly intended for theory) are introduced as an equivalent for Monads. Lawvere Theories have some advantages the most notable being quite a natural match for the computational operation.
I admit that I had a hard time trying to keep up with Emily. If at the beginning understanding was 100% while feeling was 0%, from the first quarter the balance changed to reach understanding 0% and feelings 100% by the last quarter.
If you want to check the mathematical foundation of your everyday work and you are ready to do some math research, this is the talk for you.
Day 2 – Talk: What FP Can Learn From Static Introspection
Even coders have physiological needs and that’s why I lost the very first minutes of this talk. Without any clue about the intent of the talk I had to figure out the direction we were moving to from slide to slide.
Aditya dissects two languages D and Nim to analyze their static execution capabilities (that is another name for compile-time execution), what kind of benefits you can get and whether is worth it. D has some static execution capabilities mainly to get the structure and the type of user-defined types. Nim has more extensive compile-time execution and algorithms may be executed right by the compiler. In an example, Aditya performs CSV loading and parsing at compile time.
Not always moving execution at compile times saves time or space, therefore proper measurement should take place.
Other uses for compile-time static analysis include type diffing (that ensures that a type is not changed for usage with your code) and descriptive error message. This is a neat idea – let the code tell you what is expected or not in order to save you the usual lookup on StackOverflow.
Day 2 – Talk: The Reason for ReasonML
ReasonML is pretty compatible with JS in the sense you can access JS code and from JS code you can access ReasonML code.
This talk is a pretty zoom in on the matter presented in the unconference talk “Reason – a language created by the creator of React”
Day 2 – Talk: So I used Erlang . . . is my system as scalable as they say it’d be?
In this talk, Laura proposes a brief presentation to the language and a running example (an echo server) to show language features and scalability issues. You can find the source code for the echo server here.
Testing is provided via a property-based approach. This is an interesting take on testing that can be paired up with Unit and Integration testing. Basically you first define the input vocabulary for your service/component, then a set of rules to generate input streams and a set of rules for validating the output. A random input sequence generator provides random inputs and the testing framework makes sure that outputs are always valid.
In the end, the length (in line of code) for the echo server is not so impressive, nonetheless, it is a nice introduction.
Day 2 – Talk: Optimising your code with math
This was one of the talks I was eager to attend. I proud myself to be quite effective at optimizing code (possibly something tied to my youth when I used to spend days and nights on 48k at 4Mhz), so I wanted to see what tools a mathematical approach could add to my optimization-tool chest.
April structured their presentation in 2 parts – in the first they presented the tools FP provides to you, in the second the kinds of optimization you can do on your code.
It is interesting to see how algebra helps you in transforming your code in such a way that the semantic is preserved. Changing the order on which functions are applied can lead to surprising results if the functions are not pure or when the structures do not realize a proper algebraic structure.
On the other hand, the matter becomes quickly hard asserting sentences like “for some effects, we can go back and forth between monads and applicatives” or “With day convolution, we get applicatives…
I am more and more convinced that if you want to properly use FP you need to study (quite hard I would add) all the category theory, otherwise you are pretty locked out. Yes, you can do FP, you can use monads, but it is more of a Sunday programmer than a real, professional programmer. The parallel with the imperative paradigm is lame – you can argue that if you don’t know what a virtual method is then you will have a hard time talking with people that do OOP, but the “virtual method” is just a concept. Once you know it has no relationship, no theorem, no mathematical property you need to know in order to exploit it. Conversely, monads, monoids, arrows, applicatives, functors and day convolutions (just to name a few from the top of my head) have relationships among them, properties for use and composition. You can ignore them, but then you’ll miss a lot of opportunities to improve your code and make it more robust.
Does this help in optimization? Likely, but at a different level. When you need to optimize the first thing you do is looking up an algorithm with better performances. E.g. you replace your O(n^2) algorithm with another one with O(n) complexity that does the same thing. Once done, you go down in the abstraction level to trim all the waste in performance so that you have the fastest O(n) solution for your problem.
Well, the point is how do you prove that the O(n) algorithm does exactly the same thing that the O(n^2) algorithm did?
Day 2 – Panel: Functional Programming in Enterprise
This panel was held in the hall, regretfully the hall became very crowded and the audio was so bad that most of the speakers couldn’t be heard (at least from my ears that can’t be considered all that sensitive).
Day 2 – Talk: Time-sensitive protocol: Links From Design to Implementation
Networks are defined by autonomous entities that send and receive messages. They can be modeled as automata that can send and receive messages. These models may be expressed by mathematical terms.
IF you don’t set any other rule and condition, then it is not given whether the interaction is bound or lock-free. That’s a theorem. But… but if two talking automata are compatible, then their interaction is bound and lock-free.
Session types are a sequence of interactions from one entity point of view. It is interesting to note that a session type can be reversed to create the other endpoint session type.
Adding time to session types is not trivial since the specification can produce malformed types. The subject of this talk is to analyze how to manage time in session types.
My impression is that simple interactions get modeled quite easily, but real protocols, with tens of states and timeout, can be a sort of a challenge. Anyway, this could be the groundwork for some higher-level tools.
Day 2 – Talk: Fun with Categories
Marco speaks about Idris – a general-purpose functional language – and how to use it to address everyday problems in programming. Typing is shown to be a powerful tool not only to specify which operations are allowed on which data but also which restrictions/requirements that data is subject to.
The talk is interesting, examples are good, some explanation could have been a bit over my head, but fun has been somewhat hard to find.
Day 2 – Talk: A Series of Unfortunate Effects
The title plays with words and fairy tales to suggest some parody or other programmers’ humor about function programming point of view of computational effects.
And this was more or less the idea. Pictures artistically sound are shown on the screen. This is more of a show than a talk and you may like it or less. I found the show a bit too long. Nice the first 10 minutes, then dragging itself to an end. Also, the tone of Robert, intended to mimic minstrels, sounded a bit monotonic to keep my attention alert.
I think this is actually a good idea – insert a moment of fun and art in a technical context, but it needs to be refined.
Day 2 – Closing Keynote: Thinking Like a Data Scientist
Data Scientist and Hair Stylist are two professions that will never go out of fashion. At least this is what Jamie Dobson claimed in a closing keynote from the Scala Days 2016 stage. With this pearl of truth, I approached this final talk.
Using the 1854 Cholera outbreak in London (AKA The Great Stink) as the core of the presentation, Em did a great job in presenting the job of the Data Scientist, how a Data Scientist works (or, at least, how they should) and what the world does with the result of Data Scientist work.
Even if the call-to-arms at the end of the presentation was a bit of a surprise to me and I am not sure I entirely agree with that, the awareness is always good.
And for sure this was a great way to close the Lambda World conference.