Russ Olsen has been building software for the last 35 years, everything from engineering document management systems to database query engines and a self-described generalist. Russ has been on a career-long quest to find a better programming language and was an early adopter of Clojure, Ruby, Java and Python. Russ is the author of Getting Clojure as well as two books on Ruby, Design Patterns in Ruby and Eloquent Ruby. He’s also Vice President at software builders, Cognitect.
Russ is a constant if sometimes reluctant conference speaker. He spoke at length at Codemotion Milan 2019 about the impact of the Apollo Moon landing on himself as a child and on future technological innovation. We spoke at length, you can take a look at the video to enjoy our conversation in full.
Do people choose to be generalist developers or specialise?
Russ suggests that, “People are born generalists or born specialists and that that’s fine. The world needs both. I mean, that’s just my opinion, but I believe that it’s something that’s wired into all of us do. I want to dive deeply into this one thing and learn everything in the world about it, or in my case, am I easily bored? Can learn something for a little while, and then when I’m a little bored with it, and I want to go on to the next thing can I do so? Russ thinks this is how he became a generalist and notes,
“That sounds like a disadvantage. It’s really not because if you keep going on to the next thing, then you have this kind of horizontal view of how things work, as opposed to a vertical or a narrow way it works.
So what are the advantages of being a generalist?
While there are plenty of cliches about the ability to see the big picture, Russ suggests,
“Really, the advantage of having a generalist on your team is that there will be all of these people who have specialities and essentially are working in silos, right? And that’s fine. You need people who are good at whatever they’re doing. But you also need people e who can see the next silo, or maybe two silos over because that’s where the big mistakes happen is you have maybe two people or two groups working side by side, but they don’t really understand what the other one is doing. And so the advantage of a generalist is not some magical ‘I see the big picture’. It’s, I see what the people down the hall are doing and how that does not work, together with what we’re doing.”
What non-technical skills make a good developer?
Russ asserts that people skills are the most critical skills:
“You need to train yourself to see the world from the other person’s point of view. And, and that’s a useful skill. I think another skill that’s really important is being able to write and communicate clearly, to write and speak clearly. And again, I think one of the problems is that if your main interest is technology, you will maybe go through the university or just go through life and people will tell you, yeah, you people are not good at communicating or you’re not a people person. And that it’s a little bit of a stereotype.
Some people are clearly born with a talent for communication or can see the world from the perspective of someone else is something they can be born with, but they are also learned skills, and so don’t if you have trouble writing or communicating or maybe just kind of coping with people don’t imagine that that is something you’re stuck with.
You learnt the programme, you learned HTML and SQL, you can learn to write English or Italian or German or whatever. If you can learn to communicate effectively with people, the really good communicators maybe started with an advantage. But then they spent two years learning how to do it.”
Russ has a passion for building musical instruments from unconventional objects. He suggests it’s wonderful for honing your skills in software development because you look at a box maybe that cigars came in, and maybe you see a box the cigars came in, but maybe you see the body of the guitar. “So you see things for what you can use them for, and not just for what they were meant for. And if that’s not a skill that you need in software, I don’t know what is! That is the essence of software: looking at something and saying, maybe I can do something different with that.”
What technology would you recommend to developers who want to approach big data analysis?
Russ shares, “I say that jokingly, but I think that you need a general-purpose programming language in a general-purpose kind of data store. So those tend to be my choices. I think obviously, Python is kind of the overwhelming favourite in the data world. But again, I would go back to being a generalist, which is if you are a data person and you think yourselves as self as a data person, then you should go learn some software engineering. Because in experiences with data people, the data side of what they do is like magic. And I can’t believe it. And it just seems like I’m living in the future. And the software engineering side of what they do frequently strikes me as I’m living in the 1990s. Because, you know, most data people, they’re not software engineers, and they haven’t grown up with these practices. And in particular, maybe they haven’t been at it long enough to really get bitten by some of the software engineering sorts of things. So that’s the one side of it. I think, if you’re a software engineer, well, you need to go learn the underpinnings the real sort of theoretical underpinnings of how people deal with data.
Russ believes that Data science is not a skillset or knowledge area that can be faked. “I think you really have to understand what you’re doing to be able to do an effective job of it.”