TulipeMoutarde.be

About

How to botch an interview

Written on December 23 2019.

This blog post was written a long time ago and may not reflect my current opinion or might be technically out of date. Read with a grain of salt.

tl;dr; You can use Rust as a high level scripting language with some more safety or you can know it much better and play with all it has to offer.

I've just spectacularly failed a technical interview for a Rust position. The funny thing is that a) it's the first time I apply/interview for a job b) It's the first time I talk about Rust with experienced Rust programmers.

Gentle Rust

Lately, I've used Rust as a replacement for Ruby, Python and Swift. I like the confidence it gives me when writing code. Going back to my code a few weeks/months later and not being afraid to modify it makes my life easier. To a lesser extend Typescript (and its awesome integration into VS Code) gives me similar feeling even though the potential to shoot yourself in the foot is still high and the whole Javascript ecosystem feels fragile and klunky.

I usually write single thread CLI tools or HTTP servers with a full featured framework. By doing so, I never had to really care about threading and concurrency. As long as I don't block the thread with IO operations I expect the code to be fast enough. Actually, speed has never been a goal. The correctness and the ability to change/refactor code without fear is what really convinced me to use Rust, performance is a byproduct.

More Involved Rust

When doing the interview, I was clear that the team was at a much more advanced stage. A lot of questions were about topics that I remember reading and understanding in the Rust book but never encounter in real life. Simple example: the Send/Sync marker traits: I read about them, they are not a advanced concepts, they are super useful when you deal with concurrency but yet, I never had to explicitly mark some of my structs with them.

We also briefly mentioned the async ecosystem, how it works and what do the available schedulers offer. This has been a hot topic in the Rust community this year. I've read about futures but have never been close enough to actually have precise answers.

That's where I should have prepared this interview and review the parts for which Rust is well known for but that I haven't used enough.1 Beware that those concepts are not specific to Rust but they can be remote when you've spent too much time in higher level languages.

The team is composed of top-notch Rust developers and I understand that they are on the other side of the fence: technically precise, with a good understanding of the inner working of the tech they use. That's usually what I strive for but I'm not there (yet?) with Rust.

Duality

That made me realize that Rust has two faces: usable for people coming from higher level programming language (like me!) while exposing everything needed to go down and master every aspect of what you're doing.

All in all, it has been a great experience, the people I interact with were nice and the process was quite smooth. I didn't expect interviews to be so much fun (yet stressful!).

All in all, it made me more curious about the fearless concurrency side of Rust. I can't wait to dive more into it.

1

I was so thrown off that I couln't even answer simple questions: what is a mut reference? (yeah, I know... 🙄) How do Kafka and RabbitMQ differ? what is backpressure?