How do developers learn? Of course developers learn the same way as everyone else although not all learners are equal. Given that the pace of change in software delivery means we often find ourselves using a framework or language for short periods, it is worthwhile expending effort to learn how we learn.
If we approached how we deliver learning-to-ourselves in the same way we deliver software products, we’d adopt practices from Lean Engineering like Kata’s, iteration, short sprints with shorter feedback loops, removing blockers, avoiding unplanned work and so on; we’d manage it professionally and as we iterate we’d get more effective and efficient at it.
Two thorny issues at the heart of learning are retention and motivation, if we get good at these then we are well on the way to being good learners.
Inefficient learners often try a simple strategy of rote learning or memorising by repetition – like cramming for an exam – which we all know doesn’t retain well over longer periods or do much to enhance skill. A good learning strategy for programmers on the other hand, needs to cater for skill, understanding and retention.
For example, if we want to learn about a language that is new to us like Elixir or C# but we are very busy and our entire bank of learning-time happens to fall within our commute we could adopt an ostensibly efficient strategy of reading books on the topic, and for a change from reading maybe gorge ourselves on podcasts. Thinking back to that old adage that students only retain ten minutes of a sixty minute lecture and applying that to the act of reading a book, it’s obvious we need to do more than just read it. In order to truly learn and retain it, we need to synthesise the ideas and make them our own.
Before considering that, lets think about learning facts.
Learning abstract facts
Facts are not easy to retain if we just practice memorising them. We can do much better if we adopt a spaced-repetition-learning system as these have been shown to help us not only memorise but retain over long periods abstract facts like CLI, Git commands or language features. The open source Anki product is a spaced-repetition-learning tool designed to foster efficient learning by making us practice the material we are most likely to forget using a Flashcard system.
Learning new skills and problem solving
Skills on the other hand is where something like www.khanacademy.org can show us the way with its clever strategy of identifying what you find hard and bombarding you with questions (and tutorials) in that problem space until you can successfully solve the problem. At the same time it periodically questions you on things you have previously solved (often weeks ago) in order to cement that learning into long term knowledge; it utilises multiple strategies including creative problem solving and spaced-repetition-learning.
Whilst Anki is great for retention of learnt (grocked) knowledge using short focused ten minute top-up sessions every day (Kata promotes daily frequency too), Khan Academy provides the additional benefit of employing our problem solving creativety to makes us synthesise ideas and concepts into new skills; this process is very efficient for retention.
The key is active participatory learning – or to be all fancy about it, Metacognition as espoused by John Flavell. To a greater or lesser extent, Anki, KhanAcademy, PluralSight and CodeSchool all invoke this.
The impact of creativety on learning
What is critical about creativity is the search for meaning and this is not a clear cut linear process but one which requires constant revision of one’s thoughts and decisions of what is relevant in a search for meaning. This sounds a bit like coding.
If we take an analogy from the Arts and Social Sciences, the strategy there is to read, then summarise and then use creative writing to formulate an opinion in our own words, but why creative writing? It’s the thought process behind formulating and arranging our own-words that is critical. Short term memory prevents us from transcribing a 3000 word piece sequentially in one go, instead we iterate whilst we struggle to formulate what is in our head into a cogent whole. This polishing phase of composition - where we look for meaning by adding and re-arranging paragraphs, re-wording and so on - mirrors efficient learning.
Efficient learning then, is more than just turning up, or just reading a book and doing nothing else. It is a combination of creative thinking, bolstered by repetition and backed up by spaced repetition of things you have already learnt to transfer them or maintain them in long term memory.
Matthew Syed, the author of Bounce: The myth of talent and the power of practice puts it very well when he discusses the role of deliberate or purposeful practice. When comparing two athletes, each of whom have spent the mythical 10,000 hours (this number is commonly used as a measure of Mozart like expertise) of practice honing their craft, Matthew argues the better of the two will be the one who has spent more effort on purposeful practice.
Motivation is very personal and from my experience there is no right way to motivate myself.
I do find that trying new things helps as does recording my success, success breeds success…my learning needs to be fun and productive.
I’ve tried Kata’s on varying sites to learn a new language (only to promptly forget what I learnt), indeed I admit I’ve crammed for Microsoft Exams (yip the knowledge went the same way as the Katas) but what I enjoy and retain the most is borne from building working software and blogging about it - thank you Git!
It’s truly creative so I am more engaged and it has orthogonal benefits like
- Delivering something tangible instead of just the solution to a Kata
- Satisfaction from sharing and getting feedback from the developer community
- Its something I can augment as I add new skills
Blogging about the side project helps – even if you have a readership of one you’ll learn because you become your own critic and just like rubber duck debugging it invokes the benefits of creative writing as you pursue the expression of the ideas in your head.
For lots of folks it appears Katas provide sufficient motivation. Ultimately it does not matter if you build something or just do Kata’s (indeed doing both is most likely the best) so long as we have a feed back loop that lets us verify if our learning is working for us.
- Effective Learning skills - http://www.asa3.org/ASA/education/learn/203.htm
- Teaching Writing for Learning: Roger A, 1985, Scottish Council for Research in Education
- Bounce: The Myth of Talent and the Power of Practice: Syed, Matthew (2010-04-29). HarperCollins Publishers.
After writing this post I came across some fabulous pages about this huge topic:
- Bret Victor’s Learnable Programming is an essay on his thoughts about learning programming.