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?"
I had a brief look at the problems/contests/tasks. They are not general problems, but biased toward mathematical problems because that is more suitable for contests. Nothing wrong with that.
If the problems should be more like real life they would look more like:
- There is a memory leak in this program and it is probably in the database driver. Fix it or find a workaround.
- Design and implement a SNMP subagent and integrate into this legacy system...
- A customer wants this feature but it has to be backward compatible. Find a solution.
You rarely have the chance to create a new program from scratch in the real world. And when you do - is it maintainable, commented, flexible and robust?But the contests are not worthless. They show that you are interested in programming and that is important.
Are programming challenges applicable to the real world? Of course not. Ninety-five percent of the real world isn't applicable to the real world; how do you expect anything in academia to be more than five percent applicable, if the Real World is only five percent applicable?
Stop viewing everything you do in college as preparation for the Real World. The Real World is out there, and no matter how well-prepared you think you are from college, once you get out here you'll realize that you don't know jack. That's okay. What you should be learning in college is how to learn, quickly and accurately. Do programming competitions help show future employers you can think on your feet and apply new knowledges quickly to old problems? Maybe. But like I just said, stop viewing everything you do in college as preparation for the Real World.
Sometimes, you want to do things just because they're fun. With a little camraderie, espirit de corps and good code-fu, programming challenges can be a hell of a lot of fun.
The only regret I have about college is that I took some things too seriously, because I was sure they were all about the Real World, and didn't take things seriously enough, because I was sure they were wastes of time. I passed on an ACM Challenge one year because I wanted to study more for a class I was in. Now, seven years later, I don't even remember what that class was.
I do remember the ACM Challenges I participated in, though. And I wish I'd participated in more of them.
We are running some sort of a club in our University which has members who are interested in programming and related stuff...However, we are finding it really difficult to motivate new entries to join our club.
I think I see your problem. Try saying: "Programming kicks butt. There is nothing that matches the creative rush of a good code frenzy short of godhood. You get to litterly feel like you can do anything. Programming is what people have dreamed of for eons--giving orders to inanimate objects and having them obey you without question. I feel sorry for anybody who doesn't learn to control the power that programming gives us. We meet on Thursdays. Wanna join?"
-- MarkusQ
(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.