We are so excited to be sponsoring and attending Lambda World in Cadiz this month so before we go we thought we would catch up with one of the inspiring speakers Itamar Ravid. Itamar is a Software Consultant working with Scala among other functional programming languages, check out his exclusive interview with us below.
Tell us about your background what was it that sparked your interest in Functional programming?
The logical path from there was functional programming, from two aspects: first, the Scala community is heavily oriented towards functional programming, so it’s hard not to run into these concepts; second, functional programming has a very unique premise: you don’t need to read your entire codebase to understand what a function does. Immutability and referential transparency help you understand what’s happening just by reading the function body.
What was it that inspired you to take the step into using Scala as a functional programming language?
After working for two years on a Akka Actors-heavy codebase, I felt the same as I did with dynamic languages; Akka’s actors lack type safety and encourage the use of side-effects, so I couldn’t easily refactor the code.
How do you feel Scala benefits the work you do?
Scala allows me to utilise mainstream technologies like Kafka, the JVM and so on while using functional programming. The benefit is twofold: you don’t have to implement everything from scratch and can benefit from a large and thriving community on the JVM, and you can create rock-solid, performant, resilient codebases. And most importantly, these codebases remain maintainable over time.
As a consultant, you’ve trained engineers and transitioned teams to use purely functional programming. Was this a difficult process? What was the benefit to them transitioning to using FP compared to the languages they used before?
Over time I’ve noticed that the difficulty in onboarding teams to purely functional programming on Scala is about the ceremony. There are many road bumps that we take for granted - having to explicitly set “-Ypartial-unification”, installing the kind projector compiler plugin, and so forth.
Getting teams to productively use immutable collections is easy; getting them to productively use an effect monad and understand *why* they need to use it (compared to using Future or just using side-effects) is harder.
The unfortunate situation is that teams usually onboard programmers both to Scala AND to functional programming, leading to increased cognitive load.
Of course, once the team is up and running, it’s usually easy to see increased productivity. It’s a long process though.
Is there anything which you feel helped you learn and progress your career in terms of the community e.g. conferences, contributing to the community? Are there any resources you would recommend?
Giving talks helped me solidify and formalise much of my knowledge. Open source work is very encouraging too; you get to interact with people who you don’t normally work with, on issues that aren’t bounded by company revenue or time, so the whole development process is very different.
In terms of learning resources, I heartily recommend picking up issues in open source libraries and trying to tackle them. This is a very humbling and teaching process. Any of the typelevel libraries are great to try this out with. John De Goes’ scalaz-zio and other libraries are also well groomed and have many issues that newcomers can tackle. I can also recommend his training workshops if you get the chance to attend.
You are speaking at Lambda World, what made you decide you wanted to start speaking at conferences on Functional Programming?
I love speaking - I’ve done many internal talks at companies I worked with; this was a personal goal for myself. It was also a great way to formalise my knowledge.
Is there any advice you would give to someone starting a career in engineering?
What do you see for Scala in the future?
I don’t predict the future very well, but I can offer my hopes: I hope that the dotty transition will be relatively smooth for the community and that we see Scala adopting the latest JVM features at a higher pace. The JVM release schedule has shifted to releases every 6 months, and Scala is now 3 versions behind. I hope we’ll see this pick up soon.