Competitive programming: Difference between revisions

Content deleted Content added
Google CodeJam Shutdown
See also: Datathon
 
(101 intermediate revisions by 43 users not shown)
Line 1:
{{Short description|Mind sport}}
{{third-party|date=February 2018}}
[[File:ЯндексАлгоритм.jpg|300px|thumb|[[Petr Mitrichev]] (left) and [[Gennady Korotkevich]] (right), two prominent competitive programmers during a contest.]]
 
{{Use mdy dates|date=March 2024}}
'''Competitive programming''' (also known as '''sports programming''') is a [[mind sport]] usually held over the [[Internet]] or a [[local network]], involving participants trying to [[Computer programming|program]] according to provided specifications. Contestants are referred to as ''sport programmers''. Competitive programming is recognized and supported by several multinational software and [[Internet]] companies, such as [[Google]]<ref>{{cite web|url=http://code.google.com/codejam|title=Google Code Jam|work=google.com|accessdate=2016-02-20}}</ref><ref>{{cite web|url=http://community.topcoder.com/tco12/overview-sponsor/tco12-sponsor-google/ |title=TCO12 Sponsor: Google - TCO 12 |work=topcoder.com |url-status=dead |archiveurl=https://web.archive.org/web/20120216103218/http://community.topcoder.com/tco12/overview-sponsor/tco12-sponsor-google/ |archivedate=February 16, 2012 }}</ref> and [[Facebook]].<ref>{{cite web|url=http://www.facebook.com/hackercup|title=Facebook Hacker Cup|work=Facebook|accessdate=2016-02-20}}</ref>
 
[[File:ЯндексАлгоритм.jpg|thumb|[[Petr Mitrichev]] (left) and [[Gennady Korotkevich]] (right), two prominent competitive programmers during the 2013 [[Yandex]] algorithm cup|alt=Two men sitting at desks with a computer and papers sprawled on them.]]
A programming competition generally involves the host presenting a set of [[logic]]al or [[mathematical problem]]s, also known as [[puzzle]]s or challenges, to the contestants (who can vary in number from tens or even hundreds to several thousands). Contestants are required to write [[computer program]]s capable of solving these problems. Judging is based mostly upon number of problems solved and time spent for writing successful solutions, but may also include other factors (quality of output produced, execution time, memory usage, program size, etc.).
 
'''Competitive programming''' or '''sport programming''' is a [[mind sport]] involving participants trying to [[computer programming|program]] according to provided specifications. The contests are usually held over the [[Internet]] or a [[local network]]. Competitive programming is recognized and supported by several multinational software and [[Internet]] companies, such as [[Google]],<ref>{{cite web|url=http://code.google.com/codejam|title=Google Code Jam|work=google.com|accessdate=2016-02-20|archive-date=2023-05-31|archive-url=https://web.archive.org/web/20230531191912/http://code.google.com/codejam/|url-status=dead}}</ref><ref>{{cite web|url=http://community.topcoder.com/tco12/overview-sponsor/tco12-sponsor-google/ |title=TCO12 Sponsor: Google - TCO 12 |work=topcoder.com |url-status=dead |archiveurl=https://web.archive.org/web/20120216103218/http://community.topcoder.com/tco12/overview-sponsor/tco12-sponsor-google/ |archivedate=February 16, 2012 }}</ref> and [[Meta Platforms|Meta]].<ref>{{cite web|url=http://www.facebook.com/hackercup|title=Facebook Hacker Cup|work=Facebook|accessdate=2016-02-20}}</ref>
 
A programming competition generally involves the host presenting a set of [[logic]]al or [[mathematical problem]]s, also known as [[puzzle]]s or challenges, to the contestants (who can vary in number from tens or even hundreds to several thousand). Contestants are required to write [[computer program]]s capable of solving these problems. Judging is based mostly upon number of problems solved and time spent on writing successful solutions, but may also include other factors (quality of output produced, execution time, memory usage, program size, etc.).
 
== History ==
One of the oldest contests known is the [[International Collegiate Programming Contest]] (ICPC) which originated in the 1970s,<ref>{{Cite journal |last1=Li |first1=Yujia |last2=Choi |first2=David |last3=Chung |first3=Junyoung |last4=Kushman |first4=Nate |last5=Schrittwieser |first5=Julian |last6=Leblond |first6=Rémi |last7=Eccles |first7=Tom |last8=Keeling |first8=James |last9=Gimeno |first9=Felix |last10=Lago |first10=Agustin Dal |last11=Hubert |first11=Thomas |last12=Choy |first12=Peter |last13=d'Autume |first13=Cyprien de Masson |last14=Babuschkin |first14=Igor |last15=Chen |first15=Xinyun |date=2022-12-09 |title=Competition-Level Code Generation with AlphaCode |journal=Science |volume=378 |issue=6624 |pages=1092–1097 |doi=10.1126/science.abq1158 |issn=0036-8075|arxiv=2203.07814 }}</ref> and has grown to include 88 countries in its 2011 edition.
 
From 1990 to 1994, [[Owen Astrachan]], Vivek Khera and David Kotz ran one of the first distributed, internet-based programming contests inspired by the ICPC.<ref>{{cite journal |last1=Khera |first1=Vivek |last2=Astrachan |first2=Owen |last3=Kotz |first3=David |title=The internet programming contest |url=https://www.cs.dartmouth.edu/~dfk/papers/astrachan-contest.pdf |journal=ACM SIGCSE Bulletin |volume=25 |issue=1 |year=1993 |pages=48–52 |issn=0097-8418 |doi=10.1145/169073.169105 |access-date=2020-03-10 |archive-date=2017-08-08 |archive-url=https://web.archive.org/web/20170808235401/http://cs.dartmouth.edu/~dfk/papers/astrachan-contest.pdf |url-status=dead }}</ref>
 
Interest in competitive programming has grown extensively since 2000 to tens of thousands of participants (see [[Competitive programming#Notable competitions|Notable competitions]]), and is strongly connected to the growth of the Internet, which facilitates holding international contests online, eliminating geographical problems.
 
== Overview ==
The aim of competitive programming is to write [[source code]] of computer programs which are able to solve given problems. A vast majority of problems appearing in programming contests are mathematical or logical in nature. Typical such tasks belong to one of the following categories: [[combinatorics]], [[number theory]], [[graph theory]], [[algorithmic game theory]], [[computational geometry]], [[String (computer science)|string analysis]], [[discrete mathematics]] and [[data structure]]s.<ref>{{Cite web |last=Pak |first=Igor |title=Algorithms |url=https://www.math.ucla.edu/~pak/courses/182-Summer-2022/182-Summer-2022.html |access-date=March 31, 2024 |website=Math 182 |publication-place=University of California, Los Angeles}}</ref> Problems related to [[constraint programming]] and [[artificial intelligence]] are also popular in certain competitions.
 
Irrespective of the problem category, the process of solving a problem can be divided into two broad steps: constructing an efficient [[algorithm]], and implementing the algorithm in a suitable [[programming language]] (the set of programming languages allowed varies from contest to contest). These are the two most commonly tested skills in programming competitions.
 
In most contests, the judging is done automatically by host machines, commonly known as judges. Every solution submitted by a contestant is run on the judge against a set of (usually secret) test cases. Normally, contest problems have an all-or-none marking system, meaning that a solution is "Accepted" only if it produces satisfactory results on all test cases run by the judge, and is rejected otherwise. However, some contest problems may allow for partial scoring, depending on the number of test cases passed, the quality of the results, or some other specified criteria. Some other contests only require that the contestant submit the output corresponding to given input data, in which case the judge only has to analyze the submitted output data.
 
Online judges are online environments in which testing takes place. Online judges have ranklistsrank lists showing users with the biggest number of accepted solutions and/or shortest execution time for a particular problem.<ref>[https[iarchive://www.amazon.com/Programming-Challenges-Steven-S-Skiena/dp/0387001638 programmingchall0000skie|Programming Challenges (Skiena & Revilla)]] {{ISBN|0387001638}}, {{ISBN|978-0387001630}}</ref>
 
== Notable competitions ==
<!-- PLEASE RESPECT ALPHABETICAL ORDER -->
=== Algorithm competitions ===
=== Algorithm competitions<ref>{{Cite book |last=Kostka |first=Bartosz |url=https://kostka.dev/sp/spbook.pdf |title=Sports Programming in Practice |publisher=University of Wrocław |year=2021}}</ref> ===
{| class="wikitable"
|+
!Name of the competition<ref>{{Cite book |last=Kostka |first=Bartosz |url=https://kostka.dev/sp/spbook.pdf |title=Sports Programming in Practice |publisher=University of Wrocław |year=2021}}</ref>
!Name of the competition
!Organizers
!Audience
!Description
!Number of participants
!Website
|-
|[[Google Code Jam]] (GCJ)
|[[Google]]
|open
|Annual competition organized and sponsored by [[Google]] from 2003 until its cancellation in 2023.<ref>{{cite web |title=Celebrate Google’sGoogle's Coding Competitions with a final round of programming fun |url=https://developers.googleblog.com/2023/02/celebrate-googles-coding-competitions.html |website=Google Developers Blog |publisher=Google |access-date=28 February 2023}}</ref>.
|32,702 (2022)<ref>{{Cite web |title=Code Jam - Google’sGoogle's Coding Competitions |url=https://codingcompetitions.withgoogle.com/codejam/round/0000000000876ff1 |access-date=2023-02-26 |website=Coding Competitions |language=en |archive-date=2023-06-27 |archive-url=https://web.archive.org/web/20230627024458/https://codingcompetitions.withgoogle.com/codejam/round/0000000000876ff1 |url-status=dead }}</ref>
|https://codingcompetitions.withgoogle.com/codejam
|-
|[[International Collegiate Programming Contest]] (ICPC)<ref>{{Cite web |title=ICPC |url=https://icpc.global/static/media/mainLogoMobile.12b91576.png |access-date=2023-02-26 |website=icpc.global |language=en}}</ref>
|ICPC Foundation
|university studentstudents
|Team competition for university students, the contest consists of many regional rounds that conclude in a world final organized yearly. Teams consist of three students from the same university and they are allowed to use only one computer.<ref>{{Cite web |title=Programming Environment – ICPC Documents |url=https://docs.icpc.global/worldfinals-programming-environment/ |access-date=2024-02-15 |language=en-US}}</ref>
|50,000+ (2022)<ref>{{Cite web |title=ICPC |url=https://icpc.global/static/media/mainLogoMobile.12b91576.png |access-date=2023-02-26 |website=icpc.global |language=en}}</ref>
|https://icpc.global/
|-
|[[International Olympiad in Informatics]] (IOI)
Line 54 ⟶ 53:
|International competition for secondary school students. Organized yearly since 1989. Each country can send at most 4 participants to compete.
|349 from 88 countries (2022)<ref>{{Cite web |title=Olympiads |url=https://stats.ioinformatics.org/olympiads/ |access-date=2023-02-26 |website=stats.ioinformatics.org}}</ref>
|https://ioinformatics.org/
|-
|[[Facebook Hacker Cup|Meta Hacker Cup]] (formerly ''Facebook Hacker Cup'')
Line 61 ⟶ 59:
|Annual competition held since 2011. Organized and sponsored by [[Meta Platforms|Meta]] (formerly [[Facebook]]).
|27,604 (2022)<ref>{{Cite web |title=Meta Hacker Cup - 2022 - Qualification Round |url=https://www.facebook.com/codingcompetitions/hacker-cup/2022/qualification-round |access-date=2023-02-26 |website=www.facebook.com}}</ref>
|https://www.facebook.com/codingcompetitions/hacker-cup
|-
|[[Topcoder Open]] (TCO)
|[[Topcoder]]
|open
|Annual algorithm competition held from 2001 until its cancellation in 2023<ref>{{cite web |title=FAQ - Topcoder Community Town Hall with Doug Hanson, Topcoder CEO |url=https://discussions.topcoder.com/discussion/26097/faq-topcoder-community-town-hall-with-doug-hanson-topcoder-ceo |website=Topcoder |access-date=28 February 2023 |language=en}}</ref>
|Annual algorithm competition held since 2001.
|
|https://www.topcoder.com/community/member-programs/topcoder-open/
|}
In most of the above competitions, competitions are usually organized in several rounds. They usually start with online rounds, which conclude in the onsite final round. The top performers at IOI and ICPC receive gold, silver and bronze medals. In the other contests, cash prizes are awarded to the top finishers. The competitions also attract the interest of recruiters from multiple software and Internet companies, which often reach out to competitors with potential job offers.
 
=== Artificial intelligence and machine learning<ref>{{cite web |title=14 Active AI Game Competitions to Check Out in 2022 (Ongoing & Upcoming)|work=www.gocoder.one|url=https://www.gocoder.one/blog/ai-game-competitions-list}}</ref> ===
* [[Kaggle]] – data science and machine learning competitions.
* CodeCup – board game AI competition held annually since 2003. Game rules get published in September and the final tournament is held in January.<ref>{{cite web|url=https://www.codecup.nl/intro.php|title = CodeCup|work=www.codecup.nl}}</ref><ref name="hak11">Lasse Hakulinen. [https://www.academia.edu/1606336/Survey_on_Informatics_Competitions_Developing_Tasks Survey on Informatics Competitions: Developing Tasks] – Olympiads in Informatics, 2011, Vol. 5, 12–25.</ref><ref name="les14"/>
* Google [[AI Challenge]] – bi-annual competitions for students that ran 2009 to 2011.
*[[Halite AI Programming Competition|Halite]]<ref>{{cite web|url=https://www.halite.io|title=Halite Artificial Intelligence Programming Challenge|work=www.halite.io}}</ref> – An AI programming challenge sponsored by Two Sigma, Cornell Tech,<ref>{{cite web|url=https://tech.cornell.edu/news/two-sigma-announces-public-launch-of-halite-ai-coding-game|title=Two Sigma Announces Public Launch of Halite|work=tech.cornell.edu|date=2 November 2016}}</ref> and Google.<ref>{{cite web|url=https://cloud.google.com/blog/big-data/2017/10/halite-helps-students-and-developers-compete-to-build-better-ai-on-google-cloud-platform|title=Halite helps students and developers compete to build better AI on Google Cloud Platform}}</ref>
* [[Russian AI Cup]] – open artificial intelligence programming contest.
* [[CodinGame]] – hosts seasonal bot programming competitions.
 
* List may be incomplete
===Contests focusing on open source technologies===
 
{| class="wikitable"
!Name
!Main Organizers
!Description
!Status
|-
|[[Kaggle]]
|Google
|Data science, machine learning and mathematical optimization competition platform and online community.
|Active
|-
|[[AI Challenge]]
|University of Waterloo
|International artificial intelligence programming contest that ran from 2009 to 2011.
|Inactive
|-
|[[Halite AI Programming Competition]]
|Two Sigma, Cornell Tech
|Computer programming contest where participants build bots in desired programming language to compete on a two-dimensional battlefield.
|Unknown
|-
|[[Russian AI Cup]]
|Mail.Ru Group, My.com
|Annual artificial intelligence programming contest.
|Unknown
|}
 
===Contests focusing on open-source technologies===
*List may be incomplete
{| class="wikitable" border="1"
Line 102 ⟶ 121:
| [[Google Summer of Code]]
| [[Google Inc.]]
| An annual program in which Google awards stipends[[stipend]]s to hundreds of students who successfully complete a requested free software / open-source coding project during the summer.
| 2005
| Mar-Aug
Line 110 ⟶ 129:
| [[Google Highly Open Participation Contest]]
| Google Inc.
| A contest run by Google in 2007-8 aimed at high school students. The contest is designed to encourage high school students to participate in open -source projects.
| 2007
| Nov-Feb
Line 118 ⟶ 137:
 
== Online platforms ==
The programming community around the world has created and maintained several internet-resources dedicated to competitive programming. They offer standalone contests with or without minor prizes. AlsoUsers thewill pasttypically be assigned a rating based on their performance on said contests. The archives of past problems are a popular resourceresources for training in competitive programming. There are several organizations whothat host programming competitions on a regular basis. These include:
{| class="wikitable sortable"
|-
! style="min-width:25%" | Name
! Description
! style="min-width:15%" | [[Website]]
|-
|[[Advent of Code]]
|[https://www.beecrowd.com.br beecrowd]
|An annual programming competition taking place during [[Advent]], with a new pair of puzzles released each day, up to and including Christmas Day. The second problem of each day is locked until the completion of the first part, and usually follows on from it logically. There are both global and private leaderboards for each year, where rankings are based on who solves the problem first.
|Largest competitive programming platform based in Latin America. Contains 2300+ programming challenges in 3 different languages (English, Portuguese and Spanish), classified in 9 categories and 10 different levels of difficulty. It hosts frequent competitions sponsored by corporations and by themselves. It was formerly known as URI Online Judge.
|[https://www.beecrowd.com.br www.beecrowd.com.br]
|-
|[[CodeChef]]<ref name="Luigi16"/><ref name="oi_vol8"/>
| Maintained by Unacademy, it hosts a 3-day-long contest and a couple of short contests every month (one IOI styled called Lunchtime and otheranother ICPC styled called Cook-Off), and provides a contest hosting platform to educational institutions for free. The top two winners of the long contest win cash prizes while the top 10 global get a t-shirt.
| {{url|www.codechef.com}}
|-
|CodeCup
|Annual international board game [[Artificial intelligence|AI]] programming competition organized by the Dutch Olympiad in Informatics since 2003.<ref name="hak11"/><ref name="les14">{{cite web|url=http://lesley.ws/files/polyy14.pdf|title=Monte-Carlo Tree Search for Poly-Y|last=Wevers|first=Lesley|year=2014|accessdate=16 September 2018|___location=[[University of Twente]]|archive-url=https://web.archive.org/web/20170413210719/http://lesley.ws/files/polyy14.pdf|archive-date=13 April 2017}}</ref>
|{{URL|CodeCup.nl}}
|-
|[[Codeforces]]<ref name="sigcse16"/><ref name="Luigi16"/>
| Russian resourceplatform, maintained by [[ITMO University]], which mostly provides frequent (up to two per week) short2-3 hour contests. Special(available features:in allEnglish solutionsand areRussian). [[openUsers source]],can abilityalso toparticipate checkon correctnesscontests ofpublished by other contestants'users solutionson duringthe "hacking phasegym" section, virtualsubmit additional test cases to "hack" submissions from other competitors during contests, trainingswrite etcblogs to share techniques with one another and see the source code for the solutions from other users. Contestants that achieve a high enough rating may be granted additional features like being able to add tags to problems and propose problem sets to official contests.
| {{URL|codeforces.com}}
|-
| [[CodinGame]]
| [[Puzzle]]s (increasing difficulty), [[code golf]]. Hosts regular online competitions ([[Artificialcoding intelligence|AI]]games сhallenges,and [[optimizationprogramming problem]]schallenges).
|-
| {{url|www.codingame.com}}
|[[Codewars]]
|A community-driven platform with in [[Online integrated development environment]] where users solve [[kata]]—small coding challenges—in a wide variety of languages. Users earn ranks and honor as they complete challenges and create new ones. Emphasizes learning through practice and peer review, with solutions and discussions available after each challenge is completed.
|-
|[[HackerEarth]]<ref name="Luigi16"/> || [[Bangalore]], [[India]] based company providing an online contest like environment aiming at providing recruitment assessment solutions.
| {{url|www.hackerearth.com}}
|-
|[[HackerRank]]
| HackerRank offers programming problems in different domains of Computer Science. It also hosts annual Codesprints which help connect the coders and [[Silicon Valley]] startups.
|- id="leetcode"
| {{URL|hackerrank.com}}
|[[Leetcode|LeetCode]]
|LeetCode has over 2,300 questions covering many different programming concepts and offers weekly and bi-weekly contests. The programming tasks are offered in English and Chinese.
|-
|[[Project Euler]]<ref name="oi_vol8">{{cite journal |url=https://ioinformatics.org/journal/v8_2014_21_34.pdf |first1=Sébastien |last1=Combéfis |first2=Jérémy |last2=Wautelet |title=Programming Trainings and Informatics Teaching Through Online Contests |journal=Olympiads in Informatics |year=2014 |volume=8 |pages=21–34 }}</ref> || Large collection of [[Computational mathematics|computational math]] problems (i.e. not directly related to programming but often requiring programming skills for solving). Different from other online judges, source code is not necessary to submit solutions. Instead, each problem just requires a numerical answer (which is normally too large to guess or calculate by hand), allowing users to use any methods they see fit for solving the problems, including whether or not to choose a programming language.
|-
|{{URL|projecteuler.net}}
|[[SPOJ]]<ref name="Luigi16">{{cite journal |last1=Luigi |first1=William Di |first2=Gabriele |last2=Farina |first3=Luigi |last3=Laura |first4=Umberto |last4=Nanni |first5=Marco |last5=Temperini |first6=Luca |last6=Versari |title=oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System |url=https://ioinformatics.org/journal/v10_2016_207_222.pdf |journal=Olympiads in Informatics |year=2016 |volume=10 |pages=207–222 |doi=10.15388/ioi.2016.13 |s2cid=6877554 }}</ref>
|Polish [[online judge]] system which provides a lot of problems for training, and provides a platform for other organizers to host their programming contests.
|-
|[[Topcoder]]<ref name="sigcse16"/><ref name="Luigi16"/>
| 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. Specific feature - participants have a chance to check the correctness of other contestants' solutions after the coding phase and before final automatic testing (so -called "challenge phase").
| {{URL|www.topcoder.com }}
|-
|[[UVa Online Judge]]<ref name="sigcse16"/><ref name="Luigi16"/>
| Contains over 4,500 problems for practising. Hosts regular online competitions. Opened in 1995, it is one of the oldest such websites.
| {{URL|onlinejudge.org}}
|-
|[[SPOJ]]<ref name="Luigi16">{{cite journal |last1=Luigi |first1=William Di |first2=Gabriele |last2=Farina |first3=Luigi |last3=Laura |first4=Umberto |last4=Nanni |first5=Marco |last5=Temperini |first6=Luca |last6=Versari |title=oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System |url=https://ioinformatics.org/journal/v10_2016_207_222.pdf |journal=Olympiads in Informatics |year=2016 |volume=10 |pages=207–222 |doi=10.15388/ioi.2016.13 }}</ref>
|Polish [[online judge]] system which provides a lot of problems for training, and provides a platform for other organizers to host their programming contests.
|{{URL|www.spoj.com}}
|-
|Open Kattis
| Public version of the Kattis contest management system, with an archive of over 2600 problems.<ref name="sigcse16"/> Kattis was developed to aid computer science courses, but it's also used to host prestigious competitions, like ICPC World Finals.<ref>{{cite journal |author1=Enström, E. |author2=Kreitz, G. |author3=Niemelä, F. |author4=Söderman, P. |author5=Kann, V. |year=2011 |title=Five years with Kattis – using an automated assessment system in teaching |journal=IEEE Frontiers in Education Conference |url=https://www.csc.kth.se/~gkreitz/kattis-fie11/kattis-fie11.pdf }}</ref>
| {{URL|open.kattis.com}}
|-
| AtCoder
| Based in Japan, AtCoder offers online programming contests on a weekly basis. The contests are offered in Japanese and English.
As of 2020, it is one of the most popular platforms of its kind.<ref>{{cite journal |title=Codeforces as an Educational Platform for Learning Programming in Digitalization |first1=Mike |last1=Mirzayanov |first2=Oksana |last2=Pavlova |first3=Pavel |last3=Mavrin |first4=Roman |last4=Melnikov |first5=Andrew |last5=Plotnikov |first6=Vladimir |last6=Parfenov |first7=Andrew |last7=Stankevich |url=https://ioinformatics.org/files/volume14.pdf |issn=1822-7732 |journal=Olympiads in Informatics |volume=14 |year=2020}}</ref>
|{{URL|atcoder.jp}}
|-
| Timus
| Contains problems from competitions in the Ural region.
| {{URL|acm.timus.ru}}
|-
| VJudge
| Contains problems from many online judges.
| {{URL|vjudge.net}}
|-
| Baekjoon OJ
| Korean online judge.
| {{URL|acmicpc.net}}
|-
|LeetCode
|LeetCode has over 2,300 questions covering many different programming concepts and offers weekly and bi-weekly contests. The programming tasks are offered in English and Chinese.
|[https://leetcode.com/ leetcode.com]
|}
 
Line 196 ⟶ 181:
Participation in programming contests may increase student enthusiasm for [[computer science]] studies. The skills acquired in ICPC-like programming contests also improve career prospects, as they help to pass the "technical interviews", which often require candidates to solve complex programming and algorithmic problems on the spot.<ref name="sigcse16">{{cite journal |url=https://people.cs.uchicago.edu/~borja/pubs/sigcse2016-programming-contests.pdf |title=A Programming Contest Strategy Guide |first1=Aaron |last1=Bloomfield |first2=Borja |last2=Sotomayor |journal=SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education }}</ref><ref>{{Cite journal|last=Jackson|first=Dean|date=December 1, 2013|title=The Google Technical Interview. How to Get Your Dream Job.|url=http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41881.pdf|journal=XRDS: Crossroads, the ACM Magazine for Students|volume=20|issue=2|pages=12–14|doi=10.1145/2539270|s2cid=27549057}}</ref>
 
There has also been criticism of competitive programming, particularly from professional [[Software development|software developers]].<ref name="rg15"/> One critical point is that many fast-paced programming contests teach competitors bad programming habits and code style (like unnecessary use of [[Macro (computer science)|macros]], lack of [[Object-oriented programming|OOP]] abstraction and comments, use of short variable names, etc.).<ref>{{cite web |url=https://www.comp.nus.edu.sg/~stevenha/cs3233.html |title=CS3233 - Competitive Programming |last=Halim |first=Steven |website=NUS School of Computing }}</ref><ref name="rg15"/> Also, by offering only small algorithmic puzzles with relatively short solutions, programming contests like ICPC and IOI don'tdo not necessarily teach good [[software engineering]] skills and practices, as real software projects typically have many thousands of [[Source lines of code|lines of code]] and are developed by large teams over long periods of time.<ref name="rg15">{{cite web |url=https://www.redgreencode.com/the-competitive-programming-debate/ |title=The Competitive Programming Debate |date=December 2, 2015 |first=Duncan |last=Smith }}</ref> [[Peter Norvig]] stated that based on the available data, being a winner of programming contests correlated negatively with a programmer's performance at their job at Google (even though contest winners had higher chances of getting hired).<ref>{{cite web |url=https://www.youtube.com/watch?v=DdmyUZCl75s |title=Winning at programming competitions is a negative factor for being good on the job |website=[[YouTube]] |date=April 5, 2015}}</ref> Norvig later stated that this correlation was observed on a small [[data set]], but that it could not be confirmed after examining a larger data set .<ref>{{cite web |url=https://news.ycombinator.com/item?id=25425718#up_25426329 |title=HN discussion on correlation between job performance and competitive programming |date=December 2020}}</ref>{{Unreliable source?|date=June 2021}}
 
Yet another sentiment is that rather than "wasting" their time on excessive competing by solving problems with known solutions, high-profile programmers should rather invest their time in solving real-world problems.<ref name="rg15"/>
Line 203 ⟶ 188:
* Halim, S., Halim, F. (2013). ''Competitive Programming 3: The New Lower Bound of Programming Contests''. Lulu.
* Laaksonen, A. (2017). ''Guide to Competitive Programming'' (Undergraduate Topics in Computer Science). Cham: Springer International Publishing.
* Xu, X. (2020) ''The development, prosperity and decline of Olympic in Informatics''. Published [https://archive.org/details/oi.pdf online].
* Kostka, B. (2021). ''Sports programming in practice.'' University of Wrocław.
 
== See also ==
* [[Algorithmic Puzzles]]
* [[:Category:Computer science competitions]]
* [[Code golf]]
* [[Game jam]]
* [[Hackathon]]
* [[Hackathon#Datathon|Datathon]]
 
== References ==
{{Reflist|refs=https://www.atlantis-press.com/proceedings/icaicte-13/8933}}
 
== External links ==
;Open-source project for running contests
*[https://github.com/cms-dev/cms Contest Management System] Open-source tool in Python to run and manage a programming contest on a server [[International Olympiad in Informatics|IOI 2012 and IOI 2013]].
 
[[Category:Programming contests|*]]