It’s been well over a year since I last visited TopCoder, and reviewed the Web site that features the novel idea of pitting developers against one another to solve problems in Java for cash prizes. Not only has the site bucked recent trends by surviving all this time, it actually appears to be thriving. TopCoder sports more members than ever. It has increased the number of competitions, added new languages to the original Java language competitions, and launched several new services for members. The new things going on at TopCoder warrant a second, closer look, so let’s take one.
The thrill of victory… and the agony of logic errors
If you’ve never heard of TopCoder, the site is essentially a competitive league for developers. TopCoder hosts regular matches, as well as two annual multiple-match tournaments, challenging competitors to solve, as quickly as possible, a set of algorithmic problems that vary in complexity. The top performers in several categories for a given match or tournament win cash awards for their work.
A match consists of one or more timed rounds, in which you're asked to solve three problems of varying toughness. In any given match, you’ll be competing against hundreds of other programmers, divided into multiple virtual competition rooms. The competitions are live and carried out through a special competition applet that provides you with a rudimentary text editor, compiler access, and a way to test your solution before you submit it.
When you compete in a match, you’re awarded points based on how quickly you complete a solution to each problem and submit compilable code to TopCoder, but it’s not over there. The competition then moves into the challenge arena, where your competitors will have an opportunity to examine your solution for any logic flaws. If a flaw is reported in your code, the coder who located it will be asked to supply the input values necessary to re-create it. If the flaw is genuine, your competitor will be awarded points at your expense. After the challenge phase ends, all submissions will be subjected to automated testing, which will test each one using the same set of critical values. If your program produces incorrect output, hangs, crashes, or otherwise fails, you’ll forfeit any points awarded to you for that problem. If the match involves multiple rounds, the top three scorers in a room will advance to another room for the next round in the match.
A typical problem consists of a required method declaration, a few paragraphs describing the problem, and a few illustrative examples. The types of problems vary in difficulty depending on the level of competition, but don’t expect to see any simple business problems here. These are more along the lines of college-level programming course test problems. For a sampling of the sorts of questions you might see, check out TopCoder’s sample questions page. Once you're registered, you can see actual past problems and solutions in the practice arena.
Triple the fun with triple the languages
One big change for TopCoder is support for additional languages. In addition to the original Java support, C++ support began last year, and the site began using C# in competitions earlier this year. (The upcoming TopCoder Invitational Tournament will be the first tournament to include C#.)
What’s interesting is that rather than have a designated language for each match, most scheduled matches leave the choice of language up to the individual competitor. You can even use different languages for different problems in the same match! Your choice of language can become a huge strategic element: Since points awarded during the challenge phase are removed from your score, solving a problem in, for example, C++ while in a room full of Java developers could effectively make your solution challenge-proof. After all, a competitor who doesn’t understand the language you used for your submission obviously can’t challenge it.
You might think that this way of doing things is unfair—mixing languages in a programming competition seems like comparing apples and oranges. However, according to TopCoder founder Jack Hughes, the site's focus is not on finding the best C#, C++, or Java developers, but the most skilled developers overall, with the best problem-solving skills. Competitors who can apply different languages, depending on the problem at hand, are more highly skilled than those who can't, and they ought to be able to use this to their advantage in a competition.
Aside from the new language support, there are some other new wrinkles at TopCoder. For instance, coders are now divided into two divisions based on their overall rating, which is computed based upon their match performance relative to their peers. Those with ratings above 1200 are considered to be in Division-I and receive tougher problems during competitions than those with lower ratings, who are placed in Division-II.
Didn’t win the tournament? How about a job instead?
The competitions aren’t the only thing going on at TopCoder. The site has begun delivering on a few of its “phase-2” plans to provide employment services for TopCoder members. This is probably the biggest difference from the last time I visited the site. There’s now more at stake than ratings and cash in a competition. You could actually be competing for a job.
TopCoder Employment Services, or TCES, was launched earlier in 2002 and has gotten off to a quick start. Already, TopCoder has reached deals with organizations including Google, GE, Nvidia, Apex Data Services, and even the U.S. FBI to post recruitment advertisements on the TopCoder Web site. The advertisers can then check out the competition records of any applicants as a method of determining the ability of a potential recruit. TCES is only a few months old, but Hughes says that some site members are already being interviewed and that the first hirings are likely in the near future.
How about royalties?
The newest TopCoder service is also the most interesting. TopCoder Software, which launched in October 2002, is a development service intended to sell components to outside companies on a subscription basis. TopCoder solicits and purchases designs for these components from site members who, in addition to getting paid for the work of creating the component, receive royalties based on the sales. TopCoder handles marketing, testing, and supporting the component. Hughes says that interest in TopCoder Software has been high both from site members looking to build components and from outside companies interested in subscriptions. He expects things to take off sometime next year.
So what's the catch?
TopCoder is still free to join and doesn’t charge entry fees for the various tournaments. All you have to do is fill out a short resume-like profile to get started. The site's stated mission is to increase the perceived value of programmers by providing an objective rating system for them. But if TopCoder's new features take off, it looks as though the members might increase the site's value as well.