- "I have a strong preference for hiring people with competitive programming. They are great coders!”
- “Are you serious? They are the worst people to do coding. Their code is messy and unreadable. They produce 10x results which take 100x effort to fix.”
I overheard people arguing this topic over and over again.
First let me be clear: you are not required to have a programming competition background to succeed as a software engineer.
Programming competition requires you to solve a problem with a pre-defined solution in a short time (usually in less than an hour). Software development requires good architecture, solid testing, and good communication over a long period. You can become a good software engineer without a competitive background.
In my 10 programming experiences, I only used my advanced tree algorithm knowledge once. And I did this over 2 weeks, not an hour. This is the only black swan of my career and I would have been fine if I had not known these algorithms before.
Having said that, doing competition does bring a number of benefits that can provide a competitive programmer with a unique and great career path.
Thinking and cognitive abilities
Competitive programmers often have very strong cognitive skills with an exceptional ability to visualize solutions in their heads and convert them into code with very few mistakes. This allows competitive programmers to absorb new abstract concepts or complex systems very quickly.
I had the pleasure of briefly working with Scott Wu, one of the top competitive programmers in the US, while I was at Addepar. And though he was 10 years younger than me, his ability to grasp complicated financial concepts was astonishing. I was always behind him in figuring out the root of the bug in the system.
Scott later spent one year at Harvard before dropping out and founding his company Lunchclub.ai as the CTO (with another former competitive programmer). He learned many things on his own.
A well-trained competitive programmer can learn AI, devops, UI or anything by himself since the complexity of these fields is generally less than what they have experienced before.
Programming competitions are like doing gym for the brain. Doing gym does not guarantee you to be successful in other sports but definitely give you many advantages compared to those who don’t do them.
Doing hard problems makes your brain and all your cortex and neurons responsive and activated to complex concepts. This allows you to learn in-depth subjects in other fields faster because you already have the infrastructure in your brain to do that.
In the world of abundant social media feeds where everyone’s brain is used to consuming easy and throwaway information, the ability to focus and dig deep into one topic can make a competitive programmer standout from the crowd.
Being a competitive programmer makes you competitive and efficient
If you join a competition, regardless of what it is, you possess some drive to win. If you want to get to the top 10, you must laser-focus on training and even sacrifice other parts of your life. You want to be extremely efficient with your time. Every minute or second counts.
The same thing happens when you build a startup. Whatever you do, there is always competition there. Your time is limited, your products would need lots of iteration. Sometimes, you want to set an impossible deadline for yourself to get things done. This is exactly what a Topcoder competition looks like. The competition does not just require specific knowledge but also requires speed and agility.
Of course, the problems in the startup world are much less defined than in a programming competition. But the intensity is the same. If you want to be successful in building companies, you have to be intense in one way or another.
Comma.ai, founded by a hardcore hacker George Hotz, is very fond of recruiting people in math or programming competition. George was the first person to have hacked the iPhone in his teenage years. He has an intense character and knows that his self-driving car problem would require a different set of engineers to solve.
Where might competitive programmers fall short?
They can easily get bored. If a competitive programmer gets used to solving advanced algorithms and they are given some mundane tasks, they could easily get bored and not care about the work. And because they do not care, their performance could be worse than someone coming in with little programming background but having a desire to prove themselves.
If you are a competitive programmer, you have to accept the fact that real-world software jobs are not as exciting as what you learned in competition. This is true even for top tech companies. You either have to accept the reality (because the pay is so good) or take risks and figure out your own thing.
Many of them write bad code. Competitions are optimized for speed, not maintainability. Go to a Topcoder Single Round Match (SRM) and you could easily find clunky mind-blowing chunks of code. If Jeff Atwood, the author of the blog Coding Horror, asked God where heaven is, he would be guided toward a TopCoder SRM round.
The good news is that once you work as software professionals you are asked to follow the standard coding pattern of your team or the industry and in most cases you have to change your coding style. If one keeps writing bad code or having trouble working in a team, it has more things to do with his/her characters rather than the competition background.
Most competitive programmers stop doing competition after college. A few do it as a gym exercise for their brains and fewer still keep doing it as a childhood nostalgia.
Competitive programming is a skill like many other skills you would learn in life. Like many other types of learning, you will forget or not use most of the knowledge you learned. What you get the most from these competitions are skills and experience.
The skills you acquire enable you to learn and solve very unique types of problems. It is up to you to decide if you want to leverage it or go with something else.