Scala Developer Hamish Dickson has been passionate about programming since his first job making financial software where he began to use languages such as Scala and Java and he is now a confident Scala Developer at Drivetribe. In this exclusive interview, Hamish tells us about his experiences, favourite conferences and more. Have a read and enjoy!
Would you love to tell the community about your experiences? Take part in a Signify Q&A and help others learn from your knowledge, email us at email@example.com
Where did you grow up? What’s your background?
My parents worked for Shell when I was young so I got to live in lots of countries growing up, we moved somewhere new probably every year. My mother is from New Zealand and I've spent large amounts of time there too. I came to London for university and have basically been living/studying/working here ever since.
My background is in theoretical physics - aside from crazy compulsory C++ numerical computing courses in 1st/2nd year of university I didn't do any coding, everything was pencil and paper
Eventually, I pretty much talked my way into a programming job at a company making financial software. I ended up working there for about 7 years and learnt loads. While there I used a few different languages, from Scala and Java to a crazy language by IBM called RPG which no one should ever use ever.
When did you first become interested in Functional Programming?
For a long time I was working with imperative languages and they made me very uncomfortable, but I couldn't articulate exactly why. I think looking back to it, nothing was principled, it just seemed like the language features we had and the way we coded (design patterns etc) were totally arbitrary and actually inconsistent.
Around maybe 5 or 6 years ago several things all happened at once - a colleague shared one of Paul Graham's classic blog posts about lisp (http://paulgraham.com/avg.html), I also stumbled across Learn You a Haskell for Great Good (http://learnyouahaskell.com/) basically read it cover to cover, also around that time I started using Scala at work. FP fixed that "inconsistency" issue I had and really it's the first time I was comfortable doing programming.
What’s your favourite functional language?
Probably either Haskell or Scala.
Haskell is very clear and principled. I don't think I've ever seen a better thought through language.
I've worked with Scala for a while now, it's type checker is incredibly powerful and I'm constantly amazed at what you can do with it. The other nice thing about Scala from a practical standpoint is it's on the JVM, so you get all the bindings for things like Kafka - in something like Haskell you'd probably have to write those yourself.
How do you stay up to date on all things functional and new technologies?
Most of my day to day news comes from Twitter, it's used a lot in the tech community and there is always something new and interesting going on. I also happen to work with a good group of people who always up to date on everything.
Conference season is probably when I do most of my learning - the fact most conferences release videos of talks is really is fantastic.
What is your current job title?
Officially I'm a Scala Engineer at DriveTribe. I say "officially" because along with Scala I do a lot of machine learning in my day to day work, which means (gasp!) Python.
DriveTribe is a startup set up by Jeremy Clarkson, Richard Hammond and James May, you can think of it a bit like "Facebook for cars" where we have communities of people talking about everything from Formula 1 to cars they've spotted on the street.
We have a pretty unusual CQRS/event streaming architecture here. It's very interesting and along with the team was a big draw factor for me joining DriveTribe (our CTO, Aris wrote a nice blog post about it here https://data-artisans.com/blog/drivetribe-cqrs-apache-flink)
What would be your favourite part of the role?
I've never worked anywhere where developers have so much freedom and responsibility. If you think something is important or interesting then you can go ahead and work on it. We're a very small team (just 4 on the backend), so the impact you can have just from stumbling across a new idea is huge.
At the same time we're involved at every stage of the development process, from initial ideas to pushing code to prod.
Do you contribute to the community? If yes, how?
I try to yes, mainly through PRs on open source projects. I've been working on something big for work recently which has taken up all my time so I've been a bit slack over the last 6months/year. I'm planning to get back into this soon. I would also like to start doing more talks.
Have you been to any conferences? What is your favourite? Or if not which one would you love to go to?
Yeah, I've been to a few conferences.
My favourite ones are the technology independent ones - FP conferences for example are great, because you learn a lot about what people in other languages are doing and thinking about. Lambdale this year was great for that, it's kind of geared up for you to meet new people.
Do you have a favourite speaker?
My favourite speakers are the ones who somehow take one really complicated idea and make it simple enough that you're left thinking about it for days. Weirdly that often means there's little or no code in their slides - I saw Martin Kleppmann do this at QCON earlier in the year. I've seen Philip Wadler do it too.
I also really like Rob Norris' talks. They are so well thought through and he really understands how to teach, what people know and what they don't know.
What advice would you give to someone looking to start a career in software engineering?
Explore everything, question everything.
Software engineering seems very dogmatic and you're often told "this is how you software", but in reality software engineering is too young for us to have any idea what we're doing. So look about, if you're looking at some bit of code and it seems too complex for what it's trying to do, maybe it is - maybe with a bit of work you can find a new approach which is better.
Related to this, it's ok to be wrong.