Competitive Programming is a Sport that opens the door for both novice and experienced to take the stage and battle against each other for glory. The notion of such competitions create a way for the grittiest of programmers to learn and showcase their talent. The contests themselves take place from the High School level to University Level. It’s a battle of algorithmists and math enthusiasts to pit their heads together to find the quickest computational techniques.
But in reality much of what we learn while competiting in such contests, does not get used in real world Software Engineering scenarios. In fact, very little of this knowledge is ever needed outside academia. But that’s not to say it does not help us land a job.
Skilled and Seasoned Programmers are built in Competitive Programming arenas. It’s one thing to solve a problem by Googling for an algorithm and coding it up in a relaxed afternoon. It’s an entirely different thing to break the solution into multiple Algorithms and Data Structures, tweak it, test it and optimize it. All of that in a time constrained contest. There is little to no time to relax with 7-10 problems to solve in a 5 hour window.
This high pressure environmet prepares us for thinking on our feet when we face tech interviews where critical thinking is the cornerstone for success. Most of the tech interviews will test your ability to break a problem down into fundamental parts which you can convert into an Algorithm and Data Structure combo. They might not be contests but the judge is also not an automated script. You are given challenges in incremental manner as you solve more. The problems get trickier as you succeed more. At one point, you either give up or you move to the next problem where it starts all over again. Sometimes, all the analysis, coding and testing has to happen in a 1 hour window. So it’s pretty clear why being habituated to high pressure helps here. Competitive Programmers literally train for this. The only part where it differs is, the problems start simple and evolve in complexity. While in contest, there are just static problemsets.
But that is where Competitive Programming sees the end of it’s role in the Industry. In actual day to day Software job you never really implement Karatsuba multiplication or Floyd Warshall’s algorithm. In the rare case you might need a BST or a Heap, you’ll find the optimal version in a library in your programming stack. What we really need to use on a day to day basis is Design Patterns, Object Orientation, Abstraction. The abilities that really matter in day to day job are:
- Analysing Systems and scrutinizing them
- Understanding business problem and implementation correlation
- Preparing designs that can go straight into implementation etc.
Competitive Programming will open doors for you that will otherwise be hard to even find. But once you are in, be ready with some Software Engineering and Design skills to showcase.
But let’s not take away from the immense pleasure and pure passion that Competitive Programming allows us to enjoy. Without such contests, the knowledge wouldn’t be spread around the world as it does now. And this needs to live. The implications on industry should not be the only motivation for something beautiful to exist. I personally still enjoy looking at Competitive Programming problems and read solutions and have my jaw dropped to the floor.