Programming Interview Resources
This a chapter of the book Get a Better Developer Job. It’s best to start at the beginning.
Now that you have updated your resume and LinkedIn profile, it’s on to phase 2: prepping for interviews.
I used to think I was good at interviews, but I wasn’t. You might think you’re bad, but you’re not. Truth is, I did well in interviews because I prepared for them, and people who’ve done poorly have not. It is critical to realize this and not identify as being inherently good or bad. (I’ll get into this further at the end.)
Anyone can prepare and gain an edge over those who don’t. I don’t want to spook you, but we’ve all heard of people who aced the interview but failed at the job. That’s because interviewing is a separate skill that requires its own practice.
It’s takes time to develop the skill, so you want to start now and develop a regular habit of practice. Depending on the gap between where you are and where you want to be, you may even want to take a college course or two. You definitely need to spend time practicing answering questions. I’ve compiled a list of books, websites, courses, and videos – most of them free – to help you on your journey:
Most of the books and websites list practice interview questions and answers. I will keep reiterating this point: in between reading the question and the answer, you must attempt to solve it on your own! Use paper and pencil to simulate a white board. At most, use a text editor and compiler. You’ll give yourself a false sense of confidence if you read the questions and answers at the same time and think, “Oh, that’s easy!” Then you’ll choke on the white board portion of the interview. There’s no crying in baseball, and there’s no Ctrl-Space on the white board.
When I was running tech interview meetups, that was the biggest failure mode. People who showed up without having done the practice, just to watch others. If that alleviates fear and kickstarts a habit of practice, great. However, most of the time they just trick themselves into believing they are learning by watching. You only learn by doing. In contrast, the regular contributors got jobs at good companies.
However, I have some great news. After limiting my practice to Emacs and the Groovy interpreter, solving only two problems over a week, I found I coded much faster in the IDE. By pushing myself, I put more of the language and libraries into my brain’s RAM, which reduced cognitive load during my normal coding sessions. You will become a much more productive coder by practicing in this manner, plus kick ass in your interview. It feels good.
Cracking the Coding Interview: 189 Programming Questions and Solutions
This is the most popular guide and what we used for SoCal Tech Interview. It mostly assumes you’ve learned the material elsewhere; there is little instruction. Java solutions are provided, however there is a GitHub project that contains solutions in a variety of languages.
Data Structures and Algorithms Made Easy: Data Structure and Algorithmic Puzzles (C/C++)
Data Structures and Algorithms Made Easy in Java: Data Structure and Algorithmic Puzzles
I haven’t read these books, but they are what I recommend to anyone who did not get a CS degree. Unlike most answer/solution books, this one actually tries to teach the material you may have never learned. The rest assume you’re trying to remember what you forgot. You may even want to pick this up if it’s been a very long time since those fundamental CS courses.
Elements of Programming Interviews: The Insiders’ Guide
Programming Interviews Exposed: Secrets to Landing Your Next Job
Solutions in Java, C, C++, and C#.
OCP Oracle Certified Professional Java SE 17 Developer Study Guide
OK, this wasn’t written for interviewees, but those taking the Java certification exam. Such exams got a bad rap back in the dot com boom days, when you’d read a book and get certified. They’ve gotten way harder now, and a friend who’s studying for it said that after reading this he’s not only ready for the certification exam, but any Java technical interview. It gets deep, yo, and Kathy Sierra is one of the best damn tech writers in the biz.
Big-O Cheat Sheet covers time and (where relevant) space complexity many different algorithms.
Interviewing.io is like chat roulette for mock interviews, minus the perverts. It’s anonymous and free.
Pramp is another site to practice live (face to face) coding interviews. You are both interviewed and must interview others.
Glass Door isn’t just company reviews, it also covers interview questions for that company.
Career Cup is from the Cracking the Coding Interview author and it allows users to submit questions they’ve been asked. Here are their questions sorted by votes – notice they show which companies they are from.
The two above are great for researching the interview processes and questions of the companies you’re applying to. The following sites offer questions in a code/test environment. They’re mostly based on a business model of testing developers for customers. Whether that works remains to be seen. One developer told me he Googled the answers and got a perfect score (but not the job). I see them being used more, either by companies that don’t have a strong interview process (perhaps new to hiring developers) or those with tons of applicants and want an easy way to weed some out. The bottom line is that they are a great resource for practicing coding questions, and since you may be asked to use them by a potential employer, getting familiar with them will give you an advantage.
HackerRank seems to fall between Codility (interview questions) and Topcoder (code challenges/ranking). Supports the most languages by far, including my favorite (Groovy) and covers a range of topics.
Codility is a programmer testing service like HackerRank. Their section for programmers (which is well hidden for some reason) includes lessons on topics like time/space complexity (Big O). It supports multiple languages, but not as many as HackerRank.
Project Euler has a large set of practice programming problems and solutions. As you might guess from the name, they are math oriented.
Note: Project Euler problems now appear on HackerRank, giving you an environment in which to solve them.
Topcoder has been around for a long time. It seeks to promote coding as a sport with cash prizes, although it feels a bit like 99 Designs meets Elance. Doing well here might land you a job on its own. But with the increased time commitment, I question whether freelancing or contributing to an open source project would be better use of your time.
After going through practice problems, I found I needed to brush up on some core concepts I’d learned a long time ago. Fortunately, there are several courses on core CS (plus a ton of other topics – don’t get distracted!) for free.
Note that courses have reviews/ratings. BTW, when people say to me, “I think I want to be a professional programmer,” I direct them to Harvard Extension’s Intro to Computer Science. It’s perhaps the broadest introduction to the topic of any intro course and will give you an idea of what the field has to offer, in addition to determining if you can hack it.
Some of their courses are posted elsewhere, but this collects them all. Make sure you’re taking the most recent one and have the prerequisites.
Hacking a Google Interview was a short MIT course on passing Google interviews. If the MIT folks are concerned about getting an edge, it validates the need for prep. As I mentioned in the previous chapter, MIT has a much higher acceptance rate than Google.
Like Coursera and edX, tons of free courses.
This is a series of videos on YouTube that goes over implementing various fundamental algorithms in Java. Great overview, including Big O notation.
OK, silly intro video, but the rest of them are narrated by the author and he covers a lot of interview questions/algorithms, such as permutation, heap sort, etc.
Go through these resources, pick one that looks good, and solve one practice problem. Go ahead, start with an easy one. Code up a basic solution on paper, then optimize it, then read the author’s solution and see how well you did. I bet you do great.