DEV Community

Cover image for Competitive programming - is it really important?
Yash Soni
Yash Soni

Posted on • Edited on

Competitive programming - is it really important?

Before you jump to conclusion, I was never in favour of Competitive Programming. I used to be mad at companies who used Comptetive Programming as a first round to scrutinize interview candidates.

I've gone to the extent and said out loud many times, "If they want to hire someone for Developing - Mobile Apps, Web Apps, Backend servers, etc. then why ask inverse a binary tree in O(god_knows_what_time)."

I was like where/how/when am I going to apply this in developing stuff that they are hiring for??

But, after almost 3 years into Developing Software - I stand corrected.


It is important!


Why do companies like Google, Facebook, Amazon include this in their hiring process?

It's very simple, they want to know how do you THINK! Given a problem, how do you deduce (or try to come to) a solution. No, you are not going to directly use this solution in the Software - like ever! But what they are looking for is - a skill of problem solving.

There's a concrete reason why parents buy puzzle games for their children - they want them to develop problem solving skill.

This competitive round helps companies filter out candidates that lack this skill. I have also noticed a common practice to put this round as the very first one - it must be damn important!

Now, almost every company in India looks for this skill - this has become a general process. The first round of an interview is most likely Competitive Programming round.


How does it help me - a developer?

We spend most of our time developing something or the other. Most Softwares that we work on often requires us to write logic of some kind, handle different cases and scenarios, etc. P.S. I'm talking about more than just if-else.

Being good at problem solving generally helps you construct solutions faster, consider all possible scenarios - giving better coverage and lesser bugs.

No - I'm not saying you're a bad developer if you are not doing this. As I said, I too have recently started this. You can still be a great developer by experience, or just naturally - I've seen some myself who are great at what they do and they don't know anything about Competitive Programming!


But I'm not looking for a change, so why should I learn?

This is definitely a skill addition - at least. Plus, solving puzzles keeps you sharp. It's like a workout for your brain. And what's so special about this workout is that you can do it with what you are already in love with - coding.

Want to pick up a new language? Try solving coding challenges with that language and see how quickly you pick it up!

In fact, even if you continue with already known language, you'll have a better grip now than before - guaranteed. Personal experience.

You will uncover the potential of some Data Structures that you have already worked with - get ready to be surprised.


Am I too old to start now?

There's one good thing about these coding puzzles, they don't come with a tag suited for age 6-14 😝 You can start any time, literally. Besides, one solve puzzles for fun - and you are never late to do
something fun.


How and Where do I start?

There are plenty of platforms available that you can get started with. Listing down some for you to start:

  1. GeeksForGeeks
  2. CodeChef
  3. HackerEarth
  4. HackerRank
  5. LeetCode

Most of these platforms comes with a decent learning material and a solid community to help you out if needed!
Pick a language you love and get started. It's addictive and you're going to ❤️ it.


This can very well be your fun new hobby in this pandemic - learning is cherry on the top. 🥳

If you have any other questions, please fire it up in the comments section.

Top comments (27)

Collapse
 
muhimen123 profile image
Muhimen

I have been in the competitive programming field for more than 2 hours. And if you know real meaning of competitive programming then you will understand that the questions asked in job interviews are not actually competitive programming problems rather simple programming problem. So, I don't think its fair to say that they ask competitive programming problems in the interviews. Competitve programming problems are hard, way hard than you think.

Collapse
 
iyashsoni profile image
Yash Soni

Hello Muhimen, a little background about me. I’ve done post graduation from IIIT-Bangalore, 2015-17. In India, especially Bangalore, it is very common to have fierce competition for round 1, generally because of high number of candidates. I can tell from my experience, and yes I was aware of what “competitive programming” meant back then too, only wasn’t into it. It is proper Competitive Programming. That doesn’t mean take the hardest problem of LeetCode, but yes, it was not a basic one, in fact it was never a basic one. So what you’re saying might be the case in your country but in India, this is reality. And so is hiring through Solely competitive Hackathons.

