Kilncode

Mentoring Software Engineers

By: Matt Brown

22 Jan 2014

Nothing has advanced my skill and career more than being around programmers who are much better than I am at programming. There's something awe-inspiring when you first meet people who are better at coding than you. They are like wizards, commanding all of nature to bend to their will. In an hour, they sling out code it would take you weeks to get finished. Maybe you've gotten a chance to work with these masters of computation and hoped that some of their skills would rub off on you.

The first time I experienced this was when I started my new job at a game company. You hear stories about the game industry: it's hard work, lots of hours, competition can be tough, etc. All of that can be true, but one thing that caught me by surprise is how incredibly smart every single person who works in games is. And this was especially true for the lead engineer, Ryan.

When I met him, he was like a programming god. He knew everything about all of the application’s code: server, client, infrastructure code, you name it. He would write in 3 or 4 languages in the course of the day without breaking a sweat.

I wanted these powers for myself, so Ryan mentored me in what has most likely been the most productive 2 years of my life.

Since I started my career as a software engineer, I've intentionally sought out participation in both sides of the mentoring process. I've watched my father (who's also a software engineer) transform complete newbies into effective and highly respected engineers. From him and others I've learned that good software mentors stress writing more code, encourage finding your own answers, provide challenges, and most importantly are respectful of those less skilled than them.

Write code

I read this all the time (and I'm sure you do too), but it bears repeating: the best way to get better at programming is to write code. If someone you're mentoring is complaining about not getting better, ask her how much new code she’s written recently. There are plenty of resources available for developers to start writing new code regardless of their level of programming skill.

Code Jams: Code jams are a great way to learn about your coding ability. Usually happening over a weekend with some specific coding goal in mind, they are a whole development process crammed into a couple of days. The (Global Game Jam)[http://globalgamejam.org/] provides information on where you can meet up with other developers to participate.

Working on an open source project: There are countless open source projects that need bug fixes and features developed. Look through github with your mentee to find a project that he could support.

Emulating a simple project: Rewriting a simple application, such as a game, can provide a good focus for your mentee to practice coding as he won't’ have to worry about requirements.

Get them to RTFM

When I was a kid, I would often go up to my parents and ask them how to spell some word or what a word means, and they would almost always tell me the same thing: look it up. It's not that they didn't know the answer (although I'm sure they didn't always know the answer despite both of them having English degrees), they were trying to teach me something.

Trivial knowledge, such as API calls or language syntax, is the sort of thing that is very quick and easy to look up. Encourage the person you're mentoring to Google for answers to simple questions; for example, if she ask you what the syntax for scp is, tell her to check the man page.

Not only will the act of looking things up and reading documentation make your mentee a much better developer, it will seriously cut down on the number of trivial questions you get.

Provide challenges

As a mentor, one of your jobs should be to provide challenges to your mentee. In a mentoring relationship where the mentor is much more experienced than the mentee there's going to be an implicit challenge for the newbie to try to become better than the expert. Offering explicit challenges to your mentee will help push him beyond his notions of what they are able to accomplish and get them closer to becoming a master.

However, you can’t just give a challenge to someone and then ninja vanish. Make sure that the challenges you give are obtainable and be ready to assist. Try to have a good idea of how long a particular task will take and check in with your mentee if the task is taking longer than expected.

Ryan was particularly good at challenging people. Often he would give me tasks, and I’d have to google half of the words he used to even know what he was asking for. But knowing he completely believed in my ability to accomplish any challenge he gave me helped make it possible to complete the challenge.

And the sense of pride I felt on finishing that task made me hungry for more.

Be respectful

Arguably the most important skill you can learn as a mentor is how to show respect to your mentee. You may have more experience, but it does not make you smarter or more important than the person you are mentoring. Here are some very simple ways to show respect:

Put your screen away: The text/code/uncrushed candy is not more important than the conversation you are currently having. You may think you're good at multitasking, but if you're looking at a screen while talking to someone you are essentially communicating, "I don't think you're more important than whatever is going on here."

Keep your time commitments: If you make a meeting commitment with your mentee, do not cancel it (unless you have some legitimate emergency). When you cancel a meeting with someone, you are communicating, "you are less important than the meeting I am replacing our time for."

Be patient with questions: You are going to get a lot of questions, and sometimes the level or frequency of these questions can be frustrating. Remember that your mentee is asking you a lot of questions because she respects your skill and ability. Getting visibly annoyed or frustrated can make your mentee nervous about seeking your advice in the future.

Why mentoring

Mentoring someone does not just make that person a better engineer, it makes you better too.

By teaching someone else about your craft, you help to further reinforce your understanding. When you challenge someone to move beyond their skill, you think about how you can challenge yourself. Learning to be more respectful towards those with less skill or experience than you just makes you a better person.