Competitive programming
Competitive programming is a sport of non-physical kind which is recognized and supported by several groups of enthusiasts, some of which are based upon world-wide known companies, like Google, Facebook, Microsoft etc. As of beginning of 2012 there are no any "central committee", of competitive programming, though there are several major contests kept each year and tens of minor ones, with thousands of contestants participating in each.
Main idea of programming competition usually is in offering some programming problems to contestants, to be solved. Judgement is held upon time spent for writing successful solution, but may also regard effectiveness of solution (if it is not judged simply as right or wrong).
History
Since programming itself is a very recent developed branch of engineering, competitions in programming are also among one of most youngest sports. One of the oldest contest ACM ICPC became worldwide competition in the 1995. Extensive growth of interest to competitive programming during last years is strongly connected with the growth of the internet, which allows to hold international contests online, eliminating geographical problems.
Main idea
Programming is a branch of engineering dedicated to writing computer programs for solving mathematical or logical problems, or any other tasks which could be expressed in such way, including, for example, voice and image recognition, drive control, keeping personal accounts in the banks or social networks etc.
Typically programming some problem could be separated in several steps, like searching for effective algorithm for solution of the problem, implementation of this algorithm, designing user or machine interfaces for a program etc.
Programming contests usually offers problems which mainly examine contestant's ability to invent or find effective algorithm and secondly, to implement it. Most of contest never require participants to work on anything besides these two steps (like program design or style).
Since number of contestants could be very great, competitions usually are organized in several rounds. Worldwide competitions usually require "online" participation in all rounds except last, which require "onsite" participation.
Several best contestants usually receive money prizes. Also hitting the top places in the score table of such competition may attract interest of recruiters from giants of IT-industry.
Competitions
There are few annual world-wide contests for programmers:
- ACM ICPC - one of the oldest competitions, for students of universities in groups of 3 persons each;
- Google Code Jam - competition held from 2003, provided and sponsored by Google;
- Facebook Hacker Cup - competition held from 2011, provided and sponsored by Facebook;
- TopCoder Open - competition held since 2004 by TopCoder.
Online contest and training resources
Community of programmers all around the world created and maintains several internet-resources dedicated to training ability to solve short (but possibly tough) programming problems and to participate in minor competitions without prizes. Among them there are:
- TopCoder - US resource and company, which organizes contests and also provides industrial problems as a kind of free-lance job; it offers dozens of short contests and several long ("marathons") every year.
- SPOJ - Polish online judge system which provides a lot of problems for training, but does not held contests;
- CodeForces - Russian resource, maintained by Saratov State University, which provides short contests and special abilities for training (virtual contests, trainings etc.)