What is TopCoder?
TopCoder, as a company, does a few things - but the central attraction is the algorithm competions. These are events in which programmers are presented with a set of problems - ranging from trivial to very difficult - and are tasked with writing functions (in any supported programming language) that solve those problems. The winner is the one who, after about an hour, has finished the most solutions in the fastest time.
I won't be going into specifics of how the competition works - to get that you can visit the TopCoder website. Rather, this will be a quick overview of what TopCoder is and why you might want to give it a try.
What's the point?
TopCoders compete for a variety of reasons. While there is money for winning in competition (especially for big events like the annual Google Code Jam), that money is as out of reach for the majority of competitors as the World Cup is to the majority of footballers. More modest success, though, may still impress potential employers, who sponsor TopCoder competitions with the hope of recruiting talented participants. This is of special value to competitors in out-of-the-way places, for whom TopCoder provides a unique way to demonstrate one facet of programming aptitude to employers in larger centers. As a fairly experienced, employed programmer, to me TopCoder is just a hobby - and I expect no more out of it than pleasant diversion and the joy of mental exercise.
What are the problems like?
There's really quite a range - and the best way to get an idea of this is to either compete or to look at the problem archive on their site. Either way is free, but requires registration so I can't link to problem descriptions directly. Instead, I'll give some general idea of what kinds of things you might expect.
A beginner problem might be to pick words out of a list that have certain characteristics - maybe ones with more vowels than consonants. In solving this, one would write a function that accepted an array of words, inspected each one to see whether it met criteria, and then passes back the ones that do. A medium problem might be to inspect a certain position in a game of tic-tac-toe, and predict who will win given optimal play. A difficult problem might ask a programmer to design the best schedule for airline flights given a certain set of cities, populations, costs, and other constraints.
In practice, the problems deal with a stupefying variety of situations - and are designed and constrained to force programmers to think of innovative solutions. The problem subject matter is sometimes realistic, sometimes fanciful, sometimes abstract or math-based. At times, the problem is simple to state but horrifyingly complicated to answer. Other times, the problem description is pages long and challenging just to comprehend - and yet yields to a solution just a few lines of code long. The most successful coders leverage knowledge from geometry, set and graph theory, calculus, physics, and computing in finding efficient ways to tackle problems. Often, a single problem can be approached successfully as an analog of a physics problem with a known formula, as a calculus problem, as a dynamic programming puzzle (ie. a problem that can be broken down into more manageable subpuzzles or "stages"), or as a system to be solved via a more arcane technique like gradient analysis. You don't need to know every relevant subject - but helpful insight can be gathered from a surprising breadth of fields (that aren't always centered on computing).
And this is fun?
If you like mental challenges, then yes it is. It's a mental game unlike any other, and in some ways sours you for other mental challenges. In TopCoder, you become accustomed to solving whole classes of problems at once, relying on the computer to do the grunt work while you cut right to the substance. For example, my wife enjoys Sudoku, while to me it was only fun once. With a TopCoding perspective, you don't want to solve one Sudoku layout. Rather, you construct a human-usable algorithm to solve any layout - and end up resenting the work of carrying that algorithm out in solving a specific puzzle
Designing an algorithm to rigorously solve all 9x9 Sudoku problems would likely constitute a "Division I Medium" challenge in TopCoder - a task that the best competitors would complete in minutes. Naturally there are many mental challenges (eg. Chess or Go or recognizing a human face) for which formulating even a basic algorithm is much more complex - but after trying TopCoding for a while, you too may start imagining algorithms for daily tasks. Putting the groceries in your fridge is at one moment Tetris, the next a classic knapsack problem (when you run out of space), and the next a complex optimization problem to make sure high-use items are quickly accessible without blocking visibility of shorter ones.
May the best programmer win?
That's not really the best way to think of TopCoder. The challenges of everyday programming very rarely center on writing complicated algorithms to solve the kind of difficult problems TopCoder presents. For most programmers, most daily tasks are simple and repetitive. A good programmer, in everyday work, is one who can communicate well with users, managers, and other developers, who can write clean, maintainable code, and who can choose the best tools, architecture, and techniques in putting together a solution. For the majority of programmers - in my experience - it's rare that a job arises for which constructing workable algorithms is the difficult part; and even when it is, you normally have a lot more time to think up and implement a solution. In this lies some of TopCoder's allure - it's a place where talented programmers can exercise skills that are generally underused and often atrophied. Many programmers seem to misunderstand this, and bear some resentment towards TopCoder for not recognizing the parts of programming they take pride in. To restate, TopCoder isn't a test of general programming aptitude or intelligence - and there's no reason to feel threatened by it. Even if you suck like I do.
May the fastest typist win?
No. While fast typing is certainly helpful - especially on the easier problems - the time to mentally fabricate a solution will almost always outweigh the time required to enter it. Winners are those who are best at finding ways to attack difficult problems. The tools of speed - fast typing, libraries of code snippets (you can bring in any code, as long as you wrote it), and optimized toolchains (you can use any tool, so long as it doesn't interfere with the TopCoder application) - function more like tie-breakers between top competitors. Going too fast and making an error means not only zero points for that problem but allows other competitors to pick up points by finding your mistake (during the "challenge phase"). If you're mentally agile enough to see to the heart of a problem, you'll normally have enough time to type your solution (though it's worthwhile to get used to the interface before entering a competition).
I could do that...
You're right, you can - though you will need to come in with solid programming skills already developed, as the educational content offered is geared towards the intermediate rather than beginning programmer. It's always free, and it doesn't require anything particular besides a computer and an Internet connection. However, even if you're an experienced, well-educated programmer you may be taken aback by the difficulty of some of the problems and the level of competition (especially from Eastern Europe - see this Business Week article).
Are you a top TopCoder? Statistics suggest probably not. But it's fun to try, and you're guaranteed to learn something along the way. Prepare now, and maybe next time Google Code Jam comes around you can win yourself a T-shirt (which is my goal). You may even find programming fun again. Happy coding.