Tuesday, April 8, 2014

Training a New Developer

Recently my company participated in a program called LaunchCode.  The purpose of this program is to pair programmers with job openings in an internship where pair programming is used to "train" the programmer.  This program was a great fit for my company because we already do pair programming!

The programmer that was assigned to us is energetic and has a tremendous ability to learn new things.  He had some experience with programming, but no formal training.  The lack of formal training didn't worry me at first because we have a very collaborative environment and we've been successful training recent college graduates.

My team rotates pairs about every two weeks (promiscuous pairing).  At the end of our retrospectives, we talk about the work in front of us for the next two weeks, discuss what member of a pair needs to stay with what project, and decide on pairs for the upcoming two weeks.  This practice gives everyone a chance to see different parts of our system and work with different people.

We also practice TDD (Test Driven Development).  TDD is a design tool that uses unit tests to drive system design and development.  Our practice of TDD relies heavily on being able to mock objects in the system that are not directly under test.  The practice of using mock objects (and a mocking framework) requires a solid understanding of object oriented design principles.

I immediately assigned my intern to one of my senior developers that is excellent at mentoring.  Unfortunately, our workload at the time involved less TDD work and more troubleshooting and analysis.  The intern learned a lot about the business, but had a hard time understanding our code base.  I tried to guide the pair swapping to have the intern working on more code-centric projects, but without a base in object oriented design, he had a difficult time making a positive contribution.

This is the point where I realized I had to get the intern grounded in some basic software development principles and object oriented design.  I created a contrived programming project that I could guide my intern through to make sure he learned the essentials that he needed to make a positive contribution to our code base.  I came up with the calculator project for this purpose.

The project write-up tries to explain the overall project, each step, and the desired outcome of each step.  This project was very useful in getting my intern grounded in some of our basic practices, and allowed him to be more productive in our code base.  Hopefully others find it useful too.

No comments:

Post a Comment