Programming Contests - Worthwhile for Real Life?
Ustaad asks: "We are running some sort of a club in our University which has members who are interested in programming and related stuff. With many sites like TopCoder and Valladolid Online Judge providing heavy machinery practice equipments to programmers, the level of competition in programming contests like ACM ICPC have gone really high. However, we are finding it really difficult to motivate new entries to join our club. There are few key questions that we face from our members. Firstly, how important are these programming contest techniques for solving the real-world industrial problems? Secondly, Do employers really care about the achievements in programming contests while recruiting? And thirdly, what other advantages does one gain by venturing into these contests?"
(1) People think they must be a super-good programmer to enter, or face belittlement This is a more serious problem than you might think. Example:
Student #1: Why didn't you go to the ACM programming contest?
Student #2: Everyone there is an excellent coder, and they'd think I'm dumb.
Contestants should be assured that if they do poorly, their scores would not be announced to ANYONE. Additionaly, it should be stressed one does not have to be a "Super-Good" programmer.
(2) The problems are too hard. Many people get frustrated because the problems are extremely difficult. There should be one or two easy problems that most people can get. Also, many of the problems require advanced courses like "Graph Theory". Obviously, this will discourage participation from anyone who has not taken these courses.
International competitions are also quite fun. I miss the International Software Competitition (part of the South East Asia Regional Computer Conference [SEARCC]). Unlike the international competitions I joined later on, the ISC really gave us time to mix, socialize, tour the place... We not only programmed (in QBASIC, of all languages!) but we also played cards with the other delegates, swapped souvenirs, and traded tips. I owe my real start in Linux to a pack of CDs someone gave me at one of these conferences, so I guess you can say it has changed my life.
I'm really glad I got into programming contests. The contests have all sorts of perks - travel to another country for free, maybe even win a prize or two (fame, fortune, and a line in your resume!). I often even get a room all to myself because there aren't that many other girls around. The early exposure I got to data structures and algorithms and the training I received in problem solving helped me a lot in computer science, and the confidence I gained from the competitions allow me to think of doing even cooler things. ;)
That aside, there are some kinds of contests I enjoy more than others. I started with the usual solve-N-problems-within-M-hours, but when I got into develop-and-present-applications-within-X-days I realized how much fun I'd been missing.
The typical problem-based contests often test how quickly you can realize the problem before you is just a mishmash of problems you'd already encountered during training. That's where the heavy duty practice machinery comes in. When you can glance at a problem and realize it reduces to something you've already solved before, you're practically done - all you have to do is code, debug, and test! While fun, sometimes it feels a little... hmm... too much like an exercise.
In contrast, I feel that competitions that center on the quick development of an application given some specifications echo the 'real world' a bit more. In one particularly big contest we were in when I was a sophomore, I worked with four seniors to turn out this networked disk usage / process count monitor in Java. Ran on both Windows and Linux, so gained plus points for being cross-platform. There were criteria for documentation, presentation, even teamwork... We were holed up in a training complex for 3 days, with 24h food, drinks, and access to 5 computers - one of the most fun 3 days of my life. <laugh>
Oh, let's not forget trivia contests. Sometimes those are hard ("I can't believe I forgot that!"), but they're also quite fun. I particularly enjoyed the twist the Hewlett-Packard TechQuiz added: a "technopreneurship" round, where you'd not only have to answer trivia but also place bids that depended on your confidence. That was fun. =)
So yes, I've found programming contests to be very worthwhile. It brought me in contact with other geeks (and not just those in my immediate area), it forced me to learn about all sorts of cool things, and it helped me really become comfortable with computer science. Definitely something I'd do over again.