Over the last few years we’ve had an experiment going - each year over our ‘quiet’ month we would take a handful of students from Varsity and give them ‘work’ experience. It’s been an interesting experience with some insights gained. While we haven’t gotten everything right, I wanted to share the learnings we have had so far with the greater community. If you have any suggestions or things that have worked for you - please share them in the comments section below.
At what level do you take students on
Firstly, when we started looking at taking students on, we asked around with other companies which student level would be the most appropriate - first years, 4 year honor students, master students? The feedback we got was that we shouldn’t consider anything below honors (4th year) students, and even at that level the skills would be very low. We decided to ignore this advice and take on first year students and I am glad we did. While the first year students had no knowledge of the programming language we were using (C#), and very little idea of what object orientation was - from what I can tell this would not have changed had they been 4th year students. What they did have was pure excitement for learning something new and youthful energy. The second year we had some of the students return (they were now second year students) and noticed a dramatic increase in skills. It turns out Varsity isn’t the most stimulating place - these first year students had 3 more years of boring varsity to go through - which meant they had plenty of downtime to sharpen their skills in the coming years. On chattng with the returning students it came up that during the year they had been doing Kata’s, reading the books we recommended etc. The take home that I got from this is if you are in this for the long haul, the earlier you are able to plant the right seeds, the better they get with time.
How to accelerate learning
We tried several different approaches to encourage learning - we’ve given them kata’s to do, ‘fake’ projects to complete, etc. My advice is that while these things are useful, nothing accelerates learning quicker that getting them to write code on your production system. That doesn’t mean we give them the keys to the castle - the team we work in predominantly pair programmers most of the time. My observaton was the sooner we got them to pair program with us on production code - the quicker their learning accelerated.
Whenever I propose this the concern is that pairing student programmers up with the existing team will slow us down. It’s true that there might be a slight slow down in productivity - that said, we are taking a slightly longer term picture on this. So, if to accelerate learning we want to pair the students up with the existing team, how do we make this as painless as possible?
Reduce the pain in pairing
On discussion with a number of dev’s who pair frequenty - a real frustration when pairing with someone is when your partner is a slow driver (typist). To counter this we make touch typing the first goal of the students. They need to get to a minimum speed - around 45 wpm. We currently use a typing master - it costs a few dollars, but focusses on hand position and typing speed.
Once the typing barrier is overcome we then want the students to be comfortable navigating the IDE effectively. Shortcut Foo is a wonderful tool for developing muscle memory for Resharper shortcuts.
We combine Shortcut Foo with the a timed challenge of the String Calculator Kata (25 minutes start to finish) to help students develop speed when navigating the IDE.
Present concepts to others
Our team also makes use of brown bags weekly. Getting students to present concepts at brown bag sessions turns out to be a great way to put timed pressure on learning. We have found pairing students up with team members is more effective than pairing students up with students when presenting brown bags.
Making it visible
Making the results of the students learnings visible also seems to accelerate learning. Putting up a chart of Key Improvement Indicators on the Team Board helps make it visible that the team values the improvements of the students. We include typing speeds, kata times, etc.