It is commonly known that programming is a popular, in demand, and high-paying profession, but not so many people know that programming is also a sport. A sport? Really? Most people associate sports with physical exertion, but some non-athletic activities are sometimes also recognized as sports¹:
Sport is generally recognized as system of activities which are based in physical athleticism or physical dexterity… However, a number of competitive, but non-physical, activities claim recognition as mind sports. The International Olympic Committee recognizes both chess and bridge as bona fide sports…
Whether “mind sports” can be really called “sports” is quite controversial but there is a large variety of programming competitions around the world and their participants often consider those competitions as sports events²:
Competitive programming is a mind sport usually held over the Internet or a local network, involving participants trying to program according to provided specifications. Contestants are referred to as sport programmers.
Competitive programming is a field with a history. The oldest competition that still goes to date is International Collegiate Programming Contest (ICPC)³ which traces its roots back to 1970 and nowadays gathers hundreds of thousands students from thousands of universities from more than hundred countries around the world. There is also a number of competitive programming events for professionals, organized by some of the largest IT companies like Google, Facebook, etc.
There are varying contest rules and contest formats, but one thing is common: contestants either individually or in teams are writing code to solve programming problems.
On one hand, this activity is very much like an industrial programming — you have a problem statement that explains what task shall be solved, and you need to write a code that does it. Just like it happens in software programming practice, the problem is usually spelled in a form of “business requirements”, as opposed to the formal mathematical specification, you have a deadline (the end of the contest), you have non-functional specifications (how fast the program shall run and how much memory it can use), your code shall be correct and pass the tests, etc.
On the other hand, problem statements are still way more formal than a typical business problem you’d encounter in industry. Moreover, some problems may require knowledge of algorithms and data structures so exotic that they are unlikely to be ever used outside of the field of competitive programming. Best performers focus so much on the speed of writing their code and the speed of its execution so that they neglect readability and maintainability of their code, which is very important in industry, yet plays virtually no role in competitive programming.
So in some sense, competitive programming is like a sport. What is the practical usefulness of a skill to score with a football? How can a tennis player apply their precision ball-hitting skill somewhere else? Skills of a professional sportsperson are often so much narrowly focused on a specific sport as to make them of little use outside of the sport. However, unlike athletic sports and even unlike other minds sports, top competitive programmers do not typically end their sports career by moving into coaching or other sport-serving activity. Top competitive programmers often get employed by top IT companies who face problems in need of efficiently designed and flawlessly implemented code. That makes sports programming unique among mind sports.
Another aspect of any sport is the influence it has on children. Athletic sports motivate competitive children to practice, to stay fit. Likewise, mind sports provide an exercise for one’s intelligence. In the past parents would encourage their smart kids to play chess or another mind game to give their brains a challenge and to show off their mental prowess. Nowadays competitive programming can give all of that, plus a good shot at a future employment. In my opinion, in the world increasingly driven by software, that is a very important social function that competitive programming has.
Humanity has lots of problems and needs more trained problem solvers. Top talent needs coaching and forming early in life. Teaching programming in universities and colleges helps satiate the job market hungry for developers, but groundbreaking achievements need minds properly formed since early childhood. All kids are different, but some are competitive and they gain motivation to learn programming because there is competitive programming sport where they can rank themselves among their peers.
That is why I am especially happy that the company I work for (JetBrains) had recently partnered with the largest online community of competitive programmers (Codeforces) to host a series of competitions in a programming language I work on (Kotlin)⁴. This serves several goals. It gives Kotlin community a place to practice their algorithm programming skills in a competitive setting that is quite motivating for many human beings. It also exposes competitive programming community to Kotlin language, allowing Kotlin team to gather feedback. Last, but not the least, it supports competitive programming in general, which is quite a worthy cause, as it is the sport our world really needs more.