print "Hello, World!: Notes on the Technical Interview\n"
It's been a little while since I last posted but that's because I have been dedicating nearly 100% of my time to job hunting since finishing Hacker School in mid December. After a seemingly never-ending and rather stressful job hunt, I am proud to say that I will be starting a new position as a software engineer with a company called Apportable! Apportable is awesome -- they have developed a platform that allows iOS apps to run on Android. Their core mission is all about supporting iOS developers by making the process of converting their apps as seamless and easy as possible. I love their sense of community spirit. Plus, seeing as my interview involved some really awesome kernel hacking, it only makes sense that I would totally fall in love with them.
Now that I have essentially found my dream job, I wanted to take some time to reflect on the process. I'll start off by stating the obvious:
Interviewing for programming positions is hard
Interviewing is exhausting
Job hunting sucks until the very moment it becomes rewarding. And then the relief comes.
Knowing all of that, I think what really helped me get through it was attempting to turn what normally is an exhausting and stressful process into something really fun and enjoyable. I'll get into how I did that a little later, but first:
What is the process of interviewing for a tech job like?
The interviewing process tends to be pretty standard across most tech companies. What normally happens is an exchange between you and The Company:
You send in your resume and/or fill out the application for the job
A recruiter from The Company emails you to schedule a time to talk
You and The Company (either the recruiter or a hiring manager or an engineer) talk on the phone about the position, what you are looking for, your background, etc. (Note: you may get asked a short technical question that is meant to just demonstrate your understanding of basic coding concepts)
Hooray, The Company likes you! They now set up a time for you to skype/phone chat with an engineer where you will be asked to solve at least one coding problem. This is meant to demonstrate your coding proficiency. (Note: some companies do 2 skype/phone interviews, some just do one.)
Hooray again! The Company thinks you did great and they now want to bring you into the office. They schedule a time to bring you in. (Note: They also will fly you out and put you up in a hotel if you are from out of town.)
Once you're in the office, you will have 4-6 1-hour long interviews scheduled for the day. At least half of those interviews will involve coding in front of the interviewer, either on a whiteboard or on a computer. The other interviews are usually with managers and they spend the time asking you more about your background and the projects you've worked on. They see how well you "fit" the culture of the company.
After that incredibly long day, The Company gives you either a yes or a no. The response time varies and could range from the very end of the in-office interview to several days later.
It's a pretty long process. So you can see how doing this over and over again, and often with multiple companies in parallel, can get to be pretty draining fairly quickly.
Making the scary "Tech Interview" fun
How do you make this long, drawn out, kind of scary process fun (or at least a little less scary)?! Well, the easiest answer is attitude. I like to think of my coding interviews not as a test but as a conversation between me and the interviewer. The context of the conversation is the problem I'm trying to solve, and the interviewer and I discuss different approaches that can be taken to solve it. Then I write out an approach on the whiteboard and we have a discussion about that approach. Thinking of it that way tends to make it a lot less nerve-wracking for me and also allows me to forgive myself more easily if I make a mistake.
Here's a list of some things I do or try to keep in mind while I'm coding at the whiteboard in front of an interviewer:
I smile a lot. Smiling relaxes my face muscles and makes me feel less tense. It also makes it much easier to keep things light and make the interviewer feel more at ease with me. Sometimes the interviewer is just as nervous about having to interview someone as you are about being interviewed so smiling helps both people feel more comfortable.
I think out loud. Any processing that is going on in my head, I just spit it out as I think it. I've found that most interviewers I've encountered find it useful to know what's going on in my head instead of having me just stand at the board in silence indefinitely. That way they can interrupt me if it seems I'm going down a rabbit hole and redirect me towards the solution. It also helps keep the interviewer engaged.
I draw my ideas. I'm a really visual person, so I'll end up sketching out my ideas on the board while I'm trying to think through the problem they've asked me. As I sketch it out, I'll talk through my understanding of the problem and how I'm thinking through the solution. If I'm wrong, the interviewer can help me understand where I got off track and then clarify what I misunderstood.
I ask for feedback. If I'm unsure about something, I'll ask the interviewer to either further clarify or I'll ask if I'm understanding the problem correctly. This is especially useful if you have an interviewer that doesn't seem to be engaging with you while you solve the problem. While some may disagree, I think interviews are meant to be interactive. Interviews are bi-directional: you are checking them out just as much as they are checking you out. Based on your interaction, can you see yourself potentially working with that person every day? I have found that observing how your interviewer approaches your interview can help give you a sense of how they may interact with you as a coworker.
I don't chastise myself if I make a mistake. This one is key. It's very easy for me to fixate on getting something wrong, even if the mistake is a minor one. Fixating on a mistake while at the board only distracts me and makes it harder to focus on the task at hand. If the interviewer gives me feedback indicating that I got something wrong, I immediately tell them they were right and thank them for the correction. Acknowledging the mistake and even just the act of talking itself helps me release some of the anxiety. I then forgive myself in the moment and forget the mistake altogether so that I can redirect my focus back to solving the problem. I find that this really helps me stay on track and remain calm throughout the interview.
These are the actions I recall taking in the moment while interviewing. Doing these things doesn't make the process any less tiring, but it can certainly help turn a super daunting day into a really fun and engaging day. I had really awesome conversations with engineers from a bunch of companies and got to solve some interesting problems. I think companies also like seeing an interviewee with a positive attitude because it makes the process more fun for them too and keeps the atmosphere light.
Good luck to those currently job hunting and, per usual, email [email protected] if you have any questions!