views:

733

answers:

10

I would like to test my C++ programming skill level by competing with others. What programming contests are there for C++?

+5  A: 

There's Google Code Jam, but only once a year; TopCoder, with many more contests; and others listed here.

Alex Martelli
+12  A: 

Contests won't help you with learning dark corners of a language. Most of them are about speed and you can only achieve speed if you trim down your usage of a language to a bare stable minimum. You don't want to spend hours trying to figure out why your clever templates could not be compiled, you don't want to write readable and understandable code as it slows you down, you don't want to test it, you just want to be done with it as quickly as possible.

If your goal is to learn a language, contests are utterly wrong way to do it.

Read sources of boost and STL, try to copy and modify some of the code from them, that is a good way.

vava
Slight caveat: boost and STL (but you really mean stdlib, right?) implementations have special constraints not present when *you* write a program or application. The standard library must only use certain identifiers, and at least one vendor I've seen shipped a purposefully obfuscated stdlib. Boost must conform to a wide variety of compilers, many of which a single developer will never see. The same applies to frameworks that maintain backwards compatibility---you don't need that in new projects. (OTGH, if you are writing a library that must work with *40 different compilers*, copy Boost.)
Roger Pate
It's good to know those tricks Boost are using anyway, they might come handy one day. Understanding them is a good exercise. And you rarely can really understand the trick without taking it apart, which means copying and modifying it until it breaks :)
vava
"Contests won't help you with learning dark corners of a language." Thanks in large part to the IOCCC, I know more about the dark corners of the C language than any sane person could know. It gets dark in there. Oh so dark.
Jason Orendorff
+6  A: 

There's little point in testing C++ skill level, as ultimately it would not be about thinking, but either be very simple, or be about knowing the little pitfalls in differences between compiler implementations, or pitfalls in the standard itself.

To test one's knowledge about C++, the easiest way is to get involved in some hardcore C++ project like boost, or C++0x standard development.

To test your skills and algorithmic knowledge in general, as a thinking programmer, you should try contests like the ACM programming contest or TopCoder.

Kornel Kisielewicz
+1 for contests like TopCoder testing your algorithmic knowledge (instead of just testing "skill in C++").
Roger Pate
Thanks, my English isn't good enough, and I couldn't find a proper word for "thinking in programming", so if you excuse me I'll shamelessly edit it in :>
Kornel Kisielewicz
+3  A: 

There are some:

  1. Topcoder probably is best for you. It has algorithmic programming contests very often, the competitors there are world class. It also has a general purpose component programming, e.g. designing/implementing a XML processing library etc. Topcoder awards money to the best few contestants. Best of the best, you can see others' source code!

  2. Sphere Online Judge. and many others: acm.timurs.ru, acm.uva.es, acm.pku.edu.cn etc. These are only for algorithmic skills training. You can have a lot of fun there :)

Yin Zhu
+1  A: 

UVa Online Judge has a lot of contests running throughout the year and they have a large userbase for nice competition. "World Finals Warmup" contests will be coming up in January. The site also has nearly 3 000 problems for you to solve, lots of fun and very challenging.

TheMagician
+1  A: 

You can pass c++ test on brainbench.com, for example. Some type of contest too...

Eugene
+1  A: 

I participated in one of David Bolton's program challenges once. He posts a new one every month or so.

StackedCrooked
+2  A: 

I wonder, that nobody mentioned Codechef. As others already stated, a coding competition might not be the optimal way to test your skill level, but Codechef is a slightly different case.

They offer monthly programming competitions with multiple assignments. You can enter in almost any language and you have 1 week of time. So there is no rush, but even then, the competitions will rather test your logical thinking and problem solving abilities, than your knowledge of the C++ language. (Though, one can learn much from reading the source code of other entries.)

However, I can only encourage everybody to enter at least once - programming is fun! =D

Dave
+2  A: 

If you are only into C programming, there is always the IOCCC

doron
+1  A: 

about.com's C/C++ section has a programming challenge that is ongoing. Here's the latest: http://cplus.about.com/od/programmingchallenges/a/challenge30.htm

Ben