What do people find so attractive about competitive programming?
I always liked programming, but I especially enjoyed competitive programming when I was in high school and college. I think its fundamental difference from normal programming comes from how contest problems are broken down into small, independent challenges. This leads to:
- Lower time commitment. With normal programming, a big project might take weeks or months of work, but a programming contest problem will take hours or even less, so you can pick them up and do them whenever you want.
- The ability to focus time on problems at the right level of difficulty. Normal programming projects consist of some work that is easy and some that is hard. Only a fraction of time on the project will generally go to the kind of work that pushes your limits at just the right level.
- Faster feedback. You can learn much faster when you have a faster feedback loop. In large programming projects people often don’t learn lessons for years when they see how a system is difficult to maintain or has trouble scaling. With contest problems you learn immediately what you did wrong and you can reflect on how to avoid that category of problems for next time.
All of these properties make competitive programming problems as engaging as playing a game, but they can be much deeper than a game because of the complexity and closer connection to real-world applications. The “competition” aspect is almost incidental. It is a source of motivation for some people, but you can get most of the benefits from just doing the problems outside of a contest.