On Feb 22nd, a dozen of inspired software programmers from 4 local companies met at Tiedepuisto in Joensuu 8am in the morning. Their goal being to code for the whole day a simple program for Conway’s game of life. You’d expect that a dozen of programmers would not need a whole day for it.
And there’s the catch. We started from the scratch six times. That is, six times we started to solve the problem from the start! Why on earth, why would I want to spend a whole day programming while not getting anything done? And that’s the whole point of coderetreat. To practice.
Coderetreats often have a certain structure. Day starts with breakfast and while drinking morning coffee I often sense the excitement within the attendees.
In the first 45 minute session, we get to know to the domain – to Conway’s game of life. While attendees are implementing their first code snippets, the facilitator often circles around, looking over the programmer shoulder, quite literally. The facilitator tries to find issues to tackle over the next 5 sessions.
Are we using boolean flags for describing state? Are we using an array of array to describe the world? With the observations done during the 45minute programming period, we end up sessions with a short reflection.
In the last 5 sessions, the facilitator decides some constraints for the attendees. The goal is to make the attendees to code in a way they normally don’t with production code. Or, to say as it is, to take people out of their comfort zone into the zone where there’s a huge opportunity to learn.
The constraints often are selected based on the observations during the previous sessions:
Are the developers using too much mouse? How about constraint that no-one is allowed to use mouse (or trackpad). You better learn to use your IDE to get anything done.
Are the developers using language provided collections? How about a constraint for using first-class collections!
Primitive Obsession -> No primitives
overly used if-statements -> Single Responsibility Principle/No if-statements
Long methods -> at max 4 lines per method.
You get the drill.
After the fifth session, we are often exhausted. The programmers have been pushed and pushed to try to follow the rules. And maybe even more. As the last session, many facilitators give the programmers a chance to select (at least) one of the constraints we had during the day.
Giving a chance to practice the one they liked the most. The closure for the day, for the learning.
After the last session reflection, we do still have one important task: reflect the whole day.
During the reflection, programmers answer to the three following questions:
1) What, if any, did you learn today
2) What, if any, did surprise you today
3) What, if any, will you take with you from the event
As facilitator, I’ve seen that two constraints are those that come up in all the three questions.
Firstly, there’s the constraint of ‘single responsibility / no if-statements’ that makes programmers to really focus on objects.
Secondly, there’s the constraint of ‘Baby Steps’ that often drives people nuts in the beginning. And that often, to our biggest surprise, seems to make sense.
Were you there? Have you been to other coderetreat events?
I’d appreciate your experiences and thoughts on this kind of deliberate practice.