We, humans, tend to compete with each other in everything we do, and that is probably one of the key reasons for our success as a species.
Programming is no exception. As coding is quite a complex, multilayered and demanding discipline, it should come as no surprise that coders are keen to compete with each other to find out who’s the most capable.
What is competitive programming?
Competitive programming is a type of mind sport that involves participants in solving coding problems using their skills in programming and knowledge of CS disciplines such as algorithms and data structures
The participants of such competitions, also called sport programmers, need to write code under various restrictions and in line with provided specifications. In order to win, a sport programmer needs to come up with the code that would be a solution to the task provided. The winner is declared based on a number of criteria such as the time spent, quality of the final code, execution time, size of the program, etc.
A lot of large tech companies, such as Google, Facebook, Amazon, Microsoft and others, support competitive programming and participate in organizing competitions, while also hiring talented sport programmers.
The International Collegiate Programming Contest (ICPC), which originated in the 1970s, is known as the oldest competitive programming competition. Although this mind sport has gained mass popularity only since the 2000s with the growth of Internet companies and tech businesses.
Benefits of competitive programming
Here's a quick list of benefits that you can get participating in competitive programming as a professional coder.
- Improved programming skills, such as logic and algorithms, basic math, data structures, computational thinking, debugging, and so on.
- Great addition to your professional portfolio and CV.
- Chances to get noticed by market leaders and get some attractive job offers.
- Way to practice different aspects of coding.
- Social connections and networking in the developers community.
- Exciting and competitive contests.
Competitive programming platforms
These are some of the most popular competitive programming platforms available on the Internet.
CodeChef is a competitive programming community with hundreds of challenges and several new contests every month.
Codewars is a coding online community with programming challenges. Allows you to submit your own challenges, which will be evaluated by other users.
One of the most popular competitive programming platforms out there. It hosts regular competitive programming marathons every year and offers dozens of challenges.
HackerEarth has over 10,000 programming challenges of varying difficulty available to everyone.
Codeforces is a Russian competitive programming platform that has hundreds of programming challenges and frequently hosts all kinds of contests.
Offers programming challenges in different domains of computer sciences and hosts annual Codesprints and other competitive programming contests.
Competitive programming competitions
There are dozens of competitive programming competitions being held every year. Here are some of the most popular and prestigious ones.
- ICFP Programming Contest
An international programming competition held annually around June or July since 1998.
- Topcoder Marathon Matches
Popular among the competitive programming community contests with considerable cash prizes. Topcoder’s marathons usually last about two weeks, giving participants a chance to improve their solutions. Each match has a different scoring mechanism that'll output every solution's quality.
- CodeChef Long Challenge
CodeChef Long Challenge is a monthly contest that lasts up to 10 days.
- Facebook Hacker Cup
Hacker Cup is Facebook's annual open programming competition. Open to participants around the world, it consists of multiple rounds with considerable prizes on stake.
- Google Code Jam
Google Code Jam is an international programming competition hosted and administered by Google. Held annually since 2003.
- American Computer Science League (ACSL)
American Computer Science League (ACSL) organizes computer science and programming contests for middle and high school students.
- International Collegiate Programming Contest (ICPC)
International Collegiate Programming Contest is an algorithmic programming contest for college students. One of the oldest competitive programming competitions out there.
Tips and recommendations
Let’s conclude with some tips and recommendations that may be helpful if you are willing to get into competitive programming.
- Choose a programming language.
This is quite obvious, but still worth mentioning. You should start with choosing a programming language you are most comfortable with to use it in competitive programming. C++, Java, Python are the most common and universally accepted across the majority of competitive programming contests.
- Develop a good knowledge of data structures and algorithms.
Knowing at least the basics of data structures and algorithms is essentially important to successfully solve competitive programming challenges. Check our articles on algorithms
and data structures
for the links to learning materials on these topics.
- Find your coding style and approach to programming challenges.
The majority of challenges that participants of competitive programming challenges need to solve have more than one solution. The goal is to come up with the optimal solution. So it makes sense to focus on developing your unique coding style and approach to these programming challenges that would allow you to code the best solutions in terms of time and spice your code needs for execution.
- Try different competitive programming websites and contests.
Even though in all competitive coding contests and challenges you would need to solve algorithmic problems, the style of these problems and the requirements to contestants may vary in a number of ways, from the approach to difficulty and time-sensitivity. So it is recommended to try at least several different problems to have a better feeling of competitive programming in general.
- Keep solving programming problems regularly.
Regular practice is important to succeed in pretty much anything, but in competitive programming, it is especially true. The development of the proper mindset and approach to coding problems takes a lot of regular training. You don’t have to limit yourself to the specialized platforms listed above, especially in the beginning when the competitive programming problems may feel too challenging. You can use CodeGym with its over 1200 Java coding tasks to practice, as well as coding games
or technical interview prep platforms