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.
cyber-dojo.org 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

From http://cloud.digitalocean.com
  • 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 https://github.com/JonJagger/cyber-dojo

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 $ ./setup_digital_ocean_server.sh


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 $ ./refresh_all.sh


6. start your server

As root...
$ service apache2 restart


cyber-dojo at Bristol Docker meetup

Here's a video of a short presentation I did (at the inaugural Bristol Docker meetup) explaining cyber-dojo and how it uses Docker. The projection is mostly invisible I'm afraid. The security flaws (such as running the containers as root) have now been fixed.



the test page




  • click it to run your tests
  • the stdout or stderr file opens and display the results
  • a new right-most traffic-light appears

Click any traffic-light to open the history view
red - the tests ran but one or more failed.
amber - the tests did not run, eg syntax error.
green - the tests ran and all passed.
the tests did not complete in 15 seconds. Accidentally coded an infinite loop? Too many concurrent cyber-dojos? Lost your network connection?
the total number of traffic-lights (in the most recent traffic light's colour).
your animal, if you are in a group practice.

keyboard shortcuts

  • Alt-O toggles through the editor tabs
  • Alt-J cycles downwards through the filenames
  • Alt-K cycles upwards through the filenames
  • Alt-T runs the tests

Here a full list of shorcuts. Some useful ones for seach are replace are:

Start searching == Ctrl-F / Cmd-F
Find next == Ctrl-G / Cmd-G
Find previous == Shift-Ctrl-G / Shift-Cmd-G
Replace == Shift-Ctrl-F / Cmd-Option-F
Replace all == Shift-Ctrl-R / Shift-Cmd-Option-F
Jump to line == Alt-G


evidence for pairing effectiveness

When I run a cyber-dojo I always ask the participants to work in pairs, two people per computer. I've been doing some research on pairing and I've come across a book called Visible Learning by John Hattie. It's a synthesis of over 800 experiments and papers relating to achievement in schools. On page 225 there is a section called The use of computers is more effective when peer learning is optimized. It reads, and I quote...
  • Lou, Abrami, and d'Apollonia (2001) reported higher effects for pairs than individuals or more than two in a group.
  • Liao (2007) also found greater effects for small groups (d=0.96) than individuals (d=0.56) or larger groups (d=0.39).
  • Gordon (1991) found effects were larger for learning in pairs (d=0.54) compared to alone (d=0.25).
  • Kuchler (1998) reported d=0.69 for pairs and d=0.29 for individuals.
  • Lou, Abrami, and d'Apollonia (2001) reported that students learning in pairs had a higher frequency of positive peer interactions (d=0.33), higher frequency of using appropriate learning or task strategies (d=0.50), persevered more on tasks (d=0.48), and more students succeeded (d=0.28) than those learning individually when using computers.
What do the numbers mean? Quoting from the front of the book...
An effect size of d=1.0 indicates an increase of one standard deviation on the outcome - in this case the outcome is improving school achievement. A one standard deviation increase is typically associated with advancing children's achievement by two to three years, improving the rate of learning by 50%, or a correlation between some variable and acheivement of approximately r=0.50. When implementing a new program, an effect size of 1.0 would mean that, on average, students receiving the treatement would exceed 84% of the students not receiving that treatment.
Of course, things are rarely absolutely black and white, but these are impressive numbers.

  • Lou, Y., Abrami, P.C., & Apollonia, S. (2001). Small group and individual learning with technology: A meta-analysis. Review of Educational Research, 71(3), 449-521
  • Liao, Y.K.C. (2007). Effects of computer-assisted instruction on students' achievement in Taiwan: A meta-analysis. Computers and Education, 48(2), 216-233.
  • Gordon, M.B. (1991). A quantitative analysis of the relationship between computer graphics and mathematics achievement and problem-solving. Unpublished Ed.D., University of Cincinnati, OH.
  • Kuchler, J.M. (1998). The effectiveness of using computers to teach secondary school (grades 6-12) mathematics: A meta-analysis. Unpublished Ed.D., University of Massachusetts Lowell, MA.

facilitating a cyber-dojo tips

When I'm facilitating a cyber-dojo with a new group here's how I typically start:
  1. I suggest that developers habits and thinking is strongly influenced by their development environments. If you use Eclipse to develop software then when you use Eclipse your default mentality is one of development. Not practising. Since we're practising, we deliberately don't use a development environment.
  2. I point out that cyber-dojo is not a personal development environment, it's a shared practice environment. In a development environment it makes sense to have tools such as colour syntax highlighting and code-completion to help you go faster so you can ship sooner. In a practice environment it doesn't. When you're practising you don't want to go faster, since you're not shipping anything. You want to go slower. You want your practice to be more deliberate.
  3. I observe that since it is so different to a development environment, participants may feel some slight discomfort when first using cyber-dojo. This discomfort is also deliberate! Discomfort can bring learning opportunities.
  4. I do a short demo explaining...
    • the files on the left side
    • the initial source files bear no relation to the exercise
    • the test button
    • the output file
    • the meaning of the red, amber, green traffic lights
  5. I ask the participants to enter their dojo in pairs. Pairing is an important part of the learning. Occasionally a few choose not to pair (and that's fine) but most do.