One of the co-founders of SoftwareMill, Adam Warski codes mainly using Scala. He is involved in open-source projects, such as sttp, MacWire, Quicklens and others and often shares insights and ideas on SoftwareMill blog.
At Scala Days, Adam is doing a live-coding talk “Concurrent programming in 2019: Akka, Monix or ZIO?” demonstrating how Typed Akka Actors, Monix and ZIO compare in terms of type safety, composability, communication and side-effect management,
In advance of the talk, we caught up with Adam on his Scala Days memories, building SoftwareMill as a transparent, remote-first organisation and his upcoming talk at Scala Days Lausanne.
What’s your most favorite Scala Days story or memory?
I’ve been attending ScalaDays since the 2013 edition, and already at my second one I’ve had the opportunity to give one of my first Scala-focused talks on a major conference. The talk was on a no-framework approach to Dependency Injection (using only Scala code, without annotations and containers) and introduced the macwire library, which since gained some popularity. I think it’s the same ScalaDays edition which hosted a rooftop party near Alexanderplatz in Berlin – great time with some of my coworkers from SoftwareMill, and getting to know the Scala community!
What’s your background and what does your current role involve?
I started my professional career as a Java developer: short after studies I joined JBoss and worked using their technologies, hence my initial experience was with JavaEE. I then slowly moved towards Scala. SoftwareMill, the company I co-founded, took a similar route – we started as a JBoss consultancy, ending up 10 years later as a software provider specialising in Scala, distributed and data processing systems.
My current role is divided between taking care of the company, architectural and Scala consulting, open-source and project Scala programming.
What’s the biggest highlight of your career so far?
Definitely building the best IT company to work for, SoftwareMill! That’s of course not thanks to me, but rather the achievement of the whole team.
We’ve created a transparent, remote-first organisation with a bottom-up, “emergent” structure. And all of this long before remote working and “teal organisations” gained the popularity which they have now. This way of running the company I think creates not only a great work environment, but is also beneficial to our clients, where communication, engagement and quality are equally important.
Why did you choose Scala and what kind of problems does it solve for you?
I started with Scala looking for a “better Java”, and I stayed for the functional programming. I think it’s a great combination of the object-oriented and functional worlds.
Thanks to Scala’s flexibility it offers a lot in terms of creating abstractions and hence modelling various business domains. This has proven especially useful in the field where we mostly work – backend/ messaging/ blockchain/ data-processing systems – as there’s a lot of focus in the community on creating libraries focused on concurrency, composing asynchronous computations etc.
The main benefits of Scala are twofold: first, you can get a lot of compile-time guarantees which allow you to gain more confidence that the code does what it should, but also the types guide you when writing code. Second, you get the possibility to extract the essence of the problem at hand by creating abstractions which allow you to do just that: abstracting away the technicalities/boilerplate, and leaving the core logic at sight.
What’s the most important challenge that Scala developers are facing today?
I suspect most would say Scala 3, but this seems to be on course. So I will pick the second most popular answer, which is compilation speed.
Humans should not be faster than computers – however, as for compilation, we are quite far from the ideal (not only in Scala). I still type faster than Scala typechecks the code, that is, after completing a code fragment, it takes a nontrivial amount of time for the compiler to produce the bytecode.
This shouldn’t be the case: I’d like a programming environment where the code is typechecked and compiled as I write, making it immediately runnable. Maybe one day we’ll get there 🙂
Who should attend your talk at Scala Days and why?
Onee of Scala’s main specialisations is concurrent and parallel programming, annd the ecosystem offers a lot of choices. There’s the “good old” Akka, but now in a new flavor – Akka Typed. Then we have Monix’s Task, which is already quite well established, and a relatively new contender, Scalaz ZIO.
The natural question arises: when to choose which? How do these libraries differ? Which one is right for me?
I try to show as much code as possible, and this talk is no exception – although some introduction will be required, there will be quite a lot of live coding as well.
Whom would you like to connect with at the conference?
Throughout the years I’ve had the possibility to meet a number of people from the community, so it will definitely be a great occasion to reconnect. But as always, meet new people as well!