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
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."
- 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."
- 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."
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 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 tabsAlt-J
cycles downwards through the filenamesAlt-K
cycles upwards through the filenamesAlt-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...
What do the numbers mean? Quoting from the front of the book...
- 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.
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:
- 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.
- 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.
- 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.
- 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
- 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.
Subscribe to:
Posts (Atom)