Before I was a titled developer, I would spend my off hours working on small applications to help me and other departments in my office work more effectively. After year or so of self taught development and running through one C# tutorial, I knew what I was doing. I knew all about classes, objects, small scale application development and my google-fu was top notch. Clearly, I was a developer, a junior developer, but a developer none-the-less and was ready to join a team.
With this new-found confidence, I reached out to the development manager at my company, whom I had not met before, and asked him for a job. I still remember how the meeting went. He asked me about what experience I had and the current projects I was working on. I proudly proclaimed that I was quite proficient in VBA and C# and that I had recently completed a C# tutorial creating an RSS reader.
Scott, the dev manager, told me frankly that my skills were not where they needed to be in order to join his team. He spoke of how developers on his team needed to hit the ground running and that i just wasn't up to speed.
A few moments passed in silence as this blow to my ego sank in.
Then Scott said something that literally changed my life. "But... if you are serious about being a developer, then I'll help you."
Scott offered to send me small applications that were not mission criticial to any processes and mentor me. Most of these applications took the form of simple log parsers or data transforming applications. As I worked on each one, Scott would review my code and guide me. He would let me call him and ask him questions like "Seriously, I don't get the point of an abstract class." or "Why shouldn't I be learning threading?"
This continued for about 2 years. Our conversations became more and more advanced like "What are the benefits of SOA?" and "How does the Large Object Heap work?". Scott gave me books to read, too: Code Complete, The Art of Unit Testing, The GoF book and others. Suddenly, Scott offered me a job. He brought me on as a Jr. Developer working on green field project that was replacing a vendor.
From there, my growth continued. Scott would let me bug him in his office and we would discuss architectures, practices, and theory. I tried to learn things that I thought would impress him; things he thought were difficult (regular expressions and UI technologies). And every now and then, something magical would happen... I would teach him something.
I left that company and starting working for another one. Then, two years later, Scott and I started working together again. While I still look to him as a mentor, I recognize that he sees me more of a peer. We are both team leads on at my current client. He's never been too proud to let me teach him something and has never been smug to continue to fill in my knowledge gaps.
I realized that there was one skill that Scott had been teaching me since the first day we met that has nothing to do with programming. He's been teaching me to be a mentor.
I've learned to be kind as a mentor. I've made many mistakes as a developer and will continue to make them for the rest of my life. When I did, Scott never once made it personal. He always allowed me to feel the pressure warranted by the given mistake, but he never took cheap shots at me nor did he bring them up infront of others.
Scott has been more generous with his time than any other leader I've had. He has been generours with his knowledge and his experience. He gave freely to me when I asked and never made me feel like I was a burden.
Anytime I leanred something new that I thought was excited, Scott was generally the first person I showed. While he most always had already known about it, he never stopped me during my explanation to tell me I was wasting his time. Instead, he was accuately aware of hw excited I was about my new discovery and let me bask in it.
One of the most important things, I feel, he taught me was how to be receptive to those I'm mentoring. Scott would ask for my input and even allow me to teach him things. This might seem simple, but I know from experience that it is easy to continue to prove you know more than your apprentices when they try to teach you something. I've done it without realizing it before. Scott never tried to hold himself superior to me and it is something I'm always aware of as those I'm mentoring teach me new things I didn't know.
There are most definitely many more skills required to be a mentor, but these four are the ones I've been thinking about most recently.
The only thing Scott has ever asked in return for his tutelage was to simply do the same for someone else. I just hope I am as good to other as he is to me.