I studied computer science at Stanford. You probably would’ve expected me to be swimming in job offers. In my sophomore year and first-half of junior year, I got a lot of interviews, and I failed every single one of them. And not in a, “this person is qualified, but other people are better qualified” type of way. It was more like a, “Why did we ever bother interviewing this person?”
For example, I would stumble on simple questions like generating all permutations of a set by writing a recursive program that wouldn’t even terminate (even though it was something you would learn how to code by the second intro to CS class).
About halfway through the interviews, the interviewer would seemingly give up in frustration. A few days later, I would receive the dreaded, “Thank you for your interest” email.
“Maybe this just wasn’t meant for me,” I would tell myself. I was a straight A student, but that would only get me to the interview stage, where I would inevitably fail in a spectacular fashion. All of my friends seemed to be killing it, getting internships at the standard Google/Facebook/hot silicon valley startup. Maybe people were “handing out” jobs, but they certainly weren’t handing it out to me.
By the time I reached the end of my junior year, there wasn’t any more time for me to complain about how the technical interview was unfair or how I was behind because I never did competitive programming. I started working through CTCI (Cracking the Coding Interview) and EPI (Elements of Programming Interviews). In the beginning, I would always read a question, then inevitably flip to the answer because I didn’t know how to solve it. Eventually, I could do the easy problems, then the medium problems, and so on.
Finally, this came in the mail.
Over time, I’ve learned that interviewing is a skill. If you treat interviewing like a skill, and not an inherent capability, then you have the agency to improve enough to get your dream tech job. It’s easy to lament the state of software engineering interviews, but it’s harder to accept it and create a plan for success. But would you rather complain and feel good about yourself or have a job?
- Interviewing is a skill that you can learn
- Set up a system for studying for interviews (Listed below)
My study system
- Every day, do at least one problem from a book/website listed below. As you get closer to the interview date (e.g. 2 weeks away), I would recommend doing 3-5 interview questions a day.
- Get a whiteboard (or a pen and paper). Make sure to talk out loud or write down what you’re saying (it’s not enough to work through a problem in your head)
- Tips for working through a practice problem
- Time yourself to test if you can really solve a problem in an interview setting (I usually give myself 30 minutes)
- As you work through a problem, think of questions you would ask to clarify the problem statement/constraints
- Sketch a general approach for solving the problem before writing code.
- Once you write the code, think of test cases and run those cases through your program
- Finally, compare your program against the reference solution and see what’s different
- Books used
- Cracking the Coding Interview
- Elements of Programming Interviews
- Websites used
Other useful study resources