I had the wonderful opportunity to facilitate a coderetreat as one of the sessions in the pre-conference tutorial day at the ACCU conference this year.
Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design. By providing developers the opportunity to take part in focused practice, away from the pressures of 'getting things done', the coderetreat format has proven itself to be a highly effective means of skill improvement. Practicing the basic principles of modular and object-oriented design, developers can improve their ability to write code that minimizes the cost of change over time.The coderetreat format is pretty simple: solve Conway`s Game of Life, in 45 minute sessions, and throw away what you have at the end of each session. With each session we add additional constraints to challenge ourselves to write code using approaches we wouldn't normally use.
For this coderetreat I used the cyber-dojo software to create an online coding environment for us to practice in. Cyber-dojo is great in this setting because it frees participants from having to spend precious workshop time getting toolchains set up, makes it much easier for us to swap computers, and provides the ability to replay the diffs in the review.
session 1: introducing the game of life
For the first session, there were no constraints other than trying to focus on the Four Rules of Simple Design. This was the first time for many in the group to use cyber-dojo software, and also it was the first time most had tried to implement the Game of Life so there was a lot to take in.click to view on cyber-dojo.org |
Many surprised me with some very far sighted questions, such as "is the universe infinite?", which are rarely asked by first timers.
session 2: ping-pong
For the second session we added the ping-pong constraint. This is where each pair switches keyboard every time a test fails, then the partner must do the minimum to make it pass. Once he (unfortunately there was a lack of gender diversity in this coderetreat!) is happy with the state of the code it is his turn to reciprocate and implement a test for his partner.click to view on cyber-dojo.org |
session 3: promiscuous pairing and immutability
For the third session we added one technical constraint, Immutability, and also changed our pairing strategy to switch partners with other pairs every ten minutes.click to view on cyber-dojo.org |
session 4: changing requirements
In the fourth session we simulated the single most common event in professional programming: changing requirements.click to view on cyber-dojo.org |
session 5: no ifs
The fifth session was a real technical challenge: can you implement Conway's Game of Life without using anyif
statements?click to view on cyber-dojo.org |
yellow
traffic lights, indicating a lot of compilation failures for this session. I think the fact that we were using c++ played a significant part in this because we were dusting off long-forgotten standard library and dynamic dispatch knowledge.
Closing circle and feedback
It is traditional to end a coderetreat with a closing circle. Participants are encouraged to answer three questions:- What, if anything, did you learn?
- What, if anything, surprised you today?
- What, if anything, will you do differently in the future?
Best thing: Switching pairs and computers. [This opinion was held by many]
Best thing: The pacing made it challenging and kept it very live. I wish I could compile and test as fast as cyber-dojo ;-)
Best thing: repetition of the basics, approaching the same problem from different points of view, applying different constraints
Best thing: coderetreat itself, and switching of pairs. Very interesting
Improve: the starting point, so we don't have to perform the same boilerplate changes (renaming files and classes) at the start of every iteration. [Many variations on this one, I think this is also a little language specific, given the amour of boilerplate in c++]
Improve: If each session could be a little longer [Also a common theme in the responses]
Meta finale
For many people, coderetreat is their first exposure to pair programming and test-driven development. Cyber-dojo is a great environment to begin learning these new skills because it provides a lot of feedback as you go. Every time you presstest
you get a snapshot of your code you can look back on, and see the diffs as you progress through the kata. You can also take a look at what other pairs are doing and learn from them.When looking at how I (and others) approach a problem, there are a few questions I routinely ask. What was the first test? How often did I go through the TDD cycle? How many consecutive greens did I see, indicating a lot of refactoring? Answering these questions is a breeze with cyber-dojo.
All the dojo's from the coderetreat have been uploaded to the cyber-dojo.org server, so feel free to have a peek and look for your own treasure.
You can contact me on twitter @meekrosoft.