Deliberate Practice

It is true that ‘Practice makes perfect’. But just practice won’t help. What is essential is the right, deliberate practice. As Michael Jordan says:

You can practice shooting 8 hours a day, but if your technique is wrong, then all you become is very good at shooting the wrong way. Get the fundamentals down and the level of everything you do will rise.
Deliberate practice

And this — the deliberate practice — is what makes any professional better and software engineering is no different. Let’s look at some of the techniques to help us do deliberate practice.

Code Kata

A kata is an exercise in karate where you repeat a form many, many times, making little improvements in each. The intent behind code kata is similar. Each is a short exercise (perhaps 30 minutes to an hour long).
http://codekata.com/

Code Kata is by Dave Thomas, author of many books, including the classic Pragmatic Programmer. There are a lot of katas on the site, focussing on various aspects such as collections, strings and OO design and can be solved in multiple ways.

Extreme OOP

I came across this recently — an exercise to learn about OOP, Simple Design and TDD. The exercise is to create an interpreter similar to Commodore 64 BASIC by following a set of TDD and Extreme OOP rules.

The rules help us to improve our way of thinking and arrive at newer/better ways of programming. Practicing it over and over across different languages help us to improve the understanding of the language.

Exercism

Exercism is an open source project to help one to start with coding or to learn a new language [supports close to 30 languages] by solving problems in TDD way. It can also be used to improve the clean code and refactoring skills. One can get feedback on the code from the community by uploading it.

Cyber-Dojo

A Dojo is a place where martial artists meet to practice their martial art!
http://jonjagger.blogspot.in/p/cyber-dojo_2380.html

Cyber-dojo is another place for doing deliberate practice through TDD. I recently came across cyber-dojo and just started with the same. Similar to Exercism, one can get feedback from the group by uploading the solution.


Now let’s look some of the options to learn as a group. One can practice Katas or any of the exercises above as a group, but there are a few well-structured events help learn from each other and have fun.

Code Retreat

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.
http://archive.coderetreat.org/about

Code Retreat has a specific structure and, it is the same problem, Convey’s Game of Life, that is being solved throughout the day in multiple 45 minutes session. The idea of Code Retreat is to learn and have fun.

Coding Dojo

A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there having fun and to engage in DeliberatePractice in order to improve their skills.
http://codingdojo.org/WhatIsCodingDojo/

Unlike Code Retreat the problem is solved by the entire group together in a single language, and the group can choose the problem too from the given set.

I’ve never been part of Coding Dojo but heard great feedback about it from the participants.

Études

A étude is an instrumental musical composition, usually short, of considerable difficulty, and designed to provide practice material for perfecting a particular musical skill.
Wikipedia

As mentioned above in Wikipedia, the études are considerably difficult short compositions provided as practice material for improving the skill. I came across applying études to software development from the book The Art of Agile Development by James Shore.

At the end of each chapter in the book, Jim talks about études that can be practised to improve the practice mentioned in the chapter. These are not just related to coding; it talks about practices for delivering software sustainably and predictably.

I also came across the book Etudes For Programmers, but yet to get hold of the book.

Summary

There are a few things that are common to all of the above, i.e. the focus on:

  • Simple design and clean code
  • TDD [Test Driven Development].

TDD helps to visualise the problem in small, simple steps and make progress. So practising any of the above improves the TDD skills too.

Practicing these help us improve our way of thinking and approach any problem in various ways. It is recommended to practice when we are starting with new languages or to improve the understanding of the language we frequently use.