Competitive programming, the tech paradox
Competitive programming is gaining momentum. Every year, more competitions and new training platforms. Like a never ending pandemic, always more complex with always more people involved. But why such a craze? And above all, is it really necessary for you?
What’s your rank?
In general, most trades are very competitive. Whether internally, within team members, or externally, just to get in. No one really escapes it.
But among developers this competition is very visible.
Competitive programming is a “sport of the mind” practiced by hundreds – or even thousands – of developers simultaneously. All participants, via the internet or locally, receive the same problems to solve.
The fastest is the only winner.
The problems in question are brain teaser in the form of logic and/or mathematics puzzles.
Important point: Competitors are not judged on the quality or reusability of the code. What matters is the speed of solving the problem and the complexity of the solution in time and space.
First of all, I want to show you what it looks like.
This is William Lin. A young 18-year-old student who is already very well known in the competitive environment. Here is a video of him winning a Google online competition “Google Kickstart“.
This video is absolutely crazy.
First, let’s talk about how fast he just understands the problems. It’s borderline not normal what’s going on. I almost fell out of my chair. I think that even if I knew the problems in advance, I would 100% be slower.
I seriously accuse him of being an alien who looks like a human.
But the most impressive thing is how fast he solve the problem. Here’s another video where his dueling with another developer. The video doesn’t last long.
But how did William manage to reach such a level in competitive programming? He did like all the other participants. He trained on the platforms.
Automisation
Competitive programming is growing as the number of platforms dedicated to the preparation of these competitions increases. If you’ve never used one, believe me, it’s going to happen. Little by little, everyone ends up being forced to participate.
I already mention them in the article on technical interviews, because the two are very related. Today, entire platforms are dedicated to training, testing and ranking developers among themselves.
Here is an incomplete list :
- HackerRank
- LeetCode
- Codingame
- Codility
- Coderpad
- Coderbyte
- CodeSignal
- CodeChef
- Codewars
- Codeforces
- AlgoExpert
- TechInterviewPro
- SPOJ
- TopCoder
- HackerEarth
- Exercism.io
I bet you that if you look a little more, you’ll find a dozen more.
Important detail: some of these platforms are used by companies to test developers during an interview. Companies can automatically put their candidate in a ranking. You end up in a Excel file with your rank.
A real online competition, to get a job.
Why such a craze?
Initially, competitive programming was only for algorithmic enthusiasts. Those people are still around. They still have a lot of fun. But they are not responsible for the explosion of platforms and competitions.
The excitement comes from changes in the developer job market.
The developer job market has become extremely elitist. The job is becoming more and more complex. Competition follows.
There is a shortage of experienced developers while no one is hiring young developers.
Being able to compete and rank candidates on the internet is very convenient for companies. Didn’t you train on competitive programming platforms? You will be sorted at the bottom of the ranking.
Under these conditions, entire armies of developers race on these platforms and participate in competitions.
In the past, only the tech giants (GAFAM) had this elitist policy around recruitment and technical interviews. Now, the phenomenon is global.
And the reason behind is very logical. Testing developers is a complex task. These platforms solve this problem. An online, automatic, generic, fast, and convenient way to test developers on pure logic.
And the more complex the job becomes, the more elitist companies are, the more competitive programming rages.
Okay, so does that mean you need to jump in it as fast as possible ?
Urgency
The answer depends on your goals.
For some of you: it is essential.
For others: it’s useless.
It would be dishonest of me to give the same answer to everyone.
I’ve been relatively negative with competitive programming so far, so let’s start by listing the advantages.
- Fun
There’s an inexplicable fun to stumble upon a problem, struggle with it, and end up solving it with code. This slight euphoria to understand and solve the mystery.
This is especially true when you start to get used to the logic of these exercises. When you understand those algorithms and you see patterns just reading at the problems.
Those who were there before the craze know this and are only there for the fun.
- Improvement of algorithmic logic
At the base of our job are the algorithms and the logic to implement them.
If you feel that you are limited in this, then you have to work on it. This concerns a lot of young developers who are still used to this very special brain gymnastics. But also the more experienced ones.
Personally, if tomorrow i need to pass an interview, you can be sure i’ll spend some time on coding platforms before.
- Preparation for technical interviews
A lot of technical interview looks like competitive programming.
That’s the main reason for the craze around all this. Being a developer is one of the only jobs with even with 20 years of experience, you will be given a thorough test.
It’s ridiculous, but that’s the reality.
If your short or medium term goals are strongly linked to all this, then yes, I advise you to get into competitive programming.
How ?
The how is relatively simple.
Go to these famous competitive programming platforms. Most of them are free. My favorites are LeetCode, HackerRank and CodinGame. Get on them, start with the easiest exercise, then go crescendo at your own pace without forcing.
I warn you, it’s going to be very hard at the beginning. It’s a shock to a lot of people.
To compensate for the shock, you have to prepare yourself beforehand.
I strongly advise you to use the undisputed bible of technical interviews: “Cracking the coding interview“.
First of all because it’s the whole package in one place. From the basis of the algorithm and the data structures through the time/space complexity to the obscure algorithms and the sorting and traversal algorithms. No need to go from resource to resource and waste a lot of time. You have everything, in one place, at your fingertips.
But also and above all for the way the author Gayle L. McDowell explains concepts. Her ability to simplify complicated concepts makes everything simpler. And that’s invaluable in a trainer when you’re just starting out.
Now, if you don’t identify with any of the above goals, then I’ll be honest, I don’t see any point for you in competitive programming.
Tech Paradox
Remember our friend William Lin ?
He’s a student who never had a software enginer position yet. He’s crazy good in competitive programming. I don’t think -even if I work hard- I could compete with him in pure logic.
I don’t even want to compare myself to his level, that would be ridiculous.
But outside of competitive programming, William is struggling to develop real-world applications.
How can he dominate extreme difficulty at an inhuman speed and struggle so hard to make one page in React?
This is the paradox of competitive programming. It’s mandatory to be hired. But you don’t need it – or very little – in a real developer job.
You’re going to tell me that it’s normal to have a hard time discovering a Javascript framework and you’re right.
I have another example.
A long time ago, in a galaxy far, far away, I was working on a project with a very talented developer. He is by far the most talented developer I’ve ever worked with.
He was responsible for a lot of systems and he was extremely competent in his field. I don’t know how much he was paid, but he was retained by the company several times through raises. In short, the dev you want on your team.
The dev you want in your team.
This developer told me that he was unable to return a linked list and that he didn’t see the point of all these platforms. He didn’t understand why we don’t test new hires on real, everyday problems. That all these puzzles had nothing to do with what he was doing every day.
A lot of developers would not pass the technical interview of their own company.
And these same developers are ultra competent and performing at their job.
How could I tell you that competitive programming is absolutely necessary for everyone when this situation is so common ?
Epilogue
Competitive programming is for me the biggest paradox in tech. Essential, unless you don’t need it. Your decision whether or not to go into it should be made according to your goals. At first, your ranking should interest you less than the intellectual gymnastics that it will bring you. It is only with this gymnastics that your ranking will eventually increase.