The primary reason why people compete in programming contests is that they enjoy it. For many, programming is actually fun, at least until they get a job doing it and their desire is burnt out of them. It is also a good way to meet people with similar interests to your own. But for those of you who need additional incentive, it is also a good way to increase others awareness of you. Major programming competitions are always monitored by people looking for new talent for their organizations, sometimes these are the people who actually fund the contest. High school programming contests (such as the ones sponsored by the BPA) often are to help prepare students for college or careers in computer programming. These contests often attract scouts from colleges looking to award scholarships to these individuals. For example, IBM is currently funding the ICPC, a contest that costs them millions annually. Why would they pay so much for a programming contest? They view it as an investment. It lets them filter through the talent and get to those that could potentially make IBM much more money in the long run. Before IBM the contest was funded by Microsoft for the same reasons. Organizations that feel like they can't quite afford the huge price tag associated with ICPC have begun to fund cheaper contests, such as TopCoder, and in the case of Google, running their own contest through TopCoder's technology.

The first thing needed to get started is proficiency in a programming language and familiarity with a text editor/development environment. The two languages common to all of the above programming competitions are C++ and Java. These languages will be used throughout this document. There are many books and tutorials available to learn these languages, in addition to an unending amount of freely available code on the internet.

In a competitive programming environment the value of a programming language differs from a software engineering environment. While good software engineering practices will not hurt you in completing a task, they can often consume valuable time with little benefit. Many software engineering techniques are designed for projects with many programmers and projects that take a large amount of time to complete. In a programming competition these conditions no longer hold. Most times it is a single programmer working on a task, with very little time in which to complete it. Also, some programming contests test a programmer's skills in a specific language.