How to botch an interview
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.
Written on December 23, 2019.
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.
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:
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
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.
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.
I was so thrown off that I couln’t even answer simple questions: what is a
mutreference? (yeah, I know… 🙄) How do Kafka and RabbitMQ differ? what is backpressure? ↩︎