I will soon be taking on the role of mentoring a fairly new programmer. I have so far been the lone programmer at a quickly-growing small company. Are there any good resources I can check out that could help me transition into this role? Specifically, I am looking for resources on how I can be a good mentor, rather than resources for the new programmer.
The Pragmatic Programmer and Programming Pearls are good books for beginning-intermediate programmers because they go into technique. If you've got a new programmer, the 'good advice' aspects of these books may be a good influence brought in at the right time.
The only suggestions I can make on books to help with mentoring are to see if there are any resources on general teaching that might give you some inspiration. Many software engineering books, such as Code Complete (as suggested elsewhere) contain sections on code reviews. You may be able to pick up some inspiration from there as well.
If you can make it work you might get some mileage from pair programming. It's not for everyone but it can be used as a teaching aid.
I would use Martins "Clean Code" as a base. It's one of the best general purpose programming books out there. Even beeing an experienced programmer, it's often hard to tell somebody why you do something in a certain way. You just know what to do, but the "why" is hard to express. "Clean Code" will be very helpful in teaching this kind of knowledge - and I'm sure you will learn something new too! ;-)
I would recommend "The Pragmatic Programmer: From Journeyman to Master" by Andrew Hunt and David Thomas
Practices of Agile Developer by Venkat Subramaniam and Andy Hunt.
Also How to be a Programmer: A Short, Comprehensive, and Personal Summary
It may not seem directly to follow from the request about mentoring, but I genuinely believe that Code Complete could be a great asset for you. It helped me when I was mentoring junior developers, because it made explicit the things which I thought "good" or "bad" about particular development practices and thus it became easier to explain them to the junior developers.
In a similar vein it's good to have books about the particular technologies you'll be using together to hand, these can act both as a backup to justify what you're teaching to the junior as well as a shield to deflect low-ball questions - that sounds a bit callous but it's surprising how much time you might waste answering questions which are better dealt with in the literature.
Look for information on the Kolb learning cycle too; see if you can identify where on the cycle you start when you're learning and where the junior starts on the cycle. I found that I frequently had moments of cognitive dissonance with one particular junior because I taught starting with abstract ideas but he learned best from reflecting on real experience. Once I'd identified and adjusted to that our relationship became much smoother.
Joel On Software by Joel Spolsky. His blog also offers most of the book for free.
G'day,
I'd highly recommend the excellent book "Mentoring: The Tao of Giving and Receiving Wisdom" by Chungliang A. Huang (sanitised Amazon link).
I know most people have posted technical resources, many of which I agree with, but mentoring is definitely an art!
HTH and good luck!
BTW I love mentoring others!
An excellent book on helping nurture programmers is Pete McBreen's excellent book "Software Craftsmanship: The New Imperative" (sanitised Amazon link) which is concerned with the art of teaching programming.
cheers,
- Karl Seguin's free Foundations of Programming Ebook
- Also for .Net/Java development I really felt like I learned a lot from Jermey Miller's Build your own CAB series (Its not what it sounds like - it IS incomplete however)
- Oh and the least intimidating yet the most practical resource out there: Dimecasts
My personal preference is The Practice of Programming by Kernighan and Pike. It's like Code Complete only about 20% as long. Much more accessible that way.
What is the single most influential book every programmer should read?. I guess whether you are a beginner or senior level, this is a great list of books too read. Also, here is a list of non programming books.
Peopleware by DeMarco and Lister is a great book aimed at just the person you are about to become: the new team lead.
Check out this video, starting at about 18:30 (before that, it's some end of course administrative stuff). He's talking about the way he views teaching/learning. He's in a university professor role, but my impression is that he'd make a great mentor too:
Richard Buckland UNSW: Lecture 47: Learning and Teaching Computing
This isn't a book but one thing that will turn a mentoree off faster than anything is if you assume he or she knows nothing and that you know everything. Listen as well as coach. When they suggest something that is a good idea you had not thought of first, then go with it and tell them that it was a good idea. If the idea isn't so good, don't just say, "no we aren't going to do it that way", but explain why the other way is better or what factors they had not thought of. Or better yet ask them questions to get them to see for themselves why it might not be the best approach. Young people and new employees are often frustrated because they want to make a contribution and anything they suggest is shot down with no explanation. And somtimes they will have a good idea but one which isn't practical at the momement. Acknowledge that it is a good practice but tell them why it is not possible at the moment. Young developers also need to learn that politics plays a large role in decisions.