There are many paths to learning to code. Many of us are enamored of the self-taught coding whiz. However, this overlooks a critical dimension of what it means to become a programmer. First, let’s talk about what it takes to become a doctor. (Hang in there, I’ll get to my point — eventually.)
One doesn’t become a medical doctor by mastering a lot of facts. It takes years of apprenticeship. A new doctor moves up the ranks until becoming a master of their profession. Along with increasing technical mastery, the doctor in training is also being brought into what has become known as a “community of practice.” It’s in this community that he/she learns how to be a doctor in every sense of the word. How to talk like a doctor (say stuff like “infarction” with a straight face); walk into a room like a doctor (eyes on the charts— don’t look at the patient); dress like a doctor (shoes are for comfort); celebrate like a doctor (your guess is as good as mine), etc. Though this might seem peripheral to the practice of medicine it is a critical component of becoming a master healer.
Thirty years ago, Jean Lave and Etienne Wenger published a landmark study in which they gave a name to this idea: legitimate peripheral participation (LPP). They distinguished between two types of learning:
1. Apprenticeship — learners are participants in a community of practitioners.
2. Schooling — learners are not part of a community of practice.
In an apprenticeship, all learning is situated. Meaning, all learning is situated in a complex web of relationships. The gaining of mastery goes hand-in-hand with the learner’s growing membership in that community of practice. How the newcomer is brought into that community has meaning. How they establish their place in that community, interact with that community, transform that community and ultimately replace the old guard are all critical components of learning. This negotiation happens at the periphery of practice. It is not the main focus, but it is a legitimate part of the learning process.
On the other hand, there is schooling. Here the learner is removed from the community of practice. Testing, which places a value on learning that is extrinsic to its true value, takes center stage. The learner never feels like they are part of a community of practitioners. For this reason, many graduates of computer science programs do not feel “ready” for the real world of software engineering.
There are two takeaways. One for the industry and one for the aspiring software engineer.
For the industry: the welcoming of newcomers to the community of practice is critical to the profession as a whole. With the explosion of online resources for people to teach themselves to code this consideration is critical. More thought should be put into creating apprenticeship opportunities beyond the college intern.
For the aspiring coder: the schooled and/or self-taught programmer will be at a tremendous disadvantage. Find ways of connecting to the community of practice. Find a mentor, contribute to open-source projects, go to meetups, write articles for Medium — whatever you can do to connect yourself to the community. Even participation at the periphery is still legitimate and will contribute to your growth as a professional.
Ultimately, the greatest growth for both the individual and the industry comes when learners have direct access to the experts and are, from the beginning, part of a community of practice.
Lave, Jean and Wenger, Etienne. (1991) Situated Learning: Legitimate Peripheral Participation.
Matusov, Eugene & Bell, Nancy & Rogoff, Barbara. (1994). Review of Situated Learning: Legitimate Peripheral Participation. American Ethnologist