Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm in the process of revamping our company's software development internship program and the area I'm most passionate on is implementing an enjoyable and effective student/intern mentoring program. We have quite a demographic variance among our software development groups, however, the vast majority would be considered Generation-Xers.

Over the years I've seen our younger Millennial-Generation students/interns/employees struggle when working with older developers.

Software architecture, Agile principles, the importance of TDD, design patterns, all of these are important and I'm looking for insight on communicating these things to interns/students/younger professionals.

I would love to hear of any good tips regarding mentoring today's incoming Millennial-Generation software developers, especially students/interns. What's worked well for you, what hasn't? What observations have you made that taught you something about a younger software developer, how they think, what they value, etc. How can we make this an experience and industry that they're excited to be a part of?

Thank you very much for any and all comments.

share|improve this question
1  
@emddudley - I don't think a 40+ year old would be mentored the same as someone who is 22. –  JeffO Mar 1 '12 at 13:53
4  
Ah, the undying "My generation is better than your [younger] generation!" sentiment. –  Malfist Mar 1 '12 at 13:55
4  
Although to be perfectly fair, the "My generation is better than your [older] generation!" sentiment is equally undying (but not present in this question) –  Malfist Mar 1 '12 at 14:12
1  
What I mean is, KodeKreachor is an older developer looking for advice on how to mentor younger developers. It doesn't sound like there is anything specific to millennials that is he concerned about, so I'm wondering why he mentioned the generation at all. –  M. Dudley Mar 1 '12 at 14:26
2  
As it stands now, this question is not about anything unique to the field of software development. Mentoring applies across all professions. As such, this question is off-topic here on Programmers. You might be interested in the Area 51 proposal The Workplace, which aims to provide a home for questions about professional situations that span across careers or domains. –  Thomas Owens Mar 1 '12 at 17:48
show 6 more comments

closed as off topic by Ozz, rob, Thomas Owens Mar 1 '12 at 17:48

Questions on Programmers Stack Exchange are expected to relate to software development within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

5 Answers

up vote 8 down vote accepted

