I’ve started a couple of technical book clubs in my career. Both had some key ingredients for success:
- A mental skill
- People lacking proficiency with the skill
- A desire to learn the skill
- Safe to fail environment
- Periodic time where the group could meet
Mental skills
For physical skills, I start by teaching a basic skill, followed by repetition with subtle variations designed to keep it interesting as well as expand awareness of the problem space. For example, when I was a taekwondo instructor, I’d teach a kick a certain way. Once students showed repeatable success with the kick, I’d focus on an aspect of the kick – kick higher, kick faster – until it exposed a new concept, at which time we’d focus on that.
By mental skills, I’m talking about the category of skills programmers use – cerebral pursuits where the skill consists of knowing strategies and techniques and applying them to situations. Mental skills include programming languages, design patterns, principles and practices. I find that the mental skills acquisition is similar.
I have less experience with social and spiritual skills, maybe you have an approach you’d like to share in the comments.
People lacking proficiency with the skill
An environment ripe for a book club includes an application of the skill in question. If I’m mentoring a group of developers that are all weak in design patterns, it’s an easy sell to read a book about the subject as a group.
A desire to learn the skill
Desire is a prerequisite for learning any skill. If a person doesn’t want to learn, they will avoid situations where learning can occur, like a book club. I’ve never been in a position where a book club was required, but I have been in teaching situations with people who don’t want to learn and find them to be very difficult.
Safe to fail environment
In my experience, people struggle to learn in situations where they feel pressure to perform, or at least to avoid embarrassment. Learning is hampered when attention is split between acquiring proficiency and auditing their own performance.
Periodic time where the group could meet
There are more effective ways of learning a mental skill than reading a book. For example, if I’m trying to learn a new programming skill, I will choose pair programming when it’s available. I should mention here that having the right partner is crucial to success. I look for people who are good teachers, patient and good at explaining things in multiple ways.
Pairing is highly interactive, and I get a chance to do two key things:
- try to apply the new skill
- have an experienced person model the correct behavior
This allows me to “act as if” I had the skill until I can do it on my own.
The natural extension of pair programming is a code kata, where multiple people get together to program. It can be hard to find the time – I’d recommend 1-2 hours each week. Scheduling can make a code kata impractical.
However, a book club can provide a muted version of this experience. The mentoring that happens with pair programming comes from a book, which has the advantage that you can read sections over and over. The downside is that the book only explains the new skill one given way.
The book club helps overcome this deficiency with group discussion, as well as providing a pool of people who are in the same learning situation as you are. The hope is that at least one person will get each concept and can help the others catch on.
Why not just read it alone?
To my mind, good learning environments include:
- examples to learn from
- freedom to make mistakes
- an element of play
A good book club can provide all of these things better than an individual reading experience. When other people ask questions and offer opinions, more learning situations are provided than by a book alone. People bring their own experiences to a book, and this effect is magnified by multiple people.
The element of play comes from a social forum of like-minded individuals. In groups with a minimum level of trust, honest opinions can be shared. People can experiment with new ideas and concepts without fear of lasting consequences.
This is not to say there are no repercussions for making mistakes: with no cost of failure, there’s no reward for succeeding. Good learning environments include a penalty for failure that participants are willing to pay.
This is why games are such effective teaching tools: a simplified learning situation, consequences which are easy to tally and last only until the end of the game, and a structure made to promote fun. In short, games allow people to focus on one aspect of a problem.
Which book should I pick?
You want a book that hits the sweet spot for the group. In both book clubs I ran, successful books were:
- relevant,
- pitched at the appropriate skill level,
- easy reading (small chapters), and
- entertaining
Here are some books that succeeded:
- Working Effectively with Legacy Code by Feathers
- Clean Code by Martin
- Head First Design Patterns by Freeman, Freeman, Bates and Sierra
- Professional Test Driven Development with C# by Bender and McWherter
Here are some that flopped:
- Domain Driven Design by Evans, too thick and dry
- Working Effectively with Legacy Code, examples in wrong language
- The Power of Less by Babauta, I was in the minority who liked it
- Strength Finder 2.0, we didn’t share our results
As you can see, your mileage may vary.
Books I recommend that I’d enjoy reading as a group:
- Growing Object-Oriented Software, Guided by Tests by Freeman and Pryce
- Management 3.0 by Appelo
- Managing Humans by Lopp
- The Pragmatic Programmer by Hunt and Thomas
Please, share you experience in the comments. What books have you read? What formats worked best for you?