I have always hated the technical interview process, mostly because I don’t enjoy practicing Leetcode problems.
It is one of those dumb things in college that if you don’t do it, others will get ahead of you. If you want to secure those “prestigious internships”, you have to grind Leetcode.
Convincing myself to grind Leetcode was hard. It was hard to accept that life is unfair. Why do I need to do something I don’t like to get something I want? In one of my technical interviews during my freshman year, as an icebreaker, the interviewer asked if I like algorithms. I told him to his face that I hated algorithms. I also made sure to mention that I believed all technical interviews were a waste of time. I didn’t get the job. Not too surprising!
Today, I am a fourth-year student about to graduate. Not too long ago, I was on the phone chatting with a younger friend who was worried about his upcoming internship search. He asked me for advice because he thinks I am an expert at internship hunting. And of course, being extremely flattered, I told him to grind Leetcode.
Pretty ironic right? Not to mention that the young lad also hates practicing Leetcode questions. He prefers building side projects, code that makes a real-life impact.
I told him, like how the seniors told me back in the days: life is hard; there is no shortcut; now go home and grind Leetcode.
Did I change my mind? Not really. I still think grinding Leetcode is dumb. But it is a necessary evil until companies realize it is dumb. The good news is that many companies have already revamped their SWE hiring process.
Coding is about translating one’s thought process into code. In the real world, software engineers translate business logic (what they want the computer to do) into maintainable and performant code. The purpose of whiteboard interviews is to ensure that the candidate knows how to do this translation. They give you a specification in the form of a programming puzzle. Then, you translate it into code.
Here is an example of a successful whiteboard interview from the candidate’s perspective
- Understand the programming puzzle
- Come up with an algorithm to solve the puzzle
- Implement the algorithm (translate thoughts into code)
In my opinion, only the third step somewhat reflects one’s real-world programming skills. Grinding Leetcode will help you to be good at all three steps. However, being good at the first two steps is not very useful for most software engineering roles.
So, should you grind Leetcode?
I might be wrong, but here are my two cents. I believe that every student interested in pursuing a software engineering career should do at least one internship at a “big shop” (Facebook, Google, Microsoft, Amazon, Apple, etc). At these companies, you will see what good looks like: world-class developer tools, mature product development process, rigorous performance review framework, etc. If those companies conduct Leetcode-style interviews, you should grind Leetcode. As of now, both Facebook and Google ask Leetcode-style questions in their software engineering internship interviews. If you want to work there, you should grind Leetcode.