This post is a rant. I know that this is not true of every company and or every engineering student. But it is widespread enough in my experience that I find it worth ranting about.
tl;dr
Competitive programming is a good tool for building the programming muscle. An extreme pursuit of competitive programming is worse than useless. Unfortunately, companies and students are both headed in that direction at the moment instead of looking for engineers with broad interests.
From competency to fetish
Competitive programming started out as a good thing. When I was in college, there was no leetcode or equivalent websites. I think GSoC had just started out and only the “rockstar” programmers used to participate in that. Or maybe this was just the situation in my college – I don’t know. By and large, my class got by without writing much code, much less code of the type one might encounter in a real job. I and a few others who genuinely enjoyed programming ended up doing a variety of projects on our own and learning things that way.
The leetcodes and geeksforgeeks of the world filled a critical gap between textbooks and hands-on exercise. They provided a convenient place to see the kinds of questions asked in interviews and practice solving them. And then something went wrong. With growing access to these questions, interviewers started asking harder and harder questions in the coding rounds in college (and generally <5 years exp.) interviews. The expectation for these rounds is currently, IMO, meaningless. We left competency behind and are now well into fetish-land.
As a response, college students now pursue competitive programming obsessively to stay on top. In this weird arms race against prospective hires, companies keep asking harder and harder questions in a misguided attempt to raise the bar. The students respond by doing nothing else but solve every single available question on every single competitive programming website.
The junior engineer interviewing process, as it exists today, has a systemic problem. It doesn’t matter how high newbies are above a certain bar of logical, coding, and algorithmic competence – it is all the same. This is a classic case of a metric being gamed. A premium is placed on being able to solve super complex data structures questions. To meet this unnecessarily high benchmark, college students do whatever it takes. If the question had instead been “can this person become a great engineer in our company”, perhaps the outcomes might have been different?
Being able to solve typical data structures, algorithms problems is a signal in the larger interview process. By lowering the unduly high bar on DS type questions, organizations can make room for students to exercise their curiosity and develop their passions for something unique to them – their favourite technology, their favourite tech stack, their favourite industry. This will help them find people that can be trained, are self-motivated, and have an actual interest in technology beyond a gamified version of it.
A diluted signal
Now all this would be fine if this would help people become infinitely better programmers (it doesn’t) or at least distinguish themselves from the pack. But there is no indication that this is the case.
Students with 37 million zillion stars on coding ninjas, extra-super-advanced level on leetcode, or uber-coding-lord status on codeforces regularly fail the interview process because EVERYONE around them is at that same level! And in the pursuit of that level, they have ignored a lot of other fundamentals they should have learned or things they could have explored and tried out on their own. When asked what kind of technologies they find interesting, several students have told me over the last few years that they are only excited by competitive programming and have no other interest in software engineering or technology as such.
I can understand students from lower rung colleges following this strategy. Assuming for a minute that students from lesser tier colleges are less smart (possibly untrue but again a discussion for another day), the better students can distinguish themselves from their peers by extreme achievements in competitive programming. But at the better colleges, everyone is doing the exact same thing, and as a result, there is no benefit for anyone.
It is again the responsibility of the organizations to call this out and focus on other aspects of being an engineer. At least on other academic subjects if nothing else. But almost always, the first interview round is a super-hard data structures challenge which lesser mortals can’t get through. So later rounds are always evaluating people who are competitive programming biased. This funnel will never allow a different breed of software engineers to pass through.
It is an accepted idea in the industry that employee performance appraisals are subjective. Most companies make only superficial attempts at making them objective because different employees contribute in different ways. This subjectivity/uncertainty is part of evaluating anyone for any role. Unfortunately, we have reduced the fresher interview process to a computing game. This is not good for anyone, and the sooner we stop it, the quicker we might be able to find good engineers instead of human-like robots.
Read Next: Why programmers don’t write documentation
If you liked this, subscribe to my weekly newsletter It Depends to read about software engineering and technical leadership
Nice article, and has given the true picture of why new engineers not only get the job, but even lose interest in doing engineering. And, part of this has to do with the way, industry hire people. I also don’t understand, that how can competitive programming of DS makes one a great sofware engineer? The work of software engineer, given the requirement analysis, is to assemble code. By assembling, it means, using technological stack, following processes, scale and reliable. That’s what engineering is all about. They need to write code, which does not break.
Engineering is not just writing code. I think, many college freshers read books, which are written with a vested interest to sale by feeding on young minds, that anyone can become a great programmer, and we can drop out, if we are good in competitive programming.
The sooner they get out of this mentality, better for them.
Competitive programming is a good tool to build problem solving skills.
If I have to hire someone with less than 5 years experience, I would look for problem solving skills.
As a student, you can also build problem solving skills by solving puzzles or building complex products.
When I was in college, I did lot of competitive programming. It’s been 7 years since I participated in last competition, still I am able to use the benefits of my competitive programming experience.
I easily clears most of the coding interviews at company without much preparation.
Now, I enjoy building stuffs. I have built two products(company). Specifically on my product, Sometime I find engineers struggling with feature development, usually those engineers are missing either problem solving skills or dealing with ambiguity or both.
Having said, that I would not say competitive programming is useless. It’s a great tool for adding skills specially when you are college students.
To me, competitive programming is a fun hobby with a community I connect with that also happens to make technical interviews child’s play. Sounds very useful to me! Now, you’re right that there’s a lot of software jobs out there where it doesn’t make sense to hire the person who’s best at solving an interesting problem about algorithms. I think such a job is useless because it doesn’t align with my interests.
(just realized we can’t edit comments OOPS)
I am one of lower (or say garbage) tier colleges. Well you can say I am bit lousy but I am going to be a sophomore and most of my focus have been on computer systems and systems programming, since that’s what I like
And yeah I did CP at highschool. I kinda think it’s not the kind of “algorithmic” skill one desires. Algorithmic skills need much more broad outlook, working with extreme niche and specialized algos, and deciding how they all sit together with system provided. This CP/Leetcode craze needs to be brought to a halt!
I am one of lower (or say garbage) tier colleges. Well you can say I am bit lousy but I am going to be a sophomore and most of my focus have been on computer systems and systems programming, since that’s what I like
I totally agree with this article, because project based problem solving and solving top level DS questions are two different roads. Learning the whole tech stack is a broader perspective.