In the past year I've started to shift into mentoring more, both at 8th Light and outside of 8th Light. Despite having been a craftsman for three years and having been an apprentice with a great mentor myself, I was woefully unprepared to teach others. Hopefully this blog can serve as advice to help novice mentors with their first apprentices. This article is an overview of the topic, and so presents a large array of ideas in general rather than focusing on any particular issue in depth.
My journey into mentoring started by teaching my friends who were interested in programming. I've also been a mentor at Code Academy for its first three semesters. Some of the knowledge in this blog can be applied to any sort of apprenticeship, while some of it may be specific to a "once a week" sort of mentor/student relationship as found in Code Academy.
The Role of a Mentor
My original image of what a mentor should be was very narrow. I thought that a mentor was there to teach the student everything they needed to know. I've since come to realize that an effective mentor/student relationship occurs when the student is responsible for their own learning, and the mentor acts as a guide along that path. The mentor is still there to help the student learn, but in addition to teaching and pairing with the student, other duties include suggesting books to read, introducing the student to people they should meet, and answering questions.
For example, in meeting with my Code Academy students, there's been a couple weeks where we weren't able to meet, due to one of us being sick or just other stuff coming up, but I was still able to answer questions through email and offer them advice. Looking back on it, I was still able to help them, just not through pairing.
Even thinking back to when I was an apprentice, I can recall a number of occasions where spending just five minutes talking to my mentor saved me hours of work.
Mentoring is Hard
Another mistake that I made was underestimating how hard it is to be a good mentor. I was definitely tricked into thinking it was easy with my first student, Cyrus. As a graduate student eventually pursing his Ph.D., he was the type of person who already knew how to learn and was eager to do so. Cyrus would have picked up programming with or without my help. Some of the other people I've had the pleasure to mentor have required a different level of guidance.
In fact, hands-on versus hands-off has been one of my biggest struggles with mentoring. Since I am a self-admitted keyboard hog, I tend to overcorrect to the side of not enough involvement. On one hand, too much involvement means that they don't get a chance to try out things for themselves. On the other hand, too little involvement means that they might spend more time than they should have struggling through their problems and aren't benefiting from your experience. Finding an appropriate balance has been a challenge, but what has helped me is more communication between myself and the student.
One Size Doesn't Fit All
That said, if you find a good balance or technique with one student, that doesn't necessarily work for every person you teach. Some students may need more assistance or different styles of teaching than others.
The most obvious difference would be students starting with two different skill levels. However, even with two students of similar skill level, they may have completely different goals or ways of thinking. A great example of this is the overall apprenticeship program at 8th Light. We've had apprenticeships lasting from as short as two months to as long as seven or eight months.
Find a Good Student
Given that a student is responsible for his own learning, finding a good student is by far the most important part in being an effective mentor. A good student has two main qualities: a passion for learning, and an ability to learn. Like my friend Cyrus, if a person has a passion for learning, they won't need too much from you.
Some prior experience with programming may be a plus, but depending on the situation, it isn't necessarily a requirement for a good student.
Get to Know the Student
After you've found a good student, the first step is to just talk to the student. Ask them about their background. Ask what they already know. Ask what they hope to learn. Even something as simple as how they prefer to learn can be useful. Most importantly, ask what they expect from you.
After that, find a way to figure out where their skill level is at beyond just talking to them. Hint: The answer is probably just pairing.
I made this mistake when I first started mentoring one of my students. We misgauged his starting skill level and had a month where it felt like we made little progress. Once we talked it over, we decided to go back to square one and had a much more successful time continuing. If we had just spent a bit more time at the beginning, I'm sure the first month of the mentoring would have far more effective. This mistake was not due to either the student or myself alone, but was more indicative of a lack of communication between us.
Once you have gotten to know your student, the next step is to figure out what to do during your meetings. For my Code Academy students, I've only been meeting once a week for about an hour, so before we meet, I make sure to spend some time thinking about what we could discuss.
The best case scenario is when the student comes to you with something to work on. Also, this doesn't mean you can't just pair on random code for the meeting, but you don't want to spend half your time trying to figure out what to work on.
Continuing the previous thought, if you are going to present yourself as an authority on a subject, you should spend some time brushing up and reviewing it. A little preparation goes a long way.
Examples of some things I might do to prepare range from reviewing one of the SOLID principles complete with examples all the way to making sure my system is set up with whatever code we want to pair on. If you are unprepared for the meeting, it's a waste of both your time and theirs.
Going along with preparation, consistency is also key. Try to schedule a regular meeting with your student. I know that one of the big hurdles I faced with my first Code Academy student was finding a time to meet each week. I was able to be a much better resource for my second Code Academy student as compared to my first. Part of that was due to having more practice at teaching, but part of it was meeting more consistently and for longer periods.
Learn About Learning
One thing I've done recently is start to read about different learning models. Putting names and stages to a person's level of knowledge can be useful for knowing when to elaborate on a subject or move on and let them internalize it on their own. I've only just started doing this, but have seen a couple small places where it's improved my teaching.
Also, use a variety of different teaching methods. Draw pictures on a whiteboard, ask leading questions, give them coding assignments or even give them reading assignments. Different people prefer different ways of learning, so this helps find the methods that work for them.
Most importantly, you need to have fun. Hopefully both you and your student look forward to your meetings. One thing that I've seen work as both a fun and useful exercise is to have your student take ownership of a slightly larger application that takes multiple iterations to complete. Not only is building something to completion fun, but this gives you something easy to choose to work on and forces the student to deal with code he wrote.
The exact application would depend on the student in question and the technologies he focused on learning, but many of 8th Light's internal applications have been started as apprentice projects.
Hopefully this helps you to not make some of the same mistakes as I have when you start to teach others. That said, I'm still a novice when it comes to teaching, so I still have a lot to learn myself.
Like with coding, look to people who are good at mentoring for examples on how to effectively teach. Mentoring is an art, and there are a lot of people who are already very skilled at it. Also, if you have a different style of teaching that works for you, then go ahead and use it. Even at 8th Light we have a wide array of mentors with a variety of teaching styles, all of which have contributed to the knowledge of past and present apprentices.