Also, in this article, I’ve said it is good to get started with CP track, as it is not a fixed set of course, one can start gradually with smaller problems and then move to challenging ones when they are ready. In that context I’ve used “Competitive Programming”. No - it is not way harder than what I would think. And also I disagree with only hard problems should be called competitive, it is a way to develop algorithmic thinking towards problem solving, not bound to hard problems at all. Hope this clears your confusions.

Collapse
 
ceblakely profile image
Christina Blakely

These are great points. I also wondered why bother with some of these seemingly meaningless small problems but learning to dissect an issue into executable steps is a skill all programmers should work on. 👏🏽

Collapse
 
iyashsoni profile image
Yash Soni

Exactly. It seems like there are many like us out there. Hope this motivates some to get started! 😃

Collapse
 
kovidr profile image
Kovid Rathee

Couldn't agree more. Last year, I interviewed for a number of tech companies around the world. The interviewing process has evolved quite a lot. Almost all companies had a challenge-based selection process. More like - here's a problem, take 2 weeks, come back with the code and then we'll discuss the code and decide whether to move forward or not.

Collapse
 
leob profile image
leob • Edited

Two weeks? I wonder if you're testing any kind of mental agility and independent problem solving skill if you're giving someone two weeks to cobble something together. Just put them behind a screen and give them 30 minutes to work out a reasonable set of puzzles, spare them having to spend that much time (unpaid, that is).

Collapse
 
iyashsoni profile image
Yash Soni

I agree, 2 weeks is too much. I've seen most programming rounds to last somewhere between 1-3 hours max. If it goes beyond that, then I assume it's more of "build something" kind of test.

Thread Thread
 
leob profile image
leob

If they're giving you an assignment that takes more than a day then it's work, and you can ask "how much do you pay me for this".

Thread Thread
 
kovidr profile image
Kovid Rathee

Yeah, some of them have offered to pay too!

Collapse
 
kovidr profile image
Kovid Rathee

@leob - these are challenges that probably require 16-20 hours of work, with quite a bit of work. This is an alternative to the 1-3 hour programming rounds. I think some companies are going this way now.

Thread Thread
 
leob profile image
leob • Edited

Meaning they're asking you to put in 16-20 hours of unpaid work? I say that's a lot, clearly they can only get away with that because the balance of power is on their side. A more fair approach would be having 2 rounds, first round the 1-2 hours test (3 hours is already a LOT), then if you make it through that round they can ask you to do the 16 hours assignment, BUT in that stage it should come with something of a 50-75% chance job guarantee, or with some sort of financial compensation. If they're putting 25 people through an unpaid 20 hours assignment and only hiring one then I'd call that gross.

Thread Thread
 
kovidr profile image
Kovid Rathee

@leob - I have called that out. But I do it for the fun of it. Most of these assignments don't last that long, anyway. 16-20 hours is a conservative number. It usually takes much less. But you're right about the unpaid work!

Collapse
 
iyashsoni profile image
Yash Soni

Yes. Seems like this comes even before “Tell me something about yourself” 🙆🏻‍♂️

Collapse
 
leob profile image
leob • Edited

Which is bad in my opinion ... "tell me something about yourself" is incredibly meaningful when done right. The puzzles and the skills tests are valuable tools, but we're not algorithmic robots which are hired only to crank out lines of code, that's pretty dehumanizing I would say.

There's more to critical, strategic and abstract thinking (and more to good personality traits) than solving an algorithmic puzzle (and please don't test rote memorization of standard algorithms like being able to reproduce a quicksort from scratch, that's theoretical knowledge which is completely useless in real life).

Collapse
 
leob profile image
leob

