We were very lucky at Signify Technology to have the exclusive opportunity to get an insight into the journey of Software Mill Co-Founder, Adam Warski and so we wanted to share it with you. Speaking on what sparked his Scala interest and the challenges he has come across check out this interview with Adam.
Tell us about your background what was it that sparked your interest in engineering?
I'm not sure where the idea to do programming exactly came from, but I started doing some very simple Quick Basic and Turbo Pascal when I was around 7. Probably the fact that both of my parents are engineers and that I had access to a computer since an early age helped a lot.
Since then I stayed on course, first programming as a hobby, and then commercially while I was doing my degree.
What was it that made you take the step into using Scala as functional programming language?
I first encountered Scala around 2005 during a seminar at the University of Warsaw (it was a category theory seminar, although I think that back then the interest in that topic was almost non-existent among programmers). It seemed like an interesting language, but didn't do any coding in it back then.
For a couple of years I've been doing Java programming, mainly using the "EE" variant. At that time, I've been a big fan of ORMs, annotations and frameworks such as CDI. Since that, this has changed, but it was very valuable to learn how these tools work "in the trenches", and understand what pains they cause (and they cause a lot of pain!).
I came to Scala looking for a better language - I did some OCaml and Scheme back in the University, so I knew that you can do better than Java. I think my first Scala code dates back to 2009, and since 2010 I'm doing Scala commercially.
How do you feel Scala benefits the work you do?
First of all, it's a very expressive. The main strength of Scala is the flexibility in defining abstractions. Using Scala's combination of Functional and Object-Oriented programming, you can define abstractions which hide much of the technical details, making the solution of the business problem readable, visible and understandable. All of that comes in a type-safe package, so much of the verification work that the pieces will actually work together is done for you by the compiler.
Secondly: I work mostly on the backend; there's a great ecosystem of libraries for writing distributed systems, which (as probably every area in programming) has a number of pitfalls and unique challenges. Toolkits such as Akka make it possible to work on another level of abstraction, focusing more on the business problem, and very often avoiding the traps set by concurrency and parallelism.
Finally, there's so much new development and new ideas in Scala. A lot of people are experimenting with the possibilities that Scala's feature give us, creating novel solutions to everyday problems. One recent development to mention is the ZIO library, providing a fresh perspective on the problem of writing effortful code, processing data concurrently.
Is there anything which you feel helped you learn and progress your career in terms of the community e.g. meet-ups, conferences, courses? Are there any resources you would recommend?
Definitely, I've been attending the Warsaw JUG meetups, the Confitura conference and later many others since I was at the university. But I think even more valuable than attending, is presenting at a meetup or conference yourself. First of all, once you know you are going to go on stage, you have to prepare very throoghly, and understand really well what you are talking about. It's a very good motivator to deepen your knowledge on a subject!
The same goes for blogs; blogs are great for consolidating and broadening what you know about a particular subject. But that's of course not the only reason. Secondly, you never know what will come out of a presentation or blog: you might get a new perspective on your subject or make a new connection, which might have both technical and business implications.
Finally, and maybe most importantly, it's great to know that all that effort that you've put into researching a topic might be useful for somebody else.
Hence I suppose I would recommend reading and listening, followed by writing and speaking.
What made you put into action the plans for Software Mill?
It's been a bit of a coincidence, as it often is in such situations. We've started the company with the help of EU funding, to develop a document management startup. Although we did our best, I think we were too technically oriented, instead of business oriented, so the startup failed, but the company remained as a consulting company, and I think that's a much better niche for us than startups.
While we learned a lot on how to develop products and run a business throughout these 10 years, I think we still are very oriented on the technical side - and as a technical consulting/software development company, this definitely helps.
What would you say has been the biggest challenge you have overcome in your career?
I'm not sure if it qualifies as such, and I'm not sure we've really overcome this challenge, but running a (slowly, but still) growing company, with the help of my co-founders, Tomek Szymański and Jan Zborowski, and remaining on the "technical" side of things definitely isn't easy. There's a lot of things to take care on the business level, and there's numerous example of people who started as engineers and finished as managers.
Our "everybody's a CEO" approach is definitely the most important building block here. Instead of the traditional managerial hierarchy, we try to build a bottoms-up structure where everybody has more power, but also more responsibility.
As I hope the company will grow bigger, so we'll see how this works out in the future!
What do you see for Scala in the future?
There was a lot of talk recently about the future of Scala; it has been painted in various colors, some bright, some more grim. However, I'm quite optimistic, as I've written on our blog. I'm really looking forward for the improved tooling: IDE support, compiler integration and compiler speeds.
Another exciting development is Scala 3. There's a couple of new features which will make our daily Scala life easier (union types, opaque types, implicit function types - it's all about types!), but also some yet unexplored areas, such as direct support for type classes and type class derivation. Type classes have emerged as one of the basic constructs used in Scala programming, and there's some issues (both functional and performance-wise) which have arisen and could use improvements. And let's not forget the new meta-programming in Scala 3; looks very promising!
All in all, I think it's a very good time to be a Scala programmer! :)
Keep up to date with Adam on his Twitter page here.