Jacek Kunicki - My Scala Story
We celebrate Scala's 20th anniversary in 2024 and invited experts to share their Scala Stories. Jacek Kunicki is a Senior Software Engineer, conference speaker, and SoftwareMill Academy lead. You can follow him on X: @rucek
How did you first get introduced to Scala, and what did you think about it?
I took Martin Odersky’s “Functional Programming Principles” course in 2012. I entered two new worlds at a time: the Scala programming language and functional programming. I’d say the latter was a bit more mind-blowing. However, having come from Java 7, the ease with which I could encode the functional concepts in Scala was revolutionary as well. Among other things, I completely didn’t get the idea of the immutability-first approach; I remember I was forcing myself to write immutable data structures, without truly understanding why.
Tell us about a moment when you realized, "Aha! Scala is awesome!" What Scala's features and capabilities made you feel that way?
One of the breakthroughs was when I started “feeling” immutability - this was a point of no return, and later on, it was the mutable code that looked awkward. I also liked the power of pattern matching – this is something you quickly get used to, and you feel limited when other languages only give you an if
or a switch.
Last, but not least, it's the way that Scala mixes OOP and FP, allowing you to take the best from both worlds and smoothly transition between them.
How has Scala influenced your approach to solving programming problems?
My functional programming journey was quite enlightening. At first, the road was bumpy since I tried to blindly follow the principles without really knowing what I was doing. After some time I got to the point where I could say that I was consciously using the functional approach. I guess I understood the M-word to an extent that I was able to explain it to others.
This was when my adventure with SoftwareMill Academy started. I truly believed in the functional approach and I could honestly teach and encourage others to use it.
However, at some point there came a moment of doubt - I was not sure if we were not overcomplicating things by applying functional programming everywhere. Getting more familiar with direct-style programming made me even more aware that there’s life beyond monads. This is where I am now, and I’m looking forward to the next chapters.
What is your favourite programming meme?
I’m not good at recalling memes on demand, but this is a recent good one:
Everybody has a testing environment. Some people are lucky enough enough to have a totally separate environment to run production in.
— stahnma (@stahnma) August 21, 2015
What are your go-to tools and libraries when working as a software developer?
For libraries, I can only answer: “it depends” because it does and is determined by the problems you need to solve and the environment you solve them in. For tools, I’ve been using IntelliJ IDEA since version 4 (I guess) and it seems like one thing that is not going to change.
How has the Scala community impacted your programming journey? Any standout interactions or support stories to share?
I spoke at a couple of conferences and also supported the team behind Scalar a couple of times. Knowing the conference world from many perspectives (speaker, participant, organizer) makes me grateful to all the people involved in creating opportunities for sharing knowledge this way.
Did you have any hilarious or embarrassing moments while learning Scala?
I think I had some when I started to teach Scala. It turned out many times that I thought I knew how some of the language features work until someone asked this one tricky question. This was a great reminder that learning is a constant process – you never know everything and being a mentor means that you should be learning even more.
What advice would you give to someone just starting with Scala?
Accept the counterintuitive concepts, like immutability, not using null
s, or the functional/declarative approach to e.g. handling collections. You’ll need to force yourself to use them at first, but trust me, they will feel natural sooner than you expect.
How have you seen Scala evolve over the years, especially in your field of work?
In general, I’d say that Scala did its homework and many of the changes in Scala 3 were simplifications of what turned out to be overly complex in Scala 2. This includes disambiguating the implicit
keyword that did many different things under the same name or finally introducing proper enum support (which was far from perfect in Scala 2).
Over the years, we could observe the competition between the Typelevel stack (Cats and Cats Effect) and ZIO (formerly Scalaz). Although the competition was not always purely technical, it certainly encouraged both ecosystems to evolve.
An area that is more of a neverending story than an evolution is JSON (de-)serialization. Although this is a critical part of many applications, we have never had a single standard to perform this task in Scala. Even today choosing a JSON library – which should be a no-brainer – is one of the design decisions you have to make when starting a project.
Join Scalar 2025!
There's no better place to meet fellow Scala enthusiasts and professionals than the Scalar Conference. Join us in March 2025, and subscribe to our newsletter to receive all the latest news and announcements!