But why is it called "competitive programming"? Weird terminology, it's not like we're in the Olympic Games of programming hired to outsmart "competitors". I can fully understand that companies use this as a "filter" to screen out candidates that have poor problem solving skills (if that's the case then you have no business to be in this industry to begin with). So it can be a useful tool, if done right, but please drop the "competitive" moniker.

Collapse
 
benibela profile image
Benito van der Zander

There actually is a literal Olympiad in Informatics, where the best students in competitive programming compete

Collapse
 
leob profile image
leob

Heard about that ... yes of course there are competitions, but to see "competition" as part of hiring seems somewhat wrong to me. I think building a good team is not about hiring a bunch of ninjas or "rock star" prima donnas and locking them in an office & throwing away the key.

Collapse
 
iyashsoni profile image
Yash Soni

Aren't interviews itself competitive by nature?

Have a look at this:

This is a random Job Posting I got from LinkedIn. It already has 115 applicants in the last 13 hours. All these candidates have to compete and give their best to get that Job. Just because a board isn't put out saying this is a "Hiring Competition", doesn't mean it isn't.

This is part of hiring now! And I don't mind if they keep/drop the "competitive" moniker honestly, I'm more focused on the problem-solving part.

Can the process become better? Yes of course.

Collapse
 
leob profile image
leob

Did I ever feel that interviews are competitive? Not really, I just present myself to an employer the best way I can but honestly and without faking it, and beyond that it's "take it or leave it". I don't really fret about being in a "competition" with whoever else.

But yes, if there are 115 serious (qualified) candidates for one job then you can indeed call it "competition". That's an unenviable 'market' to be in, I know that in some locations there's a developer shortage but this doesn't look like it.

Collapse
 
louy2 profile image
Yufan Lou

This competitive round helps companies filter out candidates that lack this skill.

"Competitive" programming, by definition, filters out candidates. Whether that is actually related to the skill of problem solving is another question. Whether the skill of problem solving is actually relevant to the success of a hire is yet another question.

Otherwise, competitive programming provides very fun problems, some of which reveal important properties of important data structures and algorithms. It is in competition we improve. But also remember, competitive programming is not the only field worth competing in.

Collapse
 
iyashsoni profile image
Yash Soni

Completely agree, and through this article I’ve tried to emphasise that’s its just another skill to have.

I believe it is not the ONLY important skill in tech, but definitely an important one. It’s something good to have, world won’t stop if you don’t know it.

And I’ve also mentioned that it doesn’t directly translate to being a better developer. In general, it helps evaluate problem solving skills.

Collapse
 
steelwolf180 profile image
Max Ong Zong Bao • Edited

I disagree, It makes more sense to find another way through the third door.

Which nowadays you can work on your own personal branding, networking in the developer community or contribute to open source. Who will seek you out and offer you a high-quality job with a higher success rate with little to no competition.

Instead of going through the traditional route of applying and praying to get selected for an interview. Or passing the 1st level of competitive programming. I by no means are against technical challenge. But not something that anyone can game it through memorising of a reverse linked list.

Collapse
 
iyashsoni profile image
Yash Soni

I think you are getting it wrong. The aim of this article is to suggest explore this too. Of course all of what you said apart from CP is also important. But I never said that you have to do this and not that. It’s not exclusive. I’m writing blogs, building my side projects, learning algorithms, mentoring and contributing to the community all together. Let’s not fall in the trap of ranking all these. ✌🏻😄

Collapse
 
benibela profile image
Benito van der Zander

It is a good way to get free t-shirts

Collapse
 
iyashsoni profile image
Yash Soni

Oh yes! Forgot to mention the goodies part 😂

Collapse
 
itsjzt profile image
Saurabh Sharma

I think it is more of a common practice in hiring fresh engineers. Because in the other case you can already see his capabilities in his projects.

Collapse
 
iyashsoni profile image
Yash Soni

Well I’ve seen some companies have this for even Senior Engineers.

Also, just looking at projects cannot give a good idea about the candidates true potential - ppl exaggerate a lot in resumés. So a detailed discussion is anyway required there.