I spent a good chunk of my Sunday pair programming with a friend. It was sort of a TDD bootcamp, and I wondered what, if anything, he was getting out of it.
My guess is that he’d been mentored in the past by smart, patient people, and felt compelled to help another person along the path. Or maybe it’s just because he’s a cool guy. Either way, I’m grateful, and I can’t wait to someday be in a similar position to pay this forward.
Programming, especially in languages like Ruby and Python, is a heavily mentorship-driven activity. There are no colleges that I know of that place a focus on learning these languages. Few develop these skills in a total vacuum. (And you don’t typically want to work with those who did.)
Here are a few things I’ve learned about mentorship, especially of late:
Advice for Mentors
If you’re even marginally interested in acting as a part-time mentor, these are some fantastic behavior patterns to follow. I observed many of these while working with several people whom I see as top-class mentors:
Be patient, they learn slower than you do and will often be flat-out wrong
Ask questions you already know the answer to and let them come to a realization
Give them space to screw up. That means their hands are on the keyboard, at the whiteboard, etc.
Ask if you can be candid. Sugar-coating your feedback is a great way to make sure they don’t make progress.
Advice for Mentees
Ya’ll better recognize that you need a mentor. It’s easy to get stuck in a rut when surrounded by books and your own problem-solving skills. A few hours with someone at a higher experience level can change your entire perspective on some key concepts. Do this often enough, and you’ll grow by leaps and bounds.
You’ll probably have to build a “patchwork mentor”. You’ll likely have to stitch together a semi-cohesive mentorship out of hundreds or thousands of little interactions over the course of time.
Some people are better at mentoring than others. You will probably work with some people who simply don’t have the patience to teach you. Don’t get frustrated, they have a job to do, and you may be better off seeking help from people with a deeper well of patience, at least for now.
Some people are better at being mentored than others. Being mentored is a skill that requires just as much patience as mentoring. You have to work at developing your own patience.
Don’t take it personally. Being wrong is fine. You’re going to get honest feedback, which you need desperately right now. Your mentor may even get frustrated with you. Don’t use that as an excuse to quit.
You’re going to get directly conflicting advice. Just pick the advice that feels right and go with it for now.
Take the wheel. Don’t be afraid: you’re in a bumper car, not a Ferrari. Butt in and ask if you can drive.
Get some alone time. Go ahead and make a mess on your own, then set up code reviews to point out how you could have done better.
Be grateful. Humility is the only weapon you have to keep your mentors around and to actually learn from them.
Building your own mentorship:
Here are some ways you can build your “patchwork mentorship”. I can vouch for all of these, as they’ve all benefitted me:
User groups: I cannot overstate how much these have helped me. They dot the land. Attend one.
Mendicant University: Free online courses for intermediate Rubyists. It’s close to my heart.
Screencasts: I recommend Railscasts (free) and PeepCode ($)
Remote pairing: Evan Light just created a site for this.
Stack overflow: I mostly just lurk, but there are a TON of smart people waiting to help here.
Rails core code: Don’t be afraid of it. Dig in and see some well-crafted code.
Test suites: This is my preferred method of seeing how you’re expected to work with a codebase.
Code reviews: Go make a mess. Then let an experienced dev help you clean it up. This is powerful.
Open Source Software projects: A patient maintainer can make a great mentor. OpenHatch is a neat place to find one.
IRC: Hanging out in IRC chat is how a lot of experienced people stay in touch, and they can sometimes spare a minute to answer a question.
Blogs & Twitter: Reading good blogs or following smart people on Twitter is like having access to a factory that manufactures insight. I don’t have room to point out all the programmers who have influenced me through blogs & tweets, but they are numerous and I am grateful.
Books: Books are great. I’m a big fan of Pragmatic Programmers. Though, at this stage, I’ve often found it more productive to try and write code and then get feedback, versus the one-way communication a book provides.
Learning from a mentor is hard work. Piecing a mentorship together can be even harder, though it doesn’t need to be.
I hope this is somehow helpful to you if you’re looking for a signpost on the road to becoming a better developer.