Whether a beginner starts out with a training course or is self-taught, the first step on the path to software craftsmanship is finding a craftsman to apprentice himself to.
You’re walking along a path with no idea of what’s around the next corner or how to prepare for it. You need help and guidance.
Seek out those who have gone ahead of you and strive to learn from them.
Ideally, you will find a master craftsman who will accept you as an apprentice. You will remain under her supervision throughout your apprenticeship, establishing your future on the foundation of your master’s reputation. However, this ideal is exceptionally rare in today’s world.
Our field is very young and therefore has few recognized masters. Furthermore, as an apprentice it can be difficult to tell who is truly a master craftsman. Therefore, it is more likely that your apprenticeship will be supervised by a series of mentors who possess varying degrees of mastery.
Real-world apprentices have to scratch and claw their way into the lives of master craftsmen and are grateful for whatever attention they can get, particularly face-to-face or, better yet, side-by-side. Having said that, you may find that the most influential and helpful mentors for you are not physically available. They may live in a different country; they may even be long dead, as in the case of someone like Edgar Dijkstra. But that doesn’t mean that they can’t still act as beacons, lighting the way forward.
When trying to Find Mentors, an apprentice must remember that we’re all walking The Long Road and no one knows everything. It can be tempting to feel that your mentor must be a master because she knows so much more than you do. That temptation must be resisted, because you do not want to become so disillusioned with your mentor’s inevitable weaknesses or blind spots that you feel you can no longer learn from someone who still has much to offer.
While simple in concept and exceptionally important for your apprenticeship, finding people to guide you can be difficult. Sure, it’s easy to locate authors, conference speakers, committers on popular open source projects, and developers of successful websites. But the difficulty is twofold. First, these people may not be interested in mentoring; and second, reaching out to ask for something as strange as “apprenticeship” can be incredibly intimidating. This is similar to the risks associated with diving into The Deep End. Just keep in mind that the risk of being rejected or thought strange by a potential mentor is low, while the potential payoff is huge. Even if the person is not interested in taking you on as a full-time apprentice, offering to take her out to lunch would be time and money well spent. If you are serious about achieving mastery, be tenacious about finding mentors to guide you. You would be hard-pressed to find any top-notch developers who cannot recall the powerful impact that their mentors had on them.
Your apprenticeship is unlikely to happen in isolation, and just as there will be people ahead of you, there will also be apprentices who have not yet reached your skill level. The other side of your search for mentors is that you must be willing to provide mentoring to those who seek it from you. Passing along what you have learned from your mentors is one of the ways in which you can begin the transition to journeyman status.
Pick a tool, library, or community that has an active mailing list. Sign up to the list, but don’t post any messages yet. Just lurk. Over time you will start to understand the values of the community and learn which of the subscribers are patient teachers. When you have this understanding, seek out the members of this list at the next conference and see if they would be interested in providing you with some informal advice about the lessons they have learned.