Working Their Way Up
Everyone remembers the 1980's don't they? The big hair, the Members Only jackets, the leg warmers, carrying "Boom-boxes" on your shoulder, Molly Ringwald in every movie, and those stupid Rubik's Cubes. The challenge was to try and return the six-sided cube to its original form by having all of the like-colored squares on the same side. These little cubes had the whole world, from infants to grandparents, captivated. While solving the Rubik's Cube provided one with a God-like mystique, some who consistently failed grew frustrated and quit, while others just keep trying for the fun of it.
That same pattern seems to happen in TopCoder's Single Round Matches. Coders like NDBronson, dmwright and jonmac have achieved legendary status per their enormous success. The three have combined to win their respective rooms over 80 times, each has made an appearance in the finals of one of TopCoder's three major tournaments, with jonmac and dmwright winning one apiece, and there combined winnings are approaching $400,000. Sure, the most obvious answer to why they do so well is that they are very talented and brilliant coders. However, they also put in their time by practicing and perfecting their skills in the twice-weekly Single Round Matches.
What about the majority of the coders, though? The ones who put in just as much time practicing and competing, but can't seem to win their rooms consistently to build their ratings, and have been mired in Division-II for a considerable time. Why do they continue to compete? Or simply:
What's their motivation?
The commonalities to that query were the challenge, the pressure, and a love of coding. "I keep competing because I see myself getting better and learning how to use the more advanced features, and on occasion show the skills I was taught and know I have," said Fuzzyb18, who has competed in 26 matches and has a rating of 668. "Anything that you can do to improve yourself should keep you motivated until you can do it right."
"I just enjoy the stress of writing good code in short time," mentioned ahmedf, who has a rating of 933 through 36 matches.
"It's not really for the rating, but rather its more for the experience," added darkphantom (870 rating in 20 matches). "I mean I know it would be nice to win some money every match, because every college kid needs money, and bothering your parents is a hassle. I'd rather tell them I won $46 last night."
So, having a low rating and scarce TopCoder bank account must be frustrating, right?
"Yeah, it is frustrating, but from the standpoint that I know I am better; yet everyone else around me is just as good if not better, so you take your wins with your losses and keep pushing on," continued Fuzzyb18, while ahmedf added, "It is! But then, it's lonely at the top, isn't it? And then, there's always this drive to go up in the rankings if you are low. Hopefully I will make it some day!"
Glastonbury...We Have A Problem
The low-rated coders seem to be into TopCoder for all the right reasons, so what's the problem?
Well, first off, some of TopCoder's members are distance runners, where TopCoder competitions are more conducive to sprinters.
"Twenty percent of the time I simply could not do the problem in time," said vigenere, who has a 771 rating in 21 matches.
bitbucket43, a veteran of 48 matches with a 951 rating, and edragon (23 matches, 714 rating) are more like painters than sketch artists. "My TopCoder rating doesn't reflect my knowledge and experience," stated bitbucket43. "Trying to solve three problems in 75 minutes doesn't correlate to what I do on a regular basis. I'm more concerned with end-conditions and ensuring the correctness of the solution. That approach tends to work against me in competition."
"I don't work as well in a quick paced environment," declared edragon. "I would like to have the entire problem statement analyzed, documented and completely understood before I go for it."
More often, its just making those stupid little mistakes that you don't realize until you've just submitted. Fuzzyb18 summed it up by admitting what many mentioned, "A lot of my errors are caused by simple typos, or forgetting to put lines of code inside brackets."
"Quitters Never Win, And Winners Never Quit"
Quit? Anybody can do that. Takes no talent. Takes no guts. It's exactly what your opponents hope you will do.
After performing at a sub-par level for so long, it must have crossed the minds of these coders. "Quit, what's that?" asked ahmedf, while Fuzzyb18 added, "Never, why quit, there is no shame in not being the best," and vigenere summed it up by declaring, "Quitters never win, and winners never quit."
Others have though about it, however.
"Only once," answered bitbucket43. "After a particularly exasperating competition with many challenges to the problem wording and test cases. Since then I've kicked back and let things develop as they will. Some nights you get burned, other times it works for you."
When asked if he ever thought about quitting, edragon admitted, "A few times, but I generally see what I did wrong and I try the next time to do it better." He then jokingly added, "Most nights on TopCoder I seem to feel like I should switch my career choice and go into farming."
There is an adjustment period with almost anything you do. Some people can pick up an activity without explanation and excel, while many others just don't grasp concepts as quickly. Just think about all of those athletes who spend a few years in the minor leagues to develop their skills for a few years before being called-up to the majors and starring, or your first few months of high school or a new job.
Who's to say that today's low-rated member might not be tomorrow's ultimate "top-coder"?
"I feel like competing in TopCoder has made me a better and more efficient coder, in that when I code solutions to some of my problems in class I'm more careful at catching mistakes before I send it to compile, and I have also noticed that my code compiles with fewer errors nowadays," said darkphantom.
"I see myself learning new tricks of the trade, new functions, and new ways to approach problems," added Fuzzyb18, while edragon mentioned, "Im a much faster coder I think and I've definitely learned a lot."
Help From Above
Coming to TopCoder, Inc. from a collegiate and professional sports background was quite a culture shock for me. I had never heard of an algorithm, and to me, Java was coffee, not a programming language. What I needed was an education in what a computer programming company was all about, and I received that by conversing with my superiors and our development team.
The great thing about the hour and a half registration period before TopCoder Single Round Matches, is that it brings over 600 programmers together and gives them the ability to converse with each other, share ideas, make recommendations, and most importantly ask for help.
darkphantom took full advantage of this recently when he chatted with NDBronson, TopCoder's only member to ever go over 3000 rating points.
"I asked him how it is that he gets the solutions to all of the problems correctly, while it takes me at least 10 to 15 minutes just to figure out what the question in Division-I is asking. He responded by saying that everybody's brain is wired differently for different reasons. He's right. Everybody has his or her strengths and weaknesses. I would much rather actually be able to get a solution to the problems then none at all.
"Almost every competition night I talk to other coders before or after the contest, often people wondering how to improve," said NDBronson. "I enjoy talking to them, but I'm don't have any magic techniques or silver bullets. I welcome anybody but with the disclaimer that I am not very good at multitasking, so I find it difficult to carry on multiple chat conversations simultaneously."
"I think that regardless of rating the epiphany of understanding that comes with an elegant solution is still addictive. Sometimes you get it by yourself and sometimes you get it by looking at somebody else's code, but either way it is still a shiny intellectual toy."
2002 Sun Microsystems and TopCoder Collegiate Challenge champion dmwright admitted that members haven't come to him with questions in the past, but he is willing to help out and answer questions. Just be kind in the near future, his thesis is due soon, and "it's getting scary."
"I always go through their code to find better ways of doing things," said ahmedf, about reviewing the code of Division-I members. "Just a look at their code and you know why they are there!"
"I am learning problem processing, the ability to take a process and break it down into various smaller pieces," mentioned Fuzzyb18. "Some of the syntax is confusing but the more that is observed, the better I will understand it."
"Keep Chugging Along"
Sure, maybe you don't want to listen to your parent's advice when it comes to dating and they want you to take out the son or daughter of the family friend, or clothing, when your mom tries to dress you like "Little Lord Fauntleroy", or music, when they think Lawrence Welk is just the coolest, but if you're a veteran coder with a low rating just like these members, you might just want to heed their advice.
"I go to the Division-I practice rooms and try to work on those problems rather than the Division-II problems because I know that if I can get the Division-I problems, Division-II should be a breeze," mentioned darkphantom.
"Look how the other guy did it, study it, understand it, and add it to your style of coding," recommends vigenere. "Then it will become your style as well. Integrate your mind."
"Keep chugging along and take pride," proclaims Fuzzyb18. "Study your own code and find what went wrong."