Day of Docker keynote

It was an honour and a pleasure to open the Day of Docker conference in Oslo with a keynote telling the story of cyber-dojo (so far).

greater capacity: 64 avatars and docker-engine

cyber-dojo now supports a docker-engine runner and is using it to run a small cluster of Google-compute nodes behind the server. In line with this extra capacity each cyber-dojo can now have 64 avatars. A big thank you to everyone who helped with this work, particularly Byran Wills Heath from Bluefruit Software who refactored the containers, Mike Long for helping with the architecture design, and Dymtro Mindra and Nadya Sivers for providing all the new avatar images.

new avatar images

A big thank you to the talented Nadya Sivers from Ukraine who drew a new set of cyber-dojo avatar images. Watch out for even more avatars once cyber-dojo has been refactored to support scaling.

cyber-dojo now supports vhdl

A big thank you to Pablo Mansanet from the excellent Bluefruit software in Cornwall, UK, who just added VHDL (VHSIC Hardware Description Language) to cyber-dojo :-)

refactoring katas

A very handy cyber-dojo feature is setting up dojos with custom starting positions. This is perfect for setting up refactoring katas. The idea is that instead of starting from the minimal start code and working towards a solution, you start from a finished (but poor) solution and practice refactoring instead.

Here are some for Yahtzee And here are some for Tennis made by Emily Bache.

the cyber-dojo Foundation

The cyber-dojo Foundation was incorporated as a Scottish Charitable Incorporated Organisation (SCIO) on the 7th August 2015.
It's charity number is SC045890. It's stated charitable objective is
To advance the education of the public in general on the subject of software development.
It's registered trustees are:
  • Jon Jagger. Director of Software at Kosli based in England.
  • Mike Long. Co-founder and CEO at Kosli based in Norway.
  • Olve Maudal. Magician at Equinor based in Norway.
  • Seb Rose. Associate at based in Scotland.

The cyber-dojo Foundation issues licences for commercial use of the public cyber-dojo server at
If you need a licence please email

@KGISL Coimbatore

It was an honour and a pleasure to be invited to spend the day at KGISL Institute of Technology in Coimbatore, India. After a presentation on Software Professionalism: How to do deliberate practice (skip to slide 33 if you know how cyber-dojo runs) I helped run a cyber-dojo using a custom server KGISL had built supporting more than sixteen participants - using famous computer scientists as avatars instead of animals. Fantastic! Youngsters from the local community also participated, encouraged by Sudharsan who has been running a local CoderDojo. I was hugely impressed to see Ashok, a founder of KGISL Group roll his sleeves up, literally, and participate in the practice. A terrific example of leadership. Then lunch, and another cyber-dojo, and some more consulting. I look forward to returning. Thank you KGISL.

Atlantec conference

It was a pleasure and an honour to speak at the first Atlantec conference held in Galway, Ireland on May 15th. I talked about cyber-dojo and showed some statistics from a random sample of its 30,000+ cyber-dojos, together with a few examples of code/tests typically submitted, a few dashboard patterns, and wrapped up linking testing to Le Chatelier's Law and some of my favourite Systems Thinking quotes from Bradford Keeney.

do more deliberate practice

Do More Deliberate Practice is one of my entries in 97 Things Every Programmer Should Know. is the site I built where teams can practice programming.

Deliberate practice is not simply performing a task. If you ask yourself "Why am I performing this task?" and your answer is "To complete the task," then you're not doing deliberate practice.

You do deliberate practice to improve your ability to perform a task. It's about skill and technique. Deliberate practice means repetition. It means performing the task with the aim of increasing your mastery of one or more aspects of the task. It means repeating the repetition. Slowly, over and over again. Until you achieve your desired level of mastery. You do deliberate practice to master the task not to complete the task.

The principal aim of paid development is to finish a product whereas the principal aim of deliberate practice is to improve your performance. They are not the same. Ask yourself, how much of your time do you spend developing someone else's product? How much developing yourself?

How much deliberate practice does it take to acquire expertise?
  • Peter Norvig writes that "It may be that 10,000 hours [...] is the magic number."
  • In Leading Lean Software Development Mary Poppendieck notes that "It takes elite performers a minimum of 10,000 hours of deliberate focused practice to become experts."
The expertise arrives gradually over time — not all at once in the 10,000th hour! Nevertheless, 10,000 hours is a lot: about 20 hours per week for 10 years. Given this level of commitment you might be worrying that you're just not expert material. You are. Greatness is largely a matter of conscious choice. Your choice. Research over the last two decades has shown the main factor in acquiring expertise is time spent doing deliberate practice. Innate ability is not the main factor.
  • Mary: "There is broad consensus among researchers of expert performance that inborn talent does not account for much more than a threshold; you have to have a minimum amount of natural ability to get started in a sport or profession. After that, the people who excel are the ones who work the hardest."
There is little point deliberately practicing something you are already an expert at. Deliberate practice means practicing something you are not good at.
  • Peter: "The key [to developing expertise] is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes."
  • Mary: "Deliberate practice does not mean doing what you are good at; it means challenging yourself, doing what you are not good at. So it's not necessarily fun."
Deliberate practice is about learning. About learning that changes you; learning that changes your behavior. Good luck.

setting up your own digital-ocean cyber-dojo server

These instructions are obsolete.

The cyber-dojo server now runs inside a docker-container.
See the new instructions on running your own cyber-dojo web server.

Is a simple 6 step process:

1. start from the right image

  • Image: One-click Apps: [Docker 1.9.1 on 14.04]
  • Size: choose $10/month or more

2. install the cyber-dojo github repo

This will take about a minute. As root (making sure you type cyber-hyphen-dojo and not cyberdojo in the git clone command)...
$ cd /var $ mkdir www $ cd www $ git clone

3. install cyber-dojo as the default rails server and all the necessary gems

This will take 5+ minutes. As root...
$ cd /var/www/cyber-dojo/admin_scripts $ ./

4. install pre-built cyber-dojo-foundation docker-images

As root...
$ cd /var/www/cyber-dojo/languages $ ./docker_list_all_images.rb
will tell you the names of the docker-images held in the cyber-dojo-foundation docker hub
For example:
... cyberdojofoundation/clangpp_googletest == C++ (clang++), GoogleTest cyberdojofoundation/coffeescript_jasmine == CoffeeScript, jasmine cyberdojofoundation/csharp_nunit == C#, NUnit cyberdojofoundation/csharp_specflow == C#, SpecFlow cyberdojofoundation/d_unittest == D, unittest cyberdojofoundation/erlang_eunit == Erlang, eunit cyberdojofoundation/fortran_funit == Fortran, FUnit cyberdojofoundation/fsharp_nunit == F#, NUnit cyberdojofoundation/gcc_assert == C (gcc), assert ...

Now do a
$ docker pull <image>
for each image of your choice. For example,
$ docker pull cyberdojofoundation/clangpp_googletest

Alternatively, you can simply pull them all (typically takes 15+ minutes)
$ cd /var/www/cyber-dojo/languages $ ./docker_pull_all_images.rb

Note that whenever you pull new images you will need to repeat step 5.

5. refresh the caches

As root...
$ cd /var/www/cyber-dojo/caches $ ./

6. start your server

As root...
$ service apache2 restart