Gamification and Software: Some thoughts
Date: 2012-12-31 10:57:19

On the recommendation of https://twitter.com/jbrains[J.B. Rainsberger] I've been reading 'http://www.amazon.co.uk/Reality-Broken-Games-Better-Change/dp/0224089250/ref=sr_1_1?ie=UTF8&qid=1356692858&sr=8-1[Reality is Broken]' - a book which talks about *how we can apply some of the things games designers have learned about getting people engaged to real life*.

The author, Jane McGonigal, also has http://www.ted.com/talks/jane_mcgonigal_gaming_can_make_a_better_world.html[a TED talk on the topic] which will help you get a flavour for the topic.

I was particularly interested in trying to see how her ideas could be applied in a software context and indeed how they are already being applied.

In the chapter 'The Engagement Economy' some of this ground is covered when describing the need for engaging multiplayer game worlds using Wikipedia as a good example of this.

The author points out that *Wikipedia has good game mechanics* for the following reasons:

* It has a personal feedback system that allows contributors to see that they're improving and making progress.
* There are work opportunities of increasing difficulty which keeps people engaged.
* There is a clearly defined enemy to defeat - people who vandalise the site with fake edits.

McGonigal goes on to the point out that as well as having good mechanics *the best games tend to have a community around them* as well. In Wikipedia's case there are 'talk pages' where contributors can interact with each other.

I was trying to think of the examples of software related products which either do or could have a game like experience and I came up with the following:

* http://www.4clojure.com/[4clojure] - this is a website dedicated to helping people get better at Clojure by giving problems of a varying difficulty for them to solve. There is http://www.4clojure.com/users[a leader board] ordered based on how many of the problems you've solved and judging by how many people have done all of them it clearly works! I don't think the community aspect is as strong but it is possible to see other peoples solutions once you've solved a problem yourself.
* http://24pullrequests.com/[24 Pull Requests] - the idea here was to encourage developers to make one pull request each day from 1st December to 24th December on an open source project of their choice. They display the people who participated and show the latest pull requests made on their home page so it certainly has some aspects of a game! http://www.codetriage.com/[codetriage] and http://contribhub.co/[ContribHub] look to be taking a similar approach on a more permanent basis.
* http://code.google.com/codejam/[Google Code Jam] - this is perhaps the best known game related idea in the coding world. Each year Google host a competition where they design algorithmic puzzles that people attempt to solve within a time limit. There is a prize for the winner. There's a https://groups.google.com/forum/?fromgroups#!forum/google-code[Google Group] available for contestants so the community aspect is covered as well.
* http://www.spoj.com/[SPOJ] (Sphere Online Judge) - this is similar to the Google Code Jam in that the problems tend to be algorithmic in nature. There are leader boards showing how well people have done on each problem. 'Winning' is related to how fast you can make your algorithm run so the top scores tend to come from people using lower level languages like C.
* The Koans - these are puzzles designed to help people learn a programming language. There are versions for http://rubykoans.com/[Ruby], https://github.com/functional-koans/clojure-koans[Clojure], https://github.com/gregmalcolm/python_koans/wiki[Python], http://www.scalakoans.org/[Scala] and I'm sure many other languages as well. The problems get more difficult as you go on but as far as I can tell there isn't a competition aspect although people do post about http://skim.la/2010/03/29/ruby-koans-is-awesome/[their experiences with the problems] so there is some sort of community around it. Products like http://rubymonk.com/[rubymonk] which allow you to learn a language online seem to be the next logical step in this area.
* http://www.kaggle.com/[Kaggle] - this is a website which hosts data related competitions - organisations provide data sets and problems they want solved and people compete to win prizes for coming up with the best solution. Jen and I have been taking part in one of their competitions and I've http://www.markhneedham.com/blog/tag/kaggle/[written up our experiences so far]. There is a community aspect around it, particularly for the problem we've been working on since it's intended purely for people to learn machine learning, and people have been sharing the approaches they've taken and ideas of how you could improve your solution. As I understand it, in the http://blog.kaggle.com/2011/01/19/how-i-did-it-finishing-second-from-bo-yangs-perspective/[Netflix competition] http://blog.kaggle.com/2012/11/01/deep-learning-how-i-did-it-merck-1st-place-interview/[one group published their algorithm before the competition was finished] and the winners were able to make use of it to come up with an even better solution.
* https://www.coursera.org/[Coursera] - I've been doing online courses using Coursera since last year and have so far covered https://www.coursera.org/course/ml[machine learning], https://www.coursera.org/course/stats1[statistics] and https://www.coursera.org/course/algo[algorithms]. The incremental difficulty in problems is definitely covered and I've been kept engaged from start to finish on all of the courses. The collaboration aspect is there as well and I've learnt a lot from reading people's posts on the forums. There still seems to be a bit of weirdness about sharing solutions which I find strange as it isn't actually an official course and people are participating purely to learn more about a topic. I think you learn much more from seeing how others have solved problems and I've ended up having to do this privately with friends because it's looked down on by the community. I think a leaf out of 4clojure's book would probably be beneficial here!

The final part of the book talks about another level of collaboration which is to +++<strong>+++allow people to add to the game +++</strong>+++by creating their own 'levels' for example. McGonigal calls these *collaborative creation systems*.

4clojure already does this by http://www.4clojure.com/problems/submit[allowing people to submit new problems] and people frequently provide different data sets to test algorithms on the coursera forums.

I'm sure there are way more examples of people making use of http://www.livingforimprovement.com/how-i-gamified-the-google-interview-and-how-you-can-too/[gamification] in the software world so please let me know and I'll add them or alternatively just use the comments!

** Update **

Some other ones that I've just thought of or were suggested by others:

* http://aichallenge.org/[AI Challenge] - this is an artificial intelligence challenge where you have to create a program that controls a colony of ants which then fight against other colonies. I've not played it but I'm told it's very popular!
* http://projecteuler.net/[Project Euler] - the original place for finding mathematical problems to solve! You get access to a forum to discuss problems with others once you've solved them and you are given awards for solving 100 problems, solving the 25 most recent problems and so on.
* https://www.interviewstreet.com/challenges/[Interview Street] - another website with algorithmic type problems to solve. Has a leader board based on the time the solution took to run and the amount of memory it used which is quite neat. There's some sort of link to tech companies but I'm not sure how that aspect of it works.