Participation in world-level competitions requires a lot of time and efforts from students – that is, alongside regular studies. Moreover, some students also work. What motivates them to take part in international programming contests and what competitive advantages can such experience bring them?
The aricle was written for NRU HSE’s journal Higher Education in Russia and Beyond. I acted as guest editor of the issue dedicated to contemporary computer science education in Russia and former Soviet republics.
My authorship was formally presented only in two articles but actually I worked on seven more. Mostly exactly as editor, nevertheless some articles consists of my text more than a half. I suppose, their appearance in my blog will be rather honest.
This one was officially written by me, M. Gustokashin from HSE, A. Pankratiev and O. Hristenko from MSU, but actually the text is full mine.
The ACM International Collegiate Programming Contest (ICPC) is the largest and most famous programming contest for post-secondary students. The first competition took place in 1977 during ACM Annual Computer Science Conference. Since then it has been organized annually under the auspices of ACM (Association for Computing Machinery).
ACM/ICPC is a team-based competition with certain requirements to the participants: only post-secondary students and first-year post-graduate students no older than 24 are eligible; each team consists of three members. One can participate in the finals no more than twice and in the regionals no more than five times.
Participating teams have to solve as many problems as possible within limited time. Before the finals there are several rounds of regionals (quarter- and semi-finals); universities representing a certain region may send as many teams as they want. However, only one team from a given institution may advance to the World Finals. Every year the finals are held in a different country.
Russian universities took part in ACM/ICPC for the first time in 1993 when the organizers expanded ICPC geography by creating the Eastern Europe Region. Russian teams have won 11 times since 2000: Saratov State University team won once, Saint Petersburg State University team – four times, and ITMO University – six times. The performance of other Russian teams is traditionally high too. In 1996, for example, Moscow State University team advanced to the finals for the first time. After that the team managed to finish world second five times and was awarded gold medals; it also once won silver medals and six times bronze medals.
Naturally, participation in world-level competitions requires a lot of time and efforts – that is, alongside regular studies. Moreover, some students also work. What motivates them to take part in international programming contests and what competitive advantages can such experience bring them?
At most universities the core of the preparation process is solving competition-level problems. At Higher School of Economics, for example, such a process is built in the following way: the best students sit one or two training sessions where all ICPC rules are observed and where they solve problems from earlier competitions. After that they go through the problems in detail or analyze other people’s original solutions. Those with less experience also take classes where cases of practical application of various algorithms are studied. There is a number of problems that students have to solve for each class, and if they have any questions, they can ask for advice.
Students who participate in competitions have to work really hard. Many of them gather together several times a week for 5-6 hours and later spend their own extra time on solving problems. Several times a year they also go to bootcamps where they work intensively every day. Many of the ICPC winners started programming while still in high school and performed well at various Olympiads for high school students.
Why do young people need such competitions at all? Even if we disregard such nice things as a chance to travel and meet like-minded people, even if we put aside such factors as passion for programming and competitive spirit, participation in such contests returns some important dividends.
First of all, competitions stimulate and motivate people to code a lot, so they learn to do it quickly and flawlessly. This is very useful for future professional work. Job applicants are often asked to solve the same problems as those offered during competitions, and those who have relevant experience have higher chances of getting a job.
Secondly, ACM/ICPC achievements are indicative of one’s advanced intellectual abilities. ACM/ICPC participants learn to find optimal solutions for relatively difficult problems, which later helps them process large data sets that come up in real-life projects. Of course there are also a lot of smart people who are used to spending a long time thinking thoroughly over problems. They are capable of solving difficult research problems but competition format allows little time for that, which people without relevant experience often find stressful.
Thirdly, it is of course prestigious. ACM/ICPC participants spend a lot of time and efforts but earning a medal is a great achievement; winners become more attractive for potential employers. IBM, for example, is one of the ACM/ICPC finals regular sponsors; it provides cash prizes for the winners and offers gold-winning team members internship or employment opportunities.
All of the above makes contest participants more competitive on the labor market.
Speaking of university life, there is a wide-spread belief that collegiate programming may be harmful for one’s academic performance. It has indeed happened that top competition participants were expelled for underperformance. However, such cases are rather rare. Moreover, the situation is the same with any other kinds of contests or university-unrelated student activities. It is quite obvious that if a student starts having problems at university, his or her own bad time-management is to blame rather than the fact that he or she participates in coding competitions.
As for university education, competitions help students learn more about dynamic programming, string algorithms, data structures and other topics that often aren’t covered well enough by university curricula.
Finally, many universities hire former participants of programming competitions as teachers or team trainers, so this is another employment opportunity in addition to working in IT companies. Many of the participants find it important that after graduation they will be able to develop professionally in their area of interest.