- Olve Maudal, Mike Long, Johannes Brodwall, Emily Bache, and Seb Rose have been enthusiastic about cyber-dojo from the very early days. Big thanks also to Mike Sutton, Michel Grootjans, James Grenning, Byran Wills-Heath, Bob Allen.
- Olve, Mike, Johannes, Emily, Seb, Mike, Michel, James, Byran, Bob - I really appreciate all your help and encouragement.
- Jerry Weinberg showed me the power of experiential learning on all of his conferences and courses, notably Problem Solving Leaderhip (PSL) which strongly influenced the way I designed cyber-dojo. Thank you Jerry.
thank yous
overview of how cyber-dojo uses git
This blog entry has been commented out.
cyber-dojo no longer uses git in its storer service or its runner service.
cyber-dojo no longer uses git in its storer service or its runner service.
overview of how cyber-dojo's language docker-containers work
When you set up your cyber-dojo cyber-dojo will only offer entries whose languages/ subfolder's
cyber-dojo will start a container from the docker
manifest.json
file has an image_name
entry that exists. For example, if
cyber-dojo/languages/Java/JUnit/manifest.json
contains this...
{
"image_name": "cyberdojofoundation/java_junit"
"display_name": "Java, JUnit",
...
}
then [Java, JUnit
] will only be offered
if the docker image cyberdojofoundation/java_junit
exists
on the server, as determined by running
$ docker images
cyber-dojo will start a container from the docker
image_name
to execute an animals
cyber-dojo.sh
file each time the animal presses the
[test]
button.
cyber-dojo language's manifest.json entries explained
This page is for an old version of cyber-dojo.
This is the page you're looking for.
This is the page you're looking for.
adding a new language and unit-test-framework to cyber-dojo
This page is for an old version of cyber-dojo.
This is the page you're looking for.
This is the page you're looking for.
interviewing and cyber-dojo
Why not ask potential interview candidates to do an exercise in cyber-dojo? Candidates simply email you their cyber-dojo URL (which contains their id) when they're finished. From this you can look not only at their final solution, but also at their tests, and how they got there. We know several companies already doing this. They report that it's best to be clear and up-front about what you want. That it's not uncommon for candidates to work on a solution outside of cyber-dojo and then paste in their final code (and maybe the test code!). This gives you no clue as to how they got there. Ask them not to do this.
Another useful idea is to provide concrete feedback to the candidate and ask them to try again.
Then look at their second submission to see if/how they adopted the feedback.
If your team sometimes pair-programs, why not mirror the pairing in your recruitment process?
Instead of interviewing 5 candidates sequentially, see how five candiates fare technically (and socially) in a 10 person cyber-dojo, pairing each candidate with a developer from the team they're hoping to join. Do several iterations swapping partners each time. Note that if your team never pair-programs it is incongruent to pair in the interview.
Another useful idea is to provide concrete feedback to the candidate and ask them to try again.
Then look at their second submission to see if/how they adopted the feedback.
If your team sometimes pair-programs, why not mirror the pairing in your recruitment process?
Instead of interviewing 5 candidates sequentially, see how five candiates fare technically (and socially) in a 10 person cyber-dojo, pairing each candidate with a developer from the team they're hoping to join. Do several iterations swapping partners each time. Note that if your team never pair-programs it is incongruent to pair in the interview.
Teamwork characteristics ... cannot be determined if you interview ... one at a time.
W. Edwards Deming
some stats on 15,000 practice sessions
As I write this (September 2014) the number of practice dojos on cyber-dojo.org is about 15,000.
The most popular day to run a cyber-dojo is Thursday.
The most popular language-unit-test framework is Java-JUnit (but the figures probably depend a lot on which ones have been installed the longest).
The most popular exercise is Fizz Buzz (again, some have been installed longer than others).
The most popular day to run a cyber-dojo is Thursday.
- 1375 Saturday
- 1022 Sunday
- 2488 Monday
- 2588 Tuesday
- 2575 Wednesday
- 2660 Thursday
- 2307 Friday
The most popular language-unit-test framework is Java-JUnit (but the figures probably depend a lot on which ones have been installed the longest).
- 3125 Java JUnit
- 2881 C# NUnit
- 1087 Python unittest
- 1071 C++ assert
- 904 C assert
- 736 PHP PHPUnit
- 701 Javascript assert
- 600 C++ GoogleTest
- 525 Ruby TestUnit
- 384 Python pytest
- 357 Java Approval
- 324 Java Mockito
- 278 C++ CppUTest
- 219 Ruby RSpec
- 217 Java Cucumber
- 205 Javascript jasmine
- 157 Haskell hunit
- 154 Clojure .test
- 131 Go testing
- 125 C++ CATCH
- 120 Perl TestSimple
- ...
The most popular exercise is Fizz Buzz (again, some have been installed longer than others).
- 2091 Fizz Buzz
- 1830 100 doors
- 924 Verbal
- 787 Calc Stats
- 778 Leap Years
- 733 Roman Numerals
- 722 Game of Life
- 713 Anagrams
- 644 Print Diamond
- 549 Tennis
- 498 Prime Factors
- 476 LCD Digits
- 466 Yatzy
- 405 Bowling Game
- 355 Count Coins
- 329 Number Names
- 298 Harry Potter
- 287 Mine Field
- 286 Phone Numbers
- 192 Poker Hands
- ...
terms & conditions
- cyber-dojo is free for non-commercial use.
- Commercial use of the public server requires a license. For example, if you work for a profit-making organization, and you're using https://cyber-dojo.org at work, you need a license.
- The cyber-dojo Foundation issues licenses
- cyber-dojo is provided in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.
please email us your feedback
What did you like?
What did you dislike?
What should I add?
What should I remove?
Please email me your feedback.
What did you dislike?
What should I add?
What should I remove?
Please email me your feedback.
how is cyber-dojo implemented?
- cyber-dojo.org runs off a Ruby on Rails server, in a docker container, in a Kubernetes cluster.
- cyber-dojo's languages also run in docker containers.
- cyber-dojo is open sourced and lives on github.
- cyber-dojo was conceived, designed, and implemented by Jon Jagger.
- cyber-dojo's design is strongly influenced by Jerry Weinberg's teachings on experiential learning.
what is cyber-dojo?
- a dojo is a place where martial artists practice martial arts.
- cyber-dojo is where programmers practice programming!
- cyber-dojo is not an individual development environment.
- cyber-dojo is a shared learning environment.
- in a cyber-dojo you focus on improving rather than finishing.
- in a cyber-dojo you practice by going slower.
cyber-dojo tips
- Repeat your practice. Repetition frees up mental capacity creating space for improvement.
Don't be too concerned about finishing; think about improving. - cyber-dojo is designed to encourage team practice and works well with two (or more) people at each computer, periodically rotating the current keyboard drivers to different computers as navigators.
- After each practice use the
dashboard
to start a review.
Look for evidence of...
- starting with a failing test
- refactoring
- overly ambitious steps
- improving the diagnostic
- Practice refactoring.
- Allow at most N amber traffic-lights (total or in-a-row)...
- per animal
- per cyber-dojo
- repeat with reduced value of N
- Turn on traffic-light colour prediction. Allow at most N incorrect predictions...
- per animal
- per cyber-dojo
- repeat with reduced value of N
- Set social challenges...
- Change keyboard drivers before starting each new practice
- Change keyboard drivers during a practice
- Change pairs before starting each new practice
- Change pairs during a practice
- Set technical challenges...
- no loops
- no conditionals
- no division or modulus
- immutable data structures only
- no mouse
- no data structures
- maximum 5 lines per method
- maximum 2 levels of indentation
- the possibilities are endless!
- When everyone is at green set a challenge to either...
- find some code you can delete and the tests still all pass
- find a bug, and write a failing test for it
- Create a custom starting point...
- with all the tests, but none of the code
- with all the code, but none of the tests
- with a specific fault - which pair can fix it first?
- Play the average-time-to-green-game.
Subscribe to:
Posts (Atom)