As kids, we learned to listen and to speak before we learned to read. We started our lives cooing indecipherable nonsense, and slowly adopted the intricate speech patterns of our caretakers until we could assimilate their language and communicate. We met the furry creatures crawling around the floor, and learned associations with the sounds “cat” and “meow” long before we went to school and learned that the string of letters “C-A-T” signified the same thing.
That’s the way most people learn languages: by interacting with others, slowly decoding the sounds and patterns until they can contribute on their own. Children and adults both learn languages better through audiobooks than written books, and there’s really no better way to learn a language than by immersing yourself in a foreign country and living among native speakers.
In the mid-20th century, a Japanese violinist named Shin’ichi Suzuki wanted to leverage this same idea on the way he taught music. He developed the Suzuki method, which aims to teach students to play musical instruments the same way children learn to communicate: by adapting to their environment.
The primary focus of the Suzuki method is to create an environment in which the student is surrounded by perfect tones. Students attend as many professional concerts as possible, and pay close attention to the orchestra’s tonality. They ingrain this ideal tonality deep into their senses so that it’s automatic; so that anything less than this perfect tonality becomes offensive to their ears—it’s indecipherable nonsense. Their muscle memory is created by this innate sense later, not the other way around.
Creating a Learning Environment
We’ve tried to recreate this effect in software by putting our apprentices in a similar type of environment. Our apprentices work alongside and occasionally inside of teams of professionals, observing craftsmen implementing the design patterns, architectures, and frameworks needed to build software systems well. It is the equivalent of perfect tonality—it’s a heightened code sense.
Apprentices absorb this code sense indirectly, by overhearing conversations between our craftsmen about tools, techniques, and different ways to think about new problems. They observe craftsmen working on problems every day, and use their experiences as a template for their own professional development.
But our apprentices also receive this code sense directly. They each have a mentor who oversees and guides their professional development. Mentors assign books to read and projects to complete with certain parameters that are designed to strain their weaknesses and reinforce their code sense. Apprentices pair-program with craftsmen on projects, and receive impromptu lessons from craftsmen who have free time and helpful insight into a particular problem.
During our 8th Light University events, apprentices watch craftsmen and other professionals share lessons that they’ve acquired along their path to mastery. Craftsmen are expected to share their craft, and apprentices get to benefit from both the direct lessons being taught as well as the ancillary benefits of watching another professional present and perform his or her craft.
Our craftsmen perform daily standup meetings to coordinate with their project team members, and our apprentices do the same with their fellow apprentices. By checking in each day, apprentices can see what others are working on, and connect with other apprentices who are confronting the same difficult problems. They can help each other navigate the plateaus and climb the peaks along their ongoing path toward the perfect code sense.
Proximity is a key factor in an apprentice’s development. If apprentices are not working closely together, they cannot benefit from the advantages that a proper learning environment provides. They need to interact with each other regularly, and to help push each other toward a heightened code sense in short feedback loops.
Individually, we all have an imperfect code sense, just like musicians struggle with imperfect tonality. The limitations of our perspective and the perspectives of our coworkers risk having an echo chamber effect. If I hear something that sounds like an A chord and the person next to me agrees that it’s an A chord, it could still have a different frequency.
Across every craft, perfection is defined externally. It isn’t up to us to define; it’s up to us to discover. By putting a team of apprentices together and embedding them within a culture of professionalism and craftsmanship, our apprenticeship program helps facilitate that discovery process for every apprentice. They are able to observe and absorb craftsmanship, and then use their observations to inform their programming skills and muscle memories. Software craftsmanship is not a lesson that they learn, but a sense that they acquire that helps guide them through their education.