So You Want to Become a Better Programmer? (TopCoder)
Let me ask you a question.
If you drive your car every day, do you think you are becoming a better driver?
Now, let me ask you another question.
If you competed in races with your car, frequently, do you think you would be becoming a better driver?
Let's reflect that paradigm at programming. Many of us, if we are fortunate, get to write code every day. Unfortunately, a large amount of the code we write is fairly mundane. We are rarely writing code in any form of competition. When you are first starting out, writing code makes you better at writing code. After time, when you have been writing code for a while, just like driving, you stop making gains.
You may have heard someone say there is a difference between a programmer with 10 years of experience and a programmer with 1 year of experience 10 times.
How to start making gains again
What I want to talk about today is just one of the ways you can start making gains again in your programming skills. There are many others, and I have talked about some of them before. But, today I want to talk about a very specific way I have found to break through the barriers and really improve your programming skills. Specifically, I want to talk to you about a programming competition that I really enjoy called TopCoder.
TopCoder is a website that has a nice little competition arena that allows you to compete against other programmers solving some pretty difficult problems. They have built a web launcher that opens up an IDE where you can view a programming problem and write your code to solve it. You can solve the problem in any one of their supported languages and get immediate feedback through their system tests. You can also view other people's solutions to the problem and challenge their solutions with your own input.
There are other kinds of competitions on the site, but for what I am talking about you'll want to go to the site, then click on develop, then click on algorithm, and launch arena.
Once you are in the competition arena, you are brought to a chat lobby, where you can switch to a competition room (if one is currently underway), or to a practice room, where you can practice some of the past competitions.
Once you are in one of the rooms that has problems, you can select a problem to launch the IDE.
There you can type your solution to the problem right there and compile or test your code. I'm not going to go into all of the details of how the competition and scoring works here, because I want to focus more one why TopCoder, and other types of training like this are so beneficial.
Why will this make me a better programmer?
It is kind of hard to explain why this works so well. I think one of the major reasons is because we are challenged to solve much more difficult problems than what we usually solve in our day jobs. When you start solving those problems, the easier problems you encounter on a day-to-day basis seem to get a lot easier.
One thing that really helped me was the ability to see other people's solutions to the problem. When I would finish coding my problem, and look at the other solutions to the problem, I would always find new ways of using some of the base language or library features that had never occurred to me.
When you try to challenge someone else's problem, you are forced to read some code that can be very obscure and quickly understand it.
You can also use some plugins to code in your favorite IDE and then have the code mirrored in the TopCoder IDE, but there is a nice gain in mastery of the language that can be had if you choose to use the TopCoder IDE which does not have auto-complete. (Especially if you ever have to write code on a white-board during an interview. It can be pretty embarrassing when you are unable to produce the syntax for a simple statement because you are so used to relying on auto-complete.)
You don't have to do the competition, you can just do the practice rooms on the site, but I encourage you to try a competition or two. There is just something about competition that seems to make us better.
Post me some comments if you try this and it helps you.
Simply being a great programmer won't secure you a six-figure job–you need to put yourself out there somehow. One way to do it? Create a blog.