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:
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)
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.
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.
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. đđ˝
Exactly. It seems like there are many like us out there. Hope this motivates some to get started! đ
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.
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).
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.
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".
Yeah, some of them have offered to pay too!
@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.
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.
@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!
Yes. Seems like this comes even before âTell me something about yourselfâ đđťââď¸
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).
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.
There actually is a literal Olympiad in Informatics, where the best students in competitive programming compete
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.
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.
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.
"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.
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.
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.
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. âđťđ
It is a good way to get free t-shirts
Oh yes! Forgot to mention the goodies part đ
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.
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.