How to Prepare for a Technical Interview

Some folks I know are preparing for their first technical interviews.
In this post, I'd like to share what I've learned about technical interviews
after several years in this field.

The way I approach technical interviews is a bit backward. It begins with a question: what is a
technical interview trying to prove? I've been on both sides of a few, and I'd argue it's the following:

  1. Can you solve programming problems?
  2. Can you communicate the solution and your opinions? (this is more important
    than what your solution and opinions are).
  3. Do you know and care about what's happening in technology?

Today I'll break down these three questions, and how I might suggest
showing a decision maker that the answer to each is 'yes'.

Can you solve programming problems?

You may be aware of a blog post titled 'Why The New Guy Can't Code'. I didn't write
that post, but I think it suggests a truth: lots of people who want to be
programmers struggle with basic programming problems.

This is doubly true in high-stakes situations, like an interview. It's
hard to be clever when sitting next to a person you barely know. I wish this weren't a part of the hiring
experience, but it is. Not every company has the ability to assign a take-home
project, and that practice has its own biases. So for the meantime, it's worth
trying to figure out how to handle solving a live problem.

My solution? Exercism.io.

Exercism is an open source project designed to help people get better at
algorithms. You sign up for an account, install a CLI, choose a language, pull
an exercise, solve it, and push it up to the site.

Some stop here, but I think that's just when things get interesting. When I
push a solution to Exercism, I like to browse other people's solutions. I look
for solutions that have many comments or likes. Reading two or three remarkable solutions will teach you something. At this point I often refactor my solution, building muscle memory as I write better and better code.

Whatever tool you choose, go get some deliberate practice writing algorithms.
You just have to do a lot of them. There are a couple dozen programming puzzles
you're likely to see during an interview. Someone who has tried many or
all of them would have an advantage.

Can you communicate?

Communication is critical at a consultancy like Hashrocket. But it's just as
important for any programmer. I feel that the technical differences between
one junior developer and another tend to iron out after couple of years; communication skills help you keep advancing after that.

The way I stay sharp as a communicator is whiteboarding, and a practice I share
with my mentees is simple: go to the whiteboard early and often. Go to the
whiteboard before you need to go to the whiteboard. Apart from the truth that a
picture is worth a thousand words, drawing your programming idea on a wall is a
great way to move forward when you don't know what to do.

Bigger picture, knowing how to draw a flow chart, what the symbol for a
database looks like (stack of pancakes), or how a nested React tree maps to a hasty drawing of a
webpage, helps us all share a visual language. Trying to draw a Redux state
update will show you the parts that you don't understand.

There are a lot of ways to practice communication, such as pair programming,
giving a lightning talking at a Meetup, or just talking. For me,
whiteboarding is a fantastic way to strengthen this skill. And often in an
interview, you're asked to whiteboard anyway. It's not scary if you do it
often.

Do you know what's happening in technology?

Stepping into the programming field, especially if you're a JavaScript
programmer, can feel like trying to jump on a log floating quickly down a river. There's
so much to know, and it seems like everybody else is so far ahead that
you'll never catch up. How can you catch up?

I advocate a passive approach: whatever watercooler you
frequent (Twitter, Medium, RSS, Reddit, email mailing lists, etc.), find the
aggregators. These are people who read everything– blog posts, release notes, conference announcements, Twitter fights– and distill it down into a human-sized product. I subscribe to weekly email newsletters for React,
JavaScript, Ruby, and Postgres. Each week, I scan the headlines and one or two
articles. You build up a picture of the scene pretty quickly.

I'm trying to prevent a blind spot, like
going into an Elixir interview and not knowing that Elixir 1.8 and 1.9 have
been released. Is that a dealbreaker in a technical interview? Probably not.
But why risk it? Companies that are a few years behind on their tech stack
still want to get to the latest stack eventually, and they want to believe you
can help get them there.

Conclusion

This isn't a comprehensive list; I'm sure there is a lot more you could do. Having a strong technical blog, a project you
are proud of, or some unique background, helps. A lot of these traits get
you into a technical interview in the first place. But once you're there, I
want to see that you can write code, talk to me, and are living somewhat in the
present day on the technology stack you want to get paid to use. To get
there, practice algorithms and communication, and read technical news.

I hope this helps somebody in their first or second round of technical interviews. Please
let me know on Twitter if there's something we've missed, or how you approach a
technical interview.

Also, if you’re looking to practice coding, chat with other devs and hiring companies, and connect with the pulse of the Ruby and React communities, come join us October 3-4 at Ancient City Ruby in Jax Beach! I hope to see you there.


Photo by Thought Catalog on Unsplash

Source: Hashrocket