Wednesday, October 26, 2005

HackQuest and TopCoder

     There are times when I get tired of the same old video games and I want a real challenge. I like challenges that make me use some actual skills to accomplish goals rather than playing a video game where you run around and shoot people. To me it’s more rewarding to complete a real world task, such as crack this file, or write a program, as well as educational. Fortunately there are two web sites that have just these sorts of games, HackQuest and TopCoder.

     HackQuest ( is a site with challenges that will introduce you to a number of computing concepts. There are different categories, and the idea is to break something in each of the categories, get the secret code, and input the code to confirm that you successfully completed the challenge. My favorites are in the cracking category, where you get an executable and have to crack with using a debugger to get the secret code. There are also programming related problems, problems relating to the Internet (“From Russia with Love” drove me nuts until it just came to me one day how to solve it doing something I do everyday, I wrote an article about the method I used), Steganography, Java Reverse Engineering, JavaScript debugging, and Logic problems. It’s a fun and educational site, and it provides a non-destructive way to test your skills. There are numerous ways to solve the challenges on this site, so it allows quite a bit of creativity. For example, when reading the forums for one of the programming solutions I had solved, a lot of the people had indicated writing programs in Java, Visual Basic, and C. I solved the same problem with a lot of piping in Bash. Its nice to be able to try out some of the more gray area skills without actually breaking any laws. Plus, the challenges force you to do research on real world issues such as SQL Injections, writing secure code, and reverse engineering.

     Topcoder is a little more practical than HackQuest. Topcoder is a site dedicated to programming. On Topcoder, you compete against other programmers in competitions hosted by large companies. Previous hosts include the NSA, Citigroup, and Sun Microsystems. There is plenty of practice problems based on previous competitions to get you familiar with the environment you compete in. There are also projects that the site hosts to build re-useable components that you can be rewarded with cash. It supports a number of languages, such as C++, C#, and Java. I personally don’t care for the competitions; I just prefer to go through the practice problems for educational purposes. However, it is fun to watch the lobbies to see the interactions between the hosting companies and the participants. When in the practice sessions, you can view other submissions to get an idea of different approaches to solving problems, and get an idea how the problem could be solved in other languages. I have learned quite a few new algorithms this way. The site does have some drawbacks. The scoring system is highly questionable and does not promote good programming practices. Some of the highest scoring code is also some of the ugliest code I have ever seen. In some instances the sloppiest code I have written scores higher than some of the cleaner code. When browsing other submissions, it seems to be more of an obfuscated competition than a professional programming competition. The automated scoring system also detracts points for commenting, which I don’t agree with. But I look past these flaws and still have a lot of fun on the site.

No comments: