With Silicon Valley’s second big tech boom, engineers have been in incredibly high demand by startups and tech giants alike. For those who have engineering backgrounds or are studying computer science, the world is your oyster right now.
That being said, companies aren’t just giving jobs away. Programmers still need to go through specialized interview processes—including the sometimes-dreaded technical interview.
Preparing for these can be confusing ordeals. Should you study specific technical projects or generally refresh on a lot of topics? Should you practice on a computer or with a friend?
As the third engineer at Pocket Gems, which has about 165 technical employees, I’ve conducted hundreds of phone and on-site interviews. During this time, I’ve learned a lot about how to properly prepare for one. Here are the tips you need to nail your next technical interview.
Focus on Fundamentals
Interviewers are mainly going to ask you questions about your fundamentals: data structures, algorithmic complexity analysis, class design, and the like. These will be questions both directly about fundamentals (e.g., use X to do Y) and questions for which you will use your fundamentals (more on that below).
Think of fundamentals as the tools in your toolbox. They’re going to stay the same no matter what awesome new technology comes out. With strong fundamentals, you’ll be better prepared to tackle open-ended problems—the kinds of problems that we and many other startups solve on a day-to-day basis. By focusing on fundamentals, interviewers can spend less time setting up the interview questions and more time seeing how you think.
For example, you may be asked something like: You’re given a binary tree and two nodes in the tree. Find the lowest common ancestor of the two given nodes in O(n) time.
Through this question, the interviewer is looking to see how well you can communicate your thought process and solution. How you think through the problem, organize your thoughts, and communicate your answer is often as important as your conclusion. We work in complex and ever-changing environments and need people who can both solve tough problems and effectively communicate them to their technical and non-technical teammates.
For this area of the interview, you should be comfortable discussing things like strings, arrays, basic syntax, data types, linked lists, trees, graphs, stacks, queues, and hash tables. Oh, and make sure you can answer FizzBuzz without batting an eye.
Be Prepared to Solve Things Different Ways
Each of your fundamentals has pros and cons and offers a unique solution for a particular type of problem. After interviewers ask you a question solely on your fundamentals, they’re likely going to see how you can use them in practice. This is achieved by asking open-ended questions that can be solved in a variety of ways.
A sample question here would be: You’re given an arithmetic equation as a string. This equation will have single digits 0-9, addition, subtraction, multiplication, and parentheses. Write a function that takes this equation and calculates the correct answer. Example inputs include “1+1” and “2*(1+9)-((2+5)-9”).
As before, the interviewer wants to see how you break down open-ended questions and your thought process in picking your solution. Most importantly, they want to see that you can effectively communicate complex problems.
No matter what the question or what solution you choose, make sure to think out loud! If you have different ways of solving the problem, talk through the options before deciding which to use. It helps the interviewer see and understand your thought process. Also, the interviewer may recommend one solution over the others because he or she knows that the others may have certain pitfalls or may be outside of the scope of the interview.
Don’t be afraid to ask questions if something is unclear or there’s not a lot of detail provided. These show you’re thinking, too—and give the interviewer a sense of how you would work with others. Make sure you’re asking clarifying questions to fully understand the question and that you’re not enlarging the scope of the problem (e.g., What are some example inputs? Do I have to worry about dividing by 0? Do I have to worry about daylight savings?)
Finally, make sure you verbally run through a few test cases before you say you’re finished. This allows you to both check the code and show the interviewer that you’re checking your code. As easy as it would make job interviews, we unfortunately can’t read your mind.
So, as you’re preparing, practice solving questions with different tools from your toolbox so that you develop an intuition about it. Know when to use each of your tools so that you won’t get tripped up during the interview. And make sure you practice fully describing your thought process—this can be the hardest part for coders who are used to working in isolation.
Practice, Practice, Practice
The more you practice, the better prepared you’ll be for the technical coding interview. This is true for most things but especially relevant to technical interviews—they really require you to warm up your brain.
Here are a few tips to help you get the most out of your practice time:
- Make sure you simulate the interview environment. Give yourself a time limit on problems. If you’re going to be doing a phone interview, practice on both Stypi and Google Docs. (I know for myself, not having autocomplete and syntax highlighting has tripped me up in phone interviews.) If you’re going to be doing an interview in person, practice doing problems on paper or on a whiteboard.
- Have a non-technical friend ask you the interview questions, and walk him or her through your answers. If you can explain it to him or her, I’m sure you can explain it to your technical interviewer.
- Don’t feel like you’re cheating if you use some of the prep tools that are out there. They often offer great insight and practice questions. My favorites are websites like TopCoder and the Head First books. Some other books that talk more about the interview process are Programming Interviews Exposed and Cracking the Code Interview.
Technical coding interviews can seem pretty daunting, but with the right types of focused practice, you’ll be ready to ace them. Remember to focus on your bread and butter, fundamentals, and practice a lot. Follow the tips above, and you’ll be prepared for your next technical coding interview.
Want more info? I recently presented on this subject at the UC Berkeley Engineering/Tech Career Conference. Check out my slides from the talk below for more thoughts and resources!