I graduated with an industrial engineering degree from Northwestern in 2013. Today, I work as a robotics software engineer programming Roombas (we’re hiring btw – PM if you’re interested!).
In software engineering (unlike consulting/finance where you have to look the part & have attended a top school), if you can code, you can get hired. Having gone through it recently as a non-CS major, I wanted to share my journey towards cracking the dreaded coding interview.
But first, here’s my career progression to date for some background:
- 2013 – 2015: ITLP (IT Leadership Program; rebranded to DTLP now with a more technical bent) at GE
This was a rotational program designed towards a career path as an IT strategy leader (many P&L CIOs at GE came from the program) where I worked on various 6-month projects in GE’s Oil & Gas unit. It was a mix of project management & business analysis with exposures to cybersecurity, digital marketing, acquisition/integration, data analytics & more. The program & the leadership training were world-class, but I didn’t feel technically challenged.
- 2015 – 2017: Firmware engineer at GE
After ITLP, I wanted to get away from project management & instead, code for a living. I loved building software & getting to utilize math/engineering/logic in the process. While I didn’t have a CS degree or professional coding experience, I leveraged my ITLP performance reviews & side projects (websites & basic mobile apps) to land a firmware engineer role to work on digital valve positioners (PID control). Fortunately for me, the interview process was mostly non-technical.
- 2017 – present: Robotics software engineer at iRobot
While I loved my team & the role at GE, the long commute was wearing on me. I interviewed with ~5 companies, all of which had some form of coding interviews.
While there are 2 components to passing the coding interview (technical & mental), I’ll cover only the technical component in this post & save the mental aspects (just as important!) for the future.
0. Learn Python (1 week)
If you’re a novice programmer & can’t call yourself at least an intermediate user of a programming language (meaning you’ve programmed 10K+ lines of code in that language), choose Python.
- You’re interviewing for embedded software/firmware engineer roles (C/C++).
- You’re on a time-crunch (less than 3 months to land a job), in which case, just go with your best language.
Spend a couple days learning the basic Python syntax & delve into Algorithms (see below). You’ll learn more Python along the way so don’t worry about knowing all the intricacies of the language yet.
1. Watch/read Sedgewick’s Algorithms (~2 months)
- watch the videos for the chapter/concept first (trust me on this one; most algorithms & data structures are often too complicated to explain via pictures or text)
- read the corresponding chapter in the book for reinforcement
- rewatch the videos as necessary
Take your time with each concept. Algorithms & data structures take time to truly grasp. Expose your brain to them repeatedly over extended periods & eventually, they’ll click. For example, if you’re struggling with understanding priority queues, just know that they exist, move onto the next topic & come back after a good night’s sleep.
Remember, the algorithms & data structures you’re learning took some really smart people months and/or years to come up with them; you are not supposed to fully understand them after studying it for mere 10 minutes! So trust the process & keep at it; you’ll get there.
2. Cracking the Coding Interview (~3 months)
I read CTCI cover to cover, but didn’t code up every question in it; instead, over the course of ~3 months, I:
- coded up the first few questions in each chapter on an IDE
- attempted remaining questions on paper in pictures/pseudocode & compared them against the solutions
- read the solutions & moved on for the most difficult questions (usually the last few questions in each chapter); there’s diminishing return on these since they’re less likely to be asked (unless you’re going for FANG)
CTCI solutions are in Java, but I wouldn’t get hung up on trying to understand every Java syntax/OOP concepts (unless you’re going to be interviewing in Java). I coded everything in C (I was targeting embedded software engineer roles).
For reference, by the time I started interviews, I had at least attempted every question in CTCI twice.
3. Leetcode (~2 months)
I love Leetcode. It’s so much fun. But don’t jump into it until you’ve gone through the questions in CTCI!
Leetcode is such a great emulator of real interviews that (FYI, Leetcode/similar platforms are used by companies for screening) I believe treating it as a mock interview gives you the best ROI of your time.
Once on Leetcode, don’t bother timing yourself at first. Start with the “easy”s (note: difficulty ratings aren’t absolute; some “medium”s are really hard, some “hard”s are not) & move onto “medium”s when you feel ready. I wouldn’t bother with many “hard”s (unless you’re gunning for FANG/Snap/Palantir/AirBnB).
Complete ~30 “easy”s & ~20 “medium”s, eventually timing yourself to be able to complete each question anywhere from 15 to 20 minutes. Fyi, I spent ~2 months on Leetcode & solved ~40 questions & read solutions for the ones I didn’t solve.
4. Programming Interviews Exposed (1 month)
If you’re here, you’re actually ready to start interviewing. But if you have some time left over & can’t stand more of Leetcode, pick up a copy of PIE.
By now, PIE should be light reading, but this book has very popular questions & amazing advice on the mental aspects of the interview process. Once you’re done with PIE, head on over to LinkedIn (how I got all my interviews via LinkedIn)!
What kept me going
The best advice I got during my 8-month interview prep was from a reddit post (/r/cscareerquestions) that said:
Every person has a number “X”, where:
- X = hours of work required to become competent enough to get a software engineering offer.
So if you’re a CS grad, your X may be 50. Mine might be 500, but everyone’s X is finite & reasonable! Keep this in mind during your studies — the more hours you put in, smaller your X gets, & you’ll be that much closer to landing the inevitable software engineering offer.
Software engineering is one of the truest meritocracies; given the high demand for software engineers these days, you WILL get a software engineering offer if you fully stick to this program. So trust the process & good luck!