Deliberate Practiceλ︎
People learn by doing. People need to do something many times before it becomes instinctive or ingrained.
Deliberate practice is about doing something in order to learn rather than produce a finished product with all the presures that entails.
Deliberate practice is not aimed at being an effective way to develop a software product, rather training tools which encourage high levels of learning and improve skills effectively.
Academic Research
In studies of accomplished individuals, researchers have found few signs of precocious achievement before the individuals started intensive training. Similar findings have turned up in studies of musicians, tennis players, artists, swimmers, mathematicians, and others.
Delivery can limit learning
Working on a software project under deadlines and other pressures detracts from what you can learn, unless you take the time to setp back from the "doing" and "deadline".
Most fundamentally, what we generally do…. isn’t designed by anyone to make us better at anything. Usually it isn’t designed at all: We are just given an objective that’s necessary to meeting the employer’s goals and then expected to get on with it.
Kataλ︎
Kata is a form of deliberate practice that uses repetative actions to improve skills. Code kata involves solving different challenges or the same challenge in different ways.
Code kata is used to implement different code solutions to the same design challenge.
Architecture kata is a way practice creating high-level solutions to business challenges.
Code dojoλ︎
A coding dojo is a group event to help you learn a language, a framework, tool or development technique. Ideally the scope of the challenge should be designed around what is most useful to learn each time.
Attending a coding dojo on a regular basis gains a lot of experience to become more effective when working on projects.
Dojo experiences create a familarity and higher comfort level with pair programming, increating the levels of pair programming and promiscuous pairing happen at work.
A coding dojo provides exposure to the practical experience of others, especially things people forget they know or do almost instinctively.
Next simplest thing that can be done
Dojo events are only 1 to 2 hours long, so only doing the next simplest thing each time minimises the risk of analysis paralysis (discussing many options and paths without actually coding anything).
By considering the next simplest thing that can be done, a specific piece of code can be written and evaluated once it has been created. Then the next simplest thing can be done.
Classic style dojo can be challenging
The original coding dojo approach was to have a single laptop connected to a projector (or very large screen monitor) so everyone present can see the coding taking place.
At regular intervals a pilot and co-pilot take there positions at the computer and have a set time to create a new test, implement code to fix a failing test or refactor the code.
The pilot writes tests or code whilst the co-pilot asks questions and discusses the approach they are taking. These discussions are spoken aloud so the audience can clearly hear them.
If the pilot and co-pilot need help, they should ask the audience for guidance.
This approach can feel quite high pressure, especially when in a group of people that are not well known.
Group show and tell dojoλ︎
Collectively identify one or more challenges to work on and divide up in to small groups of 2 to 3 people. Larger groups tend to lead to disjointed discussions and very limited progress.
Each group decides how to tackle the challenge and takes turn driving the code.
Toward the end of the event, each group presents their design decisions and interesting aspects of the code.
Share code dojo results
Use a code sharing service such as GitHub / GitLab to share the code with the group and wider community, continuing the discussion and learning opportunity beyond the dojo event.
London Clojurians Org is an example of a GitHub Organisation which the community shares there dojo experiences.
Code Retreatλ︎
A group event where the same code challenge (code kata) is attempted over again with different pairs of people each time.
The group is organised into pairs (or trio's if there is an uneven number in the group).
Each pair starts the challenge from scratch and has a set time to attempt the solution (typically 45 - 60 minutes).
Pairs show and tell their approaches, with the ephasis on why a design was chosen.
After a short break, the group is organised into different pairs and the same challenge is attempted from scratch.
A retrospective is run at the end of the day, reflecting on the code retreat approach and designs shared throughout the day.