I watched a thought provoking video from the fabulous Dan North about why we should be focused on deliberate learning over deliberate practice.
I found it thought provoking as it’s challenged beliefs, but seemingly not enough to change them. I’m now just confused.
Here is the video (22 mins long). Please watch it before reading & critiquing my ideas:
This is how I’ve interpreted his argument
- coding katas are examples of deliberate practice
- the premise of deliberate practice being that to be skilled at something, you have to invest time in that something
- martial arts katas are a poor metaphor software development because they are optimising for giving a performance
- it takes 10,000 to become an expert at giving that performance
- in giving a performance time & time again, we need to minimise variance
- writing software is not about doing the same thing again & again
- writing software is not a performance
- so katas and dojos don’t matter
- so we shouldn’t do them
We should instead focus on deliberate learning is about maximising discovery (over minimising variance).
What’s my beef?
So my problem isn’t with deliberate learning, I get that.
What I don’t get is the move away from deliberate practice.
It feels like they’re at different levels of granularity.
I appreciate that each piece of software we develop will/should be unique, but the activities that are required to even write code in first place are constant.
Dan mentions that individual katas can be linked to create a flow of moves (the example given being that of defending a doorway from attackers to the left, right & in front of you).
I’m a novice programmer (at best). I struggle with the syntax of a language, yet alone the keyboard shortcuts of the IDE. I argue that there are actions that need to be done repeatedly in order to be “good” at writing code.
I am that guy that no one wants to pair with, largely because I am painfully slow at the basics. For example, I use the dropdown menus in the IDE to refactor or extract methods because I can’t remember the keyboard shortcuts
Here’s my point (finally):
If the basics of writing code were drilled into me through katas / deliberate practice, then my deliberate learning will be a lot more effective.
I don’t do martial arts, so I’ll use an example from kayaking (surprise surprise)
(admittedly not from a development context, so may be redundant for this thought exercise)
I learned to roll my kayak so that I could rescue myself. This took hours & hours of deliberate practice & a lot of swimming after running out of breath & failing to roll back up.
Having a bombproof roll from a comparatively early age made me way more comfortable when paddling in conditions that were likely to result in me being upside down so that I could right myself rather than swim.
If was to paddle a river I hadn’t paddled before (deliberately learn) without a solid roll, I can imagine I wouldn’t learn as much because I would potentially be swimming a whole lot more (well, I’d be learning about the river bed as I was dragged over rocks I guess, but that’s not what I wanted to learn).
I’ve also seen people challenging themselves on rivers (deliberately learning) without a solid roll – they spend half their floating half upside down, half upright with their heads in the water, really not enjoying themselves.
So to summarize then, I see deliberate practice as the building blocks that help enable quality deliberate learning.
As I value & respect what Dan has to say, I have the feeling that I am missing something from this talk.
P.S. On the surface of it, this talk also appears to contrast with James Bach’s CAST Keynote “Test Cases Are Not Testing – Towards a Performance Culture” – That might be covered in another post.