DO

  • Give them work in small chunks at first, then increase;
  • Let them be a real member of the team:
    • code reviews are great, blocking the SCM is not
    • they have to be part of team events (keep in mind their finances may be a bit weaker, so throw them a bone gracefully every once in a while)
    • they have an equal right to talk at meeting (and urge them to) or do technical presentations (having team members show their work develops a sense of pride in it and puts a focus on quality, and that's doubly true for interns or some will tend to work on their own and not share their roadblocks)
    • let them attend job interviews for other applicants (it's a good practice to be on both sides of the table, and it's a nice ego boost - as long as you keep them grounded)
    • let them even drive some team events (tech talk, a project retrospective, etc...)
  • Give them real work,
    • not only the crappy tasks,
    • but still some of the crappy tasks (everybody does some some);
  • Praise them for their successes;
  • Acknowledge their efforts in case of failure (but point out the mistakes);
  • Always remember that a kid, no matter how young, can know something better than you even if they've been at it for 5 years and you 35. Be as open for learning as they should be.
  • Give them a bonus at the end of the internship (it's a valuable lesson that if you do your job correctly but without expecting to be rewarded you might be at the end), but make it clear it's not systematic.
  • Read these great questions and threads (they are not exactly the same case, but provide great advice to not alienate people, which applies to your case as well):

Best way for interns to be happy (talking about the ones that are motivated, happy to be in this field, of course) is for them to do something they want to talk to their techie friends about, or even talk to their friends and relatives about if it has a real life impact.

Developing a sense of family is important as well. It's great when companies have team events with everybody, and that are closed to the public, for team bonding. It's WAY BETTER when they also have team events where you can feel free to bring relatives (and even friends or former colleagues). If their friends and family think your intern as a nice workplace, it's already a great step forward.

DO NOT

  • bum them out,
  • alienate them,
  • treat them like kids or point at their inexperience
    • a bit of poking is fine, but not everybody reacts gracefully so be sure to keep it down; if you offend someone it's hard to fix that!
    • it's fine to put someone on the spot to ask for more dedication

The point of an internship is for the intern to grow. They may not always decide to stay with you (and that shouldn't be your goal), but even if they don't they'll appreciate the experience with you.

share|improve this answer
add comment

In my experience (and this is a gross generalization with tons of exceptions), older developers tend to believe in a seniority-based chain of command. "I've been here for 10-years longer than you so you'll do what I say." Younger developers tend to be more egalitarian. They acknowledge that each person has a unique set of strengths and weaknesses, but for the most part everyone deserves the same amount of basic respect and to be treated with dignity. This lack regard for new recruits can be a big stumbling block for them. They know they don't know everything but that doesn't mean they're OK with being talked down to, minimized or treated like a liability instead of an asset.

This also creates further issues if the younger developer is a permanent employee instead of an intern. If there is a pecking order among the developers, the new guy might have to wait 5-10 years for someone above him to leave and a new developer to be hired, thus moving him up in the order. Younger developers don't like this, they feel that once they have proven themselves they should be accepted into the fold and treated as a colleague instead of a subordinate. If after a few years they don't feel they have been accepted, they are likely to look elsewhere for employment.

That being said, I'm not a fan of the the "mentoring" paradigm. It reinforces the chain-of-command problem I just mentioned. And at what point does the mentoring stop? I prefer (following a short probationary period, of course) to offer older, more experienced developers as a resource at their disposal (just like Stack Overflow, MSDN Forums, etc). This helps to eliminate the notion that the new employee is subservient to the older one. Younger developers like to learn by doing and by collaborating with older developers, not by being a yes-man and following orders.

UPDATE: I do believe this is in part a generational thing. My father's generation worked in an environment where you stayed with the same company for your entire career. If you worked hard and were lucky, someone above you would take notice and promote you. My generation doesn't see the workplace that way. So many of us graduate from college these days. We are all intelligent, highly-educated people trying to make our company successful. While the chain of command might still exist on paper in a filing cabinet somewhere, my generation has no use for it in everyday activities. Everyone has a different role but each role is equally important to the success of the company.

share|improve this answer
    
very thoughtful post, with lots of great food for thought. +1 –  Ozz Mar 1 '12 at 15:52
1  
Your second paragraph really gets at a system where everyone wins. Basing everything on seniority is suboptimal for quite a few reasons. –  joshin4colours Mar 1 '12 at 16:13
8  
"Younger developers tend to be more egalitarian." You nailed it. In my first job out of school, I was fixing code written by people in their 30s by my 2nd year. When I was told that "people don't get promoted above junior dev before their 4th year", I immediately started looking for a new job. Why should I bust my butt for you if the only thing you care about are years served? –  Jason Mar 1 '12 at 16:16
6  
"...older developers tend to believe in a seniority-based chain of command" I'm an older developer, and that's not my experience at all. My experience is "...older developers with mediocre skills tend to believe in a seniority-based chain of command". –  kevin cline Mar 1 '12 at 16:27
1  
@Kevin, excellent point. And like I said, this is a gross generalization. I worked for three companies in my twenties and have seen this in wildly varying degrees. I don't see it at all in my current job which is refreshing. Not sure if that's because I'm working with like-minded individuals or because I'm turning 30 soon and have lost my new-developer smell. –  Ray Saltrelli Mar 1 '12 at 16:34
show 1 more comment

If at all possible, give them real work to do. If they're really enthusiastic, nothing will kill that enthusiasm faster than being given some clean-up work or put on a toy project.

I've also observed that most of our junior developers seem most excited about working on the UI part of the project. Probably because they've always worked with a computer via a GUI, so that's naturally how they think about them.

And make sure they have decent machines; nobody likes struggling on a hand-me-down.

I also wouldn't immediately pair them up with an experienced developer; introduce them around and point out "This is Joe, he's the go-to guy for the database/web services/whatever". Then let them sit with the other interns. In our shop, they seem to prefer discussing things with their peers before (or instead of) going to the "guru" for an answer. On a related note, make sure the other developers know that they're going to become resources, and keep that in mind when scheduling. It's not uncommon for a developer to spend several hours a week explaining things to interns. However, once one of the interns knows something, they're very quick to share that with their peers, so repeated explanations are rarely necessary.

These are just some things I've noticed on the projects I've worked on; we've brought in several junior developers, and they've all become stellar performers within a year or two.

share|improve this answer
2  
+1 for "And make sure they have decent machines; nobody likes struggling on a hand-me-down" –  Ozz Mar 1 '12 at 15:50
add comment

I'm going to go back and think about coming out of college as an undergrad and compare it to graduate school. The relationship with professors changes. Undergrads are treated as sponges. The professor is in front of a usually larger class and gives dictation. This is not the relationship you want with your interns.

In graduate school, the classes are smaller and the nature of the relationship is more back and forth. You are expected to contribute to the discussion. A lot of this is done in formal writing and presentations. You have to consume the literature on your own and form your own opinions.

Force your interns to act more like graduate students. Point them in the right direction and expect them to return after their self-study with more information. Encourage them to question what they don't agree with/understand. Expect them to be professional in their verbal and written communication. Emails shouldn't be all lower-case and full of non-industry abbreviations (LOL) or emoticons. Obviously, there are informal situations where this is appropriate and part of beiing an adult is knowing the difference.

Give them work and show them how it fits into the bigger picture of the organization. I once gave an intern the task of doing an inventory on our hardware. It may seem mundane (By the way, he was not a programmer.), but we were a small company with a tight budget, so buying new components when we had them on the shelf was a waste of money. I just gave the broad goals of the "project" and let him run with it. He did a much better job than I ever would. I had no problem writing a recommendation for a person that I know can get things done. Let your interns get things done.

share|improve this answer
add comment

It's pretty easy to overgeneralize, and I don't think that's fair. Everyone coming into the workforce from school experiences a severe reality-check. It must happen for every generation, because school is just so... unlike real work.

It's easy to see irresponsible behavior in young people and put it down to a "generation thing". The only hard evidence I can see that separates the latest generation from earlier ones is that there's a recent tendency for kids to stay at home longer. Therefore you might be more likely for new hires with a 4 year degree to still be living at home rent free, not having had to face the harsh reality of paying your bills, rent, or food. That means no consequences of failing, which means they'll bring a different attitude to work.

If you have no fear of failure, you're likely to speak your mind more often. Honestly that's the type of attitude we'd be better off having from someone with 20 years of experience, but who unfortunately now has a mortgage, car payment, and a family to feed, has experienced two "down-sizings", and who absolutely must toe the line because they can't risk losing their job. A new hire just out of school, on the other hand, is severely lacking in experience and coming across like a know-it-all towards someone who knows a lot more but who actually knows more about what they don't know is a recipe for an abrasive relationship.

That said, our real goal as a mentor is to pass along that experience, and the normal way we do that is with stories. Tell them about the time you had to come in at 2 am to swap out hardware on the production server. Tell them about that year when the team got cut in half, and how it was decided who would stay. Tell them about coding decisions you made that ended up coming back to bite you. Tell them about why you write code the way you do now.

I don't think any of that changes depending on what generation you're talking to.

share|improve this answer
    
re: the tendency for young people to stay at home longer, my guess is it has to do with paying off student loans (some have 100K+ of debt to pay off!), as well as the huge increase in rent in a lot of urban areas. A lot of my peers are in this situation, and some also have additional responsibilities like taking care of sick family members, helping out with their parents' mortgage, or contributing part of their paycheque to their parents because they (the parents) made some poor financial decisions. I know people who fall in all these categories, and it's a difficult position to be in. –  ysim Apr 18 at 0:28
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.