Nicolas Rinaudo is the CEO of Besedo. The company offers content moderation tools and services, to online marketplaces, by using AI, automated filters and manual moderation. He is a well-known figure in the Scala community, having spoken at many conferences and the author of his own blog providing type classes. He describes himself as a Scala and FP enthusiast. We asked him some questions to learn a bit more about his thoughts.
Tell us about your background what was it that sparked your interest in engineering?
Pure chance. I hated studying, and when I had to chose what to go for, took the path of least resistance - math, because that's where my grades were the least horrific. Not good by any stretch of the imagination, mind, just... not as bad as the rest.
Turns out this particular curriculum had a compulsory computer sciences bit, and the teacher had me write some trivial bit of code that played the Imperial March on the machine's old speaker. I then promptly ditched the math to focus on getting computers to do neat things that amused me, it sounded like far less work.
What was it that made you take the step into using Scala as a functional programming language?
Initially, intense boredom with Java. Doing the same thing, year in and year out, applying the same patterns, the same solutions to slightly different problems... you have to bear in mind that I had about 15 years worth of Java experience at this point, and I feel I only actually learned things during the first 5 or 6 - the rest was just repetitions of these first few years with minor tweaks.
So I started looking around for other languages to bring the fun back, with a focus on the JVM - I was bored with Java, but still felt the JVM was an impressive piece of engineering and my expertise with it wasn't something to casually toss away.
A friend of mine, hearing of this, told me that it wasn't worth checking Scala out - it was probably everything I wanted, but far too complicated for me to have any chance of understanding it.
I can't think of a better way to motivate me, and a few years later, here were are.
How do you feel Scala benefits the work you do?
It doesn't actually benefit *all* the work I do :)
Some of my tasks involve data analysis or other throwaway projects where I want to be able to go fast and be approximate - a runtime crash is not an issue, but spending time to get types to align just right for an intuition that doesn't happen to pan out is.
Most of the time though, I write code that needs to run correctly and be easily maintainable. Scala's type system helps with the former, and FP concepts such as referential transparency with the later.
One could argue that Scala is not necessarily the best when it comes to these points - Haskell and OCaml come to mind, and I do love the ML syntax, but at least in my case, the JVM is an important advantage.
Java, for all its flaws, does provide us with a wealth of libraries and it's rare to need support for whatever obscure format and not find an existing implementation.
Is there anything that you feel helped you learn or progress your career, in terms of the community e.g. meet-ups, conferences, courses?
Meetups, definitely. Attending them has all the obvious benefits - hearing about new things, networking, getting new insights into something you thought you were familiar with...
But, at least in my case, preparing talks for meetups is where the real value is. Knowing and understanding something well enough to talk about it in a room full of strangers is *hard*. Not the talking part - that's not easy, but it's mostly a question of how much you had to drink to calm your nerves before you get on stage. The hard part is understanding your subject well enough that you can make other people feel like they get it. Preparing answers to all the questions you really hope won't be asked, but just *know* will actually pop up.
Every talk I prepared has increased my familiarity with the language, and my skills in programming in general, quite drastically.
Are there any resources you would recommend?
That's a tough question - I think my answer is going to sound a bit silly, but GitHub. Read code from OSS projects you have dependencies on. Find programmers whose code you enjoy, and read some more. I've picked up a lot of knowledge reading code written by people far more talented than I am.
The best bit is that a lot of them are on Twitter or Gitter and will respond quite positively to being asked questions about their code.
What would you say has been the biggest challenge you have overcome in your career?
Burning out. At multiple times in my career, I've burned out on programming - too much of doing the same thing with technologies I didn't enjoy or didn't feel were right for the job at hand, and losing sight of the fun and creative part of it all.
Overcoming that has always involved changing something drastic in my work - more often than not leaving the company, I was with at the time - which can be really hard to do, especially when you suspect you might be the source of the problem.
Is there any advice you would give to someone starting a career in engineering?
It's hard to answer that question without sounding trite...
Learning is extremely important, and it helps if you're passionate about it. But avoid companies that expect you to do that on your own time - it's absolutely fine to learn on your own time! but it shouldn't be expected of you. The best environments to grow in are the ones that encourage you to learn, experiment, and fail, often, without judgment.
Failures are something that *will* happen. You'll crash production - god knows I have. But that's what experience is - it's easier and faster to find working solutions to a problem when you've already tried so many that failed and you don't have to waste time investigating.
And, critically, try to have fun. Nothing will burn you out faster than boredom. If what you're doing is not working out, try different approaches - if you're used to solitary programming, try pairing for a bit, or vice versa. Switch from an IDE to a regular text editor (by which I mean Emacs, obviously). Learn a dynamic language just for the hell of it. This type of thing.
How has the Scala community helped you progress?
Mostly, because the community is incredibly generous with its time and knowledge. It's very rare to struggle with a subject and not find someone who can help you with it, or a good blog post or article on the subject.
What do you see for Scala in the future?
Honestly, don't know - with Scala 3 around the corner, anything could happen. The main risk is that it breaks the community in half, businesses shy away from the whole thing and Scala starts becoming less and less relevant.
What I think will happen, however, is that Scala 3, while not quite as painless a migration as we're being lead to believe, will end up a success, and make Scala an exciting language both for academia and the industry. I'm really rather looking forward to that, and the opportunities for learning it will afford us all.