I’m working on a project this year to build a competitive programming FAQ. This is one in a series of articles describing the research, writing, and tool creation process. To read the whole series, see my CPFAQ category page.
Although Quora is by far the most popular venue for competitive programming Q&A, questions do sometimes pop up on other sites. On Stack Overflow, competitive programming questions typically get downvoted and deleted in short order. Reddit has more lenient policies and allows questions to stay up even if users have asked them repeatedly in the past. Here’s one that appeared last week on the CSCareerQuestions subreddit:
Competitive programming, worth dedicating time to it or not?
Do employers value competitive programming at all?
Although the question didn’t get a huge amount of attention — after a few days, it has just three upvotes — the responses covered a range of opinions similar to those expressed on Quora when people ask similar questions there.
As often happens in these situations, the author didn’t write the question as clearly as he could have. Here’s how I would express the main idea: Will Competitive Programming Success Help Me Get a Programming Job?
When people write questions on this topic, they sometimes word them in a way that implies companies might be interested in competitive programming skill for its own sake. Here’s an example from Quora: How do Champions of programming competitions get a job with just one skill? (Bohdan Pryshchenko’s answer: “A lot of people are looking for a job while having zero skills, so one is already not that bad.”)
But of course companies are in the business of solving real-world problems, not academic competitive programming problems. So if they are looking for competitive programming skill, it’s as an indicator of another skill, not as an end in itself.
Do It If You Want To
Do it if you like doing it, not if you don’t.
Only do it if you enjoy it.
Do it if it’s easy to do so. And if you just like the challenge really do it. If you hate them it’s not a big deal, you can get the same benefit or better from doing your own projects instead.
A common opinion about practicing competitive programming for interview preparation: interview candidates should use it only if they enjoy competitive programming. This is true, with a few caveats. Because of the popularity of algorithm-style interviews, it’s not possible to ignore algorithmic problem practice and still have a good chance of being hired at a wide range of software companies. But competitive programming is not the most efficient way to prepare for those interviews, because the problem types emphasized in programming contests differ from the ones emphasized in coding interviews. Still, it’s better than not practicing those kinds of problems at all. I don’t agree with the quote above that says “doing your own projects” is a sufficient alternative, because most people who focus only on real-world coding find coding interviews difficult. My Quora question Is “invert a binary tree” a good question for Google to ask in a technical interview? references a situation where the author of a widely used open-source product failed to make it through the Google interview process because (he assumes) he didn’t prepare for algorithmic questions.
The best options for people who don’t like competitive programming but still want to get better at interview questions are online judges that focus on interview problems. LeetCode and HackerRank are two popular ones. These sites capture most of the benefits of competitive programming practice while focusing on the right types of problems for interviews. They don’t provide the all-consuming challenge of preparing for ACM-ICPC with a team, or the scheduled motivation of regular live Codeforces contests. But they supply more gamification than a traditional coding interview book and don’t require as much time as the competitive programming lifestyle.
Meeting Smart People
I met some of the smartest engineers I know on our programming team.
It’s common on Quora to see the criticism that competitive programming emphasizes competition over collaboration. Partly this is due to the theory that competitive programmers are a distinct group of people who approach all of their programming tasks with a competitive programming mindset. But the group labeled as “competitive programmers” is just a collection of programmers who happen to participate in programming contests. They are as capable as any programmer of adjusting their programming style to fit the task at hand. And in the case of ACM-ICPC, the task requires collaboration, since the contest requires contestants to participate as a group.
One side-effect of collaborating with other programmers is the opportunity to expand your professional network, which is useful when the time comes to look for a job. Competitive programming is a way to meet other motivated programmers while getting the additional benefit of algorithmic problem practice.
Ratings and Rankings
I’m hesitant to mention it on my CV unless I actually come top worldwide or something.
Competitive programming practice can help with passing an interview. But what about getting invited to interview in the first place? Recruiting-oriented competitive programming platforms like HackerRank and contests like Google Code Jam can tie ratings directly to interview invitations, at least for some participants. For online judges like Topcoder and Codeforces, the relationship is less direct, though companies sometimes also use those platforms for recruiting. Nevertheless, there’s never a guarantee that companies will notice a contestant’s success.
While some Quora writers claim they would throw out a resume with a competitive programming credential, I doubt that would happen in the real world. So it doesn’t hurt to include one. But it won’t have the same beneficial effect as real-world experience.
(Image credit: WOCinTech Chat)