Competitive programming is a well known sport among the programming community and is not generally used as a means for children to learn coding. While there are benefits to framing the learning process in a competitive context, there is a lot to consider.
The arguments for and against the use of competition as a tool for learning can be explained across most disciplines. Competition is a great motivator as it directly interacts with our social side in order to achieve results. The power of competition as a motivator makes its use as a learning tool very tempting.
However, competition is not always a positive experience, and conflating competition with learning at a very young age has shown to not always bear positive results, as put forward by John Shindler in his paper Transformative Classroom Management (2009). Competition can take away from the team work ethic, can damage self-esteem, and probably most significantly can establish a fear of failure in children. A negative competitive experience may alienate children from the learning process altogether, and may also spoil relationships among their fellow students.
There are also obviously great benefits to competition - promoting quick learning against other students, providing motivation where it might not already exist, and they are of course a social experience. John Shindler (2009) proposes some solutions for the above problems.
i) Try to reduce meaningful incentives from winning
ii) No competition should last longer than a class period
iii) Use competitive play as a way to reinforce existing knowledge rather than learn new things
iv) Make learning and fun the main aim of the activity rather than competition
In the adult world of programming, competitions are common and enjoyed by many. For children, who are less developed socially and who are just developing, the situation can be more complicated and both the negative and positive effects long-lasting.