Late last night, I discovered VimGolf, and I was instantly hooked.

Vimgolf

VimGolf is a social game that encourages people to simultaneously compete and teach at the same time. In VimGolf, you're given a file that contains the starting text, along with a file that contains the "solution". Your job is to transform the starting text into the solution in the fewest number of keystrokes. If you want to see other people's solutions, you have to submit one of your own. Your submission will only let you see people's solutions that are worse (higher number of keystrokes) than yours, and a small number of solutions which have a better score than yours. By looking at other people's solutions, you will likely learn a trick or two that you can use to improve your score. You can then submit another solution and repeat the learning process.

It's a fantastic example of using a game to improve your skill. The general idea of using games to teach is more broadly applicable as well. For example, it's well known that most users only use a small fraction of the features in their software. If your game encourages users to try new features of the software that they haven't used before in order to "win" at the game, you're going to be far more successful at teaching them how to use your software. Users don't want to read a manual; they would much rather learn by doing, and games are a great way to make that happen. 

VimGolf encourages users to practice using vim. Daniel Coyle's excellent book, The Talent Code, talks about how people improve through "deep practice", or practicing at the edge of one's abilities for a sustained period of time.

I've seen this in action first hand in our house. Since the start of the school year, my 7-year old son has been really interested in learning how to play chess. I remembered learning how to play chess as a kid: the only way for me to "practice" was to play a real game. And since my dad was a lot better than me, I wasn't learning a whole lot during the infrequent games that we would play (losing repeatedly did not encourage me to want to play more games).

Chessmagnet

Matthew is fortunate to have ChessMagnetSchool available to him through his chess club at school. In Chess Magnet School, you are presented with problems like the one shown above, and you're asked to solve it. Matthew has solved over 1000 problems to date. As he solves more problems, he continues to advance. After a certain number of problems are solved correctly, he gets promoted to the next level. Right now Matthew is a Herald and he really wants to move on to be a Jester. He has concrete goals that he sets for himself "Daddy, tomorrow I want to go from 30% to 50% of the way to becoming a Jester". The game adapts to his ability, and he gets a ton of practice working on problems right at the edge of his ability. He's learning at an incredible rate; it won't be long before he's moping up the floor with his Dad.

So the next time you're designing a program, try and think about whether you can use a game-based learning approach. It can easily be the difference between a program that has tons of features that nobody knows about and a program that has a fanatic online following.