View Full Version : Comp sci contests

11-17-2007, 01:03 PM

This has been bothering me for a while, and since I'm sort of a lurker around here, I decided I'd check out what others have to say on this subject.

What are your opinions about computer science contests? By these, I mean high school olympiads (USACO and the likes), online judge contests, or even just spending time solving problems on different online judges. It's obvious that these help one as a programmer, but how much? Does being, say, an IOI medalist, make one a better programmer? Or just a better mathematician or computer scientist? I think most programmers agree that coding itself is just a tool, while the real occupation of a programmer is coming up with solutions to problems. What kind of problems would a programmer encounter in a programming job? The kind of math-oriented problems one would find in the higher rounds of different competitions, or something different?

I'm asking this because I always took every opportunity that I had to participate in comp sci competitions, but I never really got any outstanding results, like qualifying to any international contest. I qualified to the national olympiad in my country once, but I didn't really do much there. I'm also active on several online judges.

Basically, what I'm asking is what impact do contests have on a potential future programmer? Are decent results a very good thing, or an OK thing? Should one only pursue outstanding results if interested in following a career in comp sci research?

Also, finding competent teachers that can themselves solve and explain contest problems seems to be very difficult, at least around here. So basically, I've learned everything I know from school books and the internet, by myself, but there's a limit to how much you can learn and understand by yourself. Sometimes you just need someone to teach you too. Any ideas on how to better prepare yourself for such contests?

Any opinions appreciated.

11-17-2007, 01:30 PM
Most contests (at least the ones with online judges) seem to be somewhat short programs to very specific problems with very definite pass/fail criteria.

Now if you were to get into an open source (http://sourceforge.net/) project, then that would be a more solid foundation for a professional career. For a large program in particular, there are many trade-offs which are really only solvable with practical experience (do you choose a list or a map for example).

Also, since all programs are released with bugs, you need experience in deciding which need to be fixed now, and which are minor enough or obscure enough to leave for later.

Showing that you can handle the teamwork of working on a project of some size for a period of time is one of the things employers look for.

Even if you really are the champion of all contests and a really good programmer, if it comes with an attitude which makes teamwork impossible, you're not going to have a job for long.

11-19-2007, 01:48 PM
I love programming contests...but not so much the online kind. When I was in high school we would go to programming contests very often. The atmosphere was cool. Hundreds of computers packed into a commons area.....free pizza.....computer games going on before and after....fun stuff! That's how a programming contest should be. The online kind are not as fun.

You know...I was thinking about your statement:

I think most programmers agree that coding itself is just a tool, while the real occupation of a programmer is coming up with solutions to problems.

One of my professors is really big into that. He says it all the time. I guess it is true to an extent, but as I think about myself, that is not the reason I became a programmer at all.

I became a programmer because I like to create. I liked the creative aspect of programming...the fact that you can create literally anything (in a virtual world).

Rashakil Fol
11-19-2007, 04:56 PM
Contests are fun, and if you find them fun, do them. Contests that last over several days might improve your programming ability. Being a winner in the IOI won't make you a better programmer -- simply qualifying to participate by winning the national contest means you're a genius (if you come from a large country). You're _already_ a better programmer than a high percentile of the programming population, if you win one of those.

I like short contests better, because there's less of a time investment. And the best kind are the ones that have prize money. There's nothing more fun than finishing an hour earlier than everybody else in a 3 hour contest that has a decent cash prize :-) Well, there's walking out of an hour long DiffEq exam in 5 minutes... That is fun.

I think both kinds of contests improve your programming ability -- longish contests (that last several days) for planning small software, shorter contests for being able to discipline yourself away from putting bugs into your code.

11-20-2007, 09:52 AM
Yeah, there's also the creative aspect, I hadn't really thought about that. I think contests don't really help you improve on this, since you're given some tasks and you have to solve them in a matter of hours. You can get creative and come up with another solution than what you know is probably expected of you, but that's pretty risky during a contest. Usually I'm happy if I have an idea that works, I rarely think about elegance. This is not true for archived online judge problems, however. I think those can also help creativity to some extent. It's fun when you have more solutions to the same problem and can also focus on improving the actual implementation.

I don't really like longs ones, mostly because that also gives people time to cheat, to some extent. It becomes more of a "who can find out how to solve this problem by any means necessary" kind of contest. Short 3-5 hours contests force you to focus and rely just on what you know, as there's not much time to ask around or google.

Anyway, how do (or did) you prepare for such contests? Also, any online judges or specific problems you've solved and would recommend? :)

11-20-2007, 04:13 PM
how do (or did) you prepare for such contests?

Well I have participated in 3 kinds of contests:

1. ACSL contests (high school nation-wide contest that last 72 hours)
2. Regular high school contests (last 2 to 3 hours)
3. ACM (university contests that last 2 to 3 hours)

My main way of preparation was by doing previous contest problems. As the time for each contest would approach, my computer science teacher in high school would always break out her massive notebooks full of old contest problems, and she would give them to us to work on. We would complete as many as possible in order to prepare for each contest. Now I have a nicely sized notebook myself of old contest problems :) (3 fat binders to be exact)

In my college experience I have basically done the same thing...go over previous contest problems to get practice. ACSL (American Computer Science League) has some practice problems posted here: