Disclaimer: The views and opinions expressed in this article are solely those of the author and do not necessarily reflect the views of the author’s former, present or any future employer.
The purpose of this article is to disillusion students regarding the myth that you do not need to work hard (aka “grind”) in order to land your dream tech internship.
Some words of caution to prevent any misinterpretation or misrepresentation:
- This post is mainly intended for students who’re aiming to land Software Engineering (SWE) internships at the top tech/quant firms, which conduct technical interviews involving coding a solution to a problem (generally related to data structures and algorithms).
- I hope simply to provide another perspective on the highly discussed topic of internship applications, a perspective that I believe is missing from the current discourse.
- My intention here is not to criticize any specific person or entity or hiring practice in any way.
- Of course, everything here is simply my opinion (not a “fact”) — you can prefix “In my opinion” to the beginning of every sentence if you wish to :)
Sorry for the long preamble but I suspect this article might be misconstrued (either accidentally or otherwise) and I want to make sure I get my point across as clearly as possible. Let’s dive straight into it!
Context
As a student, I’ve been following discussions on internships and what you need to do to prepare for them for quite a while now. I’ve been seeing a lot of articles/videos (created by well-meaning people, I’m sure) that give advice such as “stop grinding leetcode” and “no one has time to solve hundreds of questions”. While their intention might be to help students prepare better by using their time more effectively, I think it does more harm than good. The reason? Their premise is a myth.
By “myth”, I mean that such claims paint a misleading picture to unsuspecting students, and is nowhere close to the truth. I think it’s a myth that you can get into the top companies without the necessary “grind”. Of course, there are some exceptions to this. But they must be seen for what they are — exceptions, not the norm.
Broadly speaking, people who give such advice belong to one of 2 categories:
- Category 1: Those who have never been offered an internship/job with these companies.
- Category 2: Those who have.
Let’s look at each of them in turn.
Category 1
Their advice generally doesn’t have any evidence backing up, not even anecdotal. Not many people would believe them, so they don’t have much of a following. In other words, people seldom take them seriously anyway.
As a digression, note that this is not true in general — for the majority of intellectual discussions, you don’t need any “credentials” (eg. a PhD or even a degree) to have the right to speak. You’re judged (and rightfully so) based on the actual content and validity of your theories/arguments. As a concrete example, even though I’ve no formal learning in biology, I can very well propose theories if I choose to and they would have to be judged based on their merits, not based on my credibility.
But in case of internship applications, there’s no real “authority” or “credentials” you can establish anyway except by going through the process and doing well in it. That is, it’s much harder to prove the correctness of your theories/claims apart using empirical data, and personal experiences. And since accurate empirical data regarding this topic is unlikely to be obtained, the best that people can offer is anecdotal experiences.
But since they’ve never actually made it through the interviews themselves, their advice lacks weight. They’re the armchair critics who say they can do a better job referee-ing while watching a basketball game.
Category 2
These people are far more convincing. They have the credibility because they’ve “been there, done that”. They try to curate small lists of questions that they believe “are sufficient” to crack the interviews.
The best way to prove that their advice is a hoax is to ask them a simple question: “How did you prepare when you were applying for internships?”. This question gives a far more accurate picture of the reality than asking “How do you think I should prepare while applying for internships?” (which is the question they’re trying to answer).
Such people, in general, have themselves spent countless hours solving problems on Leetcode and other platforms — which is how they managed to pass the interviews and get an offer. They probably wouldn’t follow their own advice of only solving a selected set of questions even if they had to do it all over.
Note that I’m not saying that these curated lists are “useless” — I think they often contain a wide range of questions which exposes you to new patterns and approaches, and so they’re a great way to get started with learning the concepts. But by no means are they sufficient. Just knowing the concepts/patterns is not enough — you need to be able to spot them and apply them. And this takes consistent hard work.
Yet that’s not the advice they give to people — they tell others that it’s possible to get offers from top companies without grinding. Why do they preach what they wouldn’t practice? I honestly don’t know why — and I don’t wish to make any assumptions regarding their intentions.
Even if they think that solving hundreds of questions did not help them get the offer, how do they know? Solving questions is not a one-dimensional exercise — it does not only help build your data structures and algorithms knowledge. It also:
- improves your general problem-solving skills: this is the most important area, and I’ll come back to this towards the end
- improves your pattern recognition skills: if you’re worked on a wide range of questions, across a wide range of topics, you can easily spot the right approach/pattern when a new problem is given to you, by finding some similarities with previously solved problems.
- improves your proficiency with the standard library (and commonly used functions) of the programming language of your choice so you don’t have to look up the documentation during the interview.
In general, such advice misleads people into believing that they can “achieve anything they want” without putting in the necessary effort. It gives people the impression that it’s possible to succeed without much hard work. And this is simply not true.
When people believe such statements, they end up putting in less effort than they would have otherwise. In other words, they get complacent and to a certain extent, lazy. And laziness is not a virtue. Similarly, encouraging people to take “shortcuts” (when they themselves did not) is not noble. Encouraging laziness is not noble.
Put bluntly, there’s nothing virtuous about sacrificing hard work under the disguise of “work smart, not hard”. Wrong! You need to work hard AND work smart if you want to be among the best.
If you want to reach the 75th percentile, you can probably still achieve this by optimizing your efforts by focusing only one “important” topics. But if you want to be at the top — among the 1% — you can’t let others decide what you should practice and what is “not that important”. The law of diminishing marginal utility applies here as well — it’s much harder to improve when you’re already “good enough”. But that doesn’t mean you shouldn’t. Anything worthwhile in life is likely going to be hard.
I concede that it’s possible that a small fraction of the people who get those roles may not have put in a lot of effort — either they’re naturally gifted, or they have great luck. But remember that such people are the exception, not the norm. And if you’re not gifted with that level of raw talent, you need to complement that with hard work.
And if it’s really your dream internship, why would you not want to give it your best shot? Why would you want to shortchange yourself by paying heed to people who ask you to work less? Why would you willingly risk not preparing enough for something just because someone says it’s “not that important”?
Some Preemptive Rebuttals
“Are you saying that grinding Leetcode guarantees getting into a top firm?”
No. Nothing “guarantees” that. I’m simply saying that hard work improves your chances of getting into the top firms. I’m claiming that hard work is a necessary, but not sufficient, condition to landing such roles — luck definitely plays a factor, but since that is, by definition, not within your control, you’re better off focusing on what is in your control — working hard. The more you prepare, the less you need to rely on luck.
But if you don’t prepare enough (and deep down, you’ll know if you didn’t), don’t try to blame it on luck.
Also, this is just one part of your preparation journey. You’ll also need to work on your resume, communication skills (being able to explain your thought process during interviews), answering behavioural questions, and (perhaps the most underrated) building emotional resilience so you can brave the rejection emails you might receive.
“Why are you singling out LeetCode”?
I’m just trying to use a familiar example. The same argument applies no matter which platform you use to prepare — Leetcode, Codeforces, Hackerrank, Codechef — as long as you know that you’re trying to cut corners (though to be fair, if you’re preparing for technical interviews on codeforces, you’re likely already good enough xD)
“Are you saying that everyone should be grinding Leetcode?”
Nope. You’re free to set your own goals in life, and I’m nobody to judge you for that. It’s perfectly okay not to be attracted towards such jobs — eg. you may enjoy working at startups more because they’re super fast-paced and fun!
But this particular post is only aimed at bursting the bubble of people vying for tech roles in the top companies, as I mentioned at the beginning :) It should not be treated as general advice for everybody, simply because everyone has different goals and aspirations in life, and so naturally, the same advice can’t apply.
“So how many questions should I do?”
I’ve intentionally avoided giving such a number, because such a number simply does not exist. Different people require different amounts of practice — it’s true in school, it’s true in university, and it’s also true in preparing for internships.
I can give you a good heuristic however — keep practicing until the point you can solve almost any new problem in under 10 minutes (or you feel “bored” doing new problems because it feels you’ve done the same thing so many times).
“Which topics should I focus on more?”
Again, I can’t give a straight answer to this (and that’s not the main focus of this article anyway) because it depends. It depends on your current level of knowledge/mastery, what kind of role you’re looking for, and
As a general rule of thumb, focus on the fundamentals first before moving on to more advanced topics. Then, focus more on the topics you’re weaker in.
“I’ve seen IOI medalists getting internships without doing any leetcode.”
More generally, there’s a category of people who have worked hard enough during their high school days (and proven themslves by taking part in IOI, IMO, etc.) for whom such interviews may seem like a breeze. The key point is that they’ve already worked hard previously to reach a level of mastery and proficiency to comfortably pass these interviews — before everyone else even started. Don’t mistake their (possibly) present lack of efforts as evidence that you can get away without working hard. They’ve already put in the hours — it’s your turn now.
My Advice
I think part of the problem is manifested in the way we talk about this topic itself. In particular, the word “grind” implies that the action is repetitive and, to an extent, mindless. But that’s not what problem solving is about at all!
My personal take is that you should enjoy the process — I know it sounds very idealistic but hear me out. When I started solving Leetcode problems, I too found it to be a chore. But after about a week, it became a routine and I started to look forward to it — heck, I even started to enjoy it! How?
Let me explain. For most people, solving such problems is a means to an end — the end being landing a tech internship/job — and this mindset makes it harder to sustain the motivation of solving problems.
Allow me to propose another way of looking at things.
The ultimate goal is not just to be able to solve the problem in front of you → the goal is to use the current problem to build your problem-solving skills and solve new problems you’ve not encountered before. Viewing every problem you encounter through this lens means that you focus not only on solving the problem but also spending time figuring out (and hopefully, writing down) what you’ve learnt from this problem that you think might be useful in helping you solve new problems (e.g. a new algorithm, structuring your code in a better way, a neat math trick, a unique optimisation method).
This puts less pressure on actually solving the problem, since the main focus is on learning through the problem — hopefully this shift in perspective encourages you to enjoy the problem too :)
Also, having a good collection of your own notes is a superb way to retain what you’ve learnt, and also allows you to review (in a quick manner) the key ideas before an interview.
Remember: Great notes are not the key. Great notes reviewed often are the key.
Conclusion
Tl;dr: Consistency is key. Focus on learning by solving as many problems of different kinds as you can and taking down notes on what you’ve learnt through that problem. Do your best. Ignore the people that say you don’t need to work hard and solve hundreds of problems to get your dream internship because they probably did the same to get where they are.
Moreover, this discussion is not limited to preparing for technical interviews. It’s true for almost all situations in which there is cut-throat competition (along with some irreducible luck factor), and you need to maximize your chances of being at the top. You’d be doing yourself a disservice by not putting in your 100%. As the short, wise green man said: “do or do not; there is no try”.
A famous quote by Germany Kent is “if you never try, you’ll never know”. I’ve taken the liberty to modify it as such:
If you never try your best, you’ll never know — Devansh(?)
Thanks to Jia Hao for suggestions and reading drafts.