The significance of coding competition to actual work
Some friends asked this question: In secondary schools we participate in the NOI, in university we participate in ACM/ICPC, TopCoder.What's the significance of coding competition to actual work?
I participated in the NOI from 1994 to 1996, ACM/ICPC from 1999 to 2000 and TopCoder in 2002 for six months. Later I paid little attention to coding competition, so I may not understand the changes in recent years and race mode .
The capabilities we can get by participating the competition can be summarized below:
1, Basic technical skills. People who participate in the competition and get good results should have three very good abilities: algorithm design, fast programming and self-commissioning. These are the capabilities each competition requires. Given a problem, programmers need to design algorithm and write programs quickly and try to find the defects in the program as soon as possible and then refine the design. These three basic capabilities are very useful in our actual work. Most of the company's technical interview focus on these three basic skills. The contest experience of the excellent contestants get many advantages in actual work and generally excellent IOI/ICPC/TopCoder participants can easily get hired by the company.
3, Communication skills. The ability to express is very important in actual work: modern large software systems cannot be done completed by one hero, if the algorithms and programs of a subsystem can not be clearly understood, then that subsystem and its author becomes single point of failure (Single Point Of Failure) - as long as the author is on vocation, no one is able to maintain or expand this part. Based on this risk, we prefer to use a solution which is slower and more memory eager but can be read and understood by others. During some recruitment cases in the past two years, I have seen many such pity examples: many ACM/ICPC players can write a very clever algorithms to compile on the machine and pass tests in 15 minutes However, they failed to make it clear why this algorithm is correct and why to use this algorithm.
4. Ability to cooperate: NOI/IOI/TopCoder foces more on single-handedly, while ACM/ICPC needs the ability to cooperate. Three programming experts share a machine, scarce resources, they need to decide how to divide the work and who is going to use the machine first. These problems are encountered in actual work every day, if a player in the ICPC learns how to coordinate with teammates and how to foster trust, then he will adapt to the team quickly and contribute to the team.
5, Making friends: Generally speaking, people are willing to spend extra time on taking part in the competition should like to write programs, because of interest, they tend to be more likely to get better and better and they may have common topics. We can make a lot of good friends and we can exchange the latest industry information and trends timely. This may not have direct help to actual work, but I think it is the most precious thing in the contest.
These are probably some of the most useful things I learned from these competitions.
The author of this article is now working in Facebook.
Author : 魏小亮 Source :http://blog.sina.com.cn/s/blog_87f330d301019v0j.html