views:

971

answers:

18

We've got a software engineering intern coming in who's fairly competent and shows promise. There's one catch: we have him for 3 months full time and can't count on anything past that. He still has a year of school left, which is why we can't say for sure that we have him past 3 months.

We have a specific project we're putting him on. How can we maximize his productivity while still giving him a positive learning experience?

He wants to learn about development cycles and real-world software engineering. Anything that you think would be critical that you wish you had learned earlier?


Nearly six months later: He's preformed admirably and even I have learned a lot from him. Thank you all for the input. Now I want to provide feedback to YOU!

He has benefited most from sitting down and writing code. However, he has had a nasty history of bad software engineering practices which I'm trying to replace with good habits (properly finishing a method before moving on, not hacking code together, proper error channeling, etc).

He has also really gained a lot by feeling involved in design decisions, even if most of the time they're related to my own design plans.

+1  A: 

How can we maximize his productivity while still giving him a positive learning experience?

If he's awesome, hire him.

Juliet
+1  A: 

If he does good work, after 3 months hire him full time. Let him know about this upfront and if he wants to work for your company then that should be all the motivation he will need.

Lucas McCoy
problem with this, he's got 1 year left.
Firoso
@firoso: You could still offer it to him and see what he says. Maybe offer him a part-time job or give him task that aren't on a deadline like fixing bugs to work on while he's still in school.
Lucas McCoy
I worked part time as an intern. I only wanted to stay for 2 months, but the atmosphere and the challenging tasks I was given made me stay.When his internship is almost over, ask him if he'd like to stay part time. If he was satisfied with his work, I'm sure he'll at least give it a second thought.
alex
+1  A: 

Going along with what Juliet said. Make sure your intern has a positive experience so that they want to come back, and tell others about what a great company you are to work for. As far as giving him a good learning experience, try to get your intern involved in all aspects of the software lifecycle, from coding, through to testing, deployment, and maintenance. Make sure your intern learns about software development in the real world. Don't just stick the intern in an office and give them a project to do by themselves.

Kibbee
+1  A: 

As a former intern turned full-time employee for the same company the best advice I can give is to find something on the project you're putting him on that he's interested in. Also, if possible also have him paired (or at least under the guidance) of a senior engineer. And yes, offering him a full time position after 3 months is great motivation as well (it worked for me).

jls
I'm the senior engineer :-P
Firoso
A: 

I would sit him down with one of your developers to help him understand the project basics/structure and your goals for him. Give him some direction on what needs to be done then throw him into the fire. Assign him to a senior dev. for any questions he has. As an intern myself this has worked pretty well for me.

Jreeter
+15  A: 

Don't skimp on training, advice, counsel, pair programming unless your environment is firmly inimical to it (!), code reviews, design reviews, style reviews if you do them, etc -- in other words, anything that can directly teach him (a) how you do things in your specific shop, (b) anything about the codebase he's working on, (c) general tips on how experienced programmers tackle real-world problems -- especially in his first month. Yes, you will feel like he's costing you more in time/distraction to existing, experienced programmers, than his production is worth -- but if he's as bright as you hope, he'll more than make up for in in the rest of his internship!

Alex Martelli
He's myself 4 years ago, he's promising.
Firoso
So _invest_ in him -- especially but not exclusively in his first month. (I'm assuming you've picked a project where he can have tangible accomplishment in three months of really good work -- I've occasionally seen interns given tasks that would be close to impossible even for a real guru to finish in time, but you seem way too clueful to have made _that_ mistake!-).
Alex Martelli
@Alex, you assume too much ;-) he can make significant impact, it's enough to entice him to stay part time through his senior year I think. That's the idea, make him WANT to stay past 3 months.
Firoso
+1  A: 

Is it safe to assume this is a concluding part of a degree? We've hired 70% of the interns we have had in that capacity.

How do you make it effective? That really depends on your development "food chain". People without experience will not be able to do advanced work. They still have too many mistakes to make before being ready.

Start them with low level tasks that are very finite in nature, but useful. Say you are in web development... turning screens into HTML is a good start. Adding form handling is a good second. So on and so forth.

In windows development? Start with UI implementation (you do the design + review work).

All you can ask for is that the intern saves you more time than you spend with them. But it may not be much time.

We rarely consider an intern if we are not also considering hiring a position. 500 hours with someone is a really good indication of how they will perform in real-life circumstances.

Just food for thought.

gahooa
And all of it useful food, thank you very much.
Firoso
+1  A: 

Assign him a mentor - someone experienced who will help the intern in the 1st week to learn the source control/repository structure, build system, main conventions in development, how to use common tools, etc. Also, create a preliminary plan of what he is going to work on. For the weeks 2-4 schedule regular short meetings with mentor, to make sure there's no roadblocks, intern is gaining speed and knows what to do. After the 1st month, it really depends on intern's personal qualities. Most don't need a constant attention anymore, just ad hoc meetings. However, make sure to have some more specific "deliverables" plan by the middle of internship. At the very end of the internship term, have a separate group meeting where mentor and intern can share the results with the rest of the group.

Igor Krivokon
A: 

have him set up a project plan with milestones so you can see how rapidly he is making progress. If you have an idea of what he is supposed to do, you can also suggest some milestones (like 2-4 weeks of work) and some intermediate tasks to reach there, but probably best for him to try to come up with those first. If he can't then you can help.

It also will give him the big picture of how apparently trivial or unrelated tasks add up which should give a better feeling at the completion of the internship.

Case Larsen
A: 

I'd break the project into small chunks and let him implement a chunk of functionality all on his own.

After he's finished meeting a the requirements of a small chunk I'd take the time to review the code and then offer suggestions on how we could improve the underlying code while keeping the spec's functionality intact.

This way you can ensure that the project is moving along in a predictable way while providing him with a learning experience as you introduce refactoring opportunities and mentorship.

This also balances incessant hovering to ensure the he's not doing too much damage with his need to explore and learn on his own. This also provides him the freedom to beautifully muck something up and give him a nice a real world example of how to make his code better good practices and techniques.

jfar
+1  A: 

The goal of an internship is to learn, so make sure you can help him learn.

To do that, make sure he produces quality code and if he doesn't, have someone tell him how he can improve his code. From my experience, doing code reviews is the best way to control the code produced by an intern.

To remain productive, he must also have some interesting goals to meet. If you make him code in HTML only just because he's an intern, chances are that he won't be interested and won't learn anything. So start by giving him easy tasks, but make sure to give him more interesting tasks once he understands the basics of the system and has built some confidence.

Meta-Knight
+3  A: 

Two alternatives:

  • Maximize immediate utility -- use him for what he knows already (or, at least, use him for something that no-one else knows), e.g.:

    • When I was a maths undergrad and hired as a "summer student" by an OEM, they got me to develope some performance models (using queueing theory) of their product, which they needed, instead of trying to teach me a whole new field (i.e. programming) in thee months.

    • Not too long ago, an intern helped my dvelopment project by instaling and learning to use some 3rd-party test equipment that I needed to test my software against: I knew how to write my software, but I didn't know how to set up the test equipment, so his setting up the test equipment was the best use of my time.

  • Take the long-term view -- don't expect to make a profit on his time right now, but treat this as an opportunity to recruit him after he graduates (which implies doing whatever you ought to do now to make a good impression on him, so that he'll accept your offer to come back after he graduates).

ChrisW
spellcheck: develope -> develop; thee -> three
Tshepang
+1  A: 

If you want him productive for just the three months, give him the braindead-easy chores that no-one else wants to do. He won't want to work with you after that though.

If you want his internship to be the best possible experience for him, make sure it's the best learning experience for him. If he's good, you'll want to hire him later. Chances are, in the short term he'll be a net loss in terms of total team productivity - but in the long term there is a potential payoff.

Jeffrey Kemp
A: 

One word. go-fer (evil laugh).

You say: "One of the most important parts of becoming a skilled programmer is learning how to make coffee. Your training starts now."

If you think this is evil remember that both Yoda and Mr Miyagi did this to to their apprentices. It apparentely builds character or something.

SpliFF
clever albiet not very constructive.
Firoso
This is tangentially related to your comment: how come Luke was able to fly to Yoda's galaxy in his Xwing? Didn't those things have any kind of range limitations?
MusiGenesis
"For hyperspace transit, the X-wing is equipped with an Incom GBk-585 motivator HCU (hyperspace control unit)."
ChrisW
@firoso: Well IMHO it was a pretty non-constructive question too. Apart from being subjective the answer lies entirely in the unknown variables: 1.) What is the project 2.) What are the interns interests 3.) What are the interns skills. Without those all the other responses are rote, general and dull. A bit of humour is what this question needed.
SpliFF
Star Wars never really covered Sith apprenticeships. I wonder if Darth Maul and Anarkin had to fetch coffee and polish spaceships for the Emperor?
SpliFF
@Spliff: I was trying to figure out what "Polish spaceship" was a euphemism for until I realized you were using "polish" as a verb rather than an adjective.
MusiGenesis
@ChrisW: "centrifugal vapor fusion and ionization reactor"? They're not even trying to seem like they're making any sense with that one. Your quote is from the "Expanded Universe", so my point still stands. On the other hand, it's pretty thoughtful of them to emergency eject the droid, too.
MusiGenesis
big difference between intern and apprentice.
Paul Nathan
+1  A: 

hi there,

we do have the same thing with interns at our company, some of them are very talented and would want them as part of the team after internship is over. Usually we treat them as any newcomer in the team, assign him a tutor (for orientation :) who will keep him a couple of high level presentation about the product he will be working on and assign him tasks which will be under surveillance of the tutor. (we do keep a special document with all procedures on the project what we constantly augment as project get's bigger ..as a result learning curve is bigger) I believe this way he will feel part of the team.

Tiberiu Hajas
+1  A: 

I have had a couple internship experiences recently. One I've found is that when I'm given a project its usually a very useful/helpful project, but not critical that it be shipped immediately. That said, the other developers are often working on tasks that pertain to immediate bugs or issues with other parts of the applications. It can be easy to forget about the intern or allocate resources away to the most time-critical needs, but if you only have him for three months make sure he doesn't get bored during that time. If he's waiting on a license key, permissions for a server, a design document, schema, or whatever for his project, make getting him what he needs to solve his problems a priority.

Chet
Yes. And don't forget to tell him that it's his responsibility to call for help when he's stuck - some interns may be afraid to ask for help and will spin their wheels for weeks.
Jeffrey Kemp
Or he can just use StackOverflow to solve his problems.
Chet
+1  A: 

Instead of having him start a new project, have him improve other projects or current projects. It's a lot easier to envision something that is already there than it is to come up with a design without any tacit knowledge.

Joe Philllips
A: 

I think the best thing to do is not to throw your intern into the development process from the beginning. If they had never done production programming before, it may be tough for them especially when they have school load. You don't want to lay strict deadlines and a significant learning curve on top of that. The best thing to do is have them do support for half the time that they're going to be employed as interns. This way they can get an insight of what the production code looks like, what practices are being employed and how your back-end stuff works. By the time they get into development at your company, they're going to be more familiar with the technology used and how to use it to design clean and well-engineered solutions. This also will significantly lower the dependency on your senior engineer or whoever it is 'watching over' your interns because while supporting existing code your interns will have most of what they need in front of them to get started and dig around at their own pace. You can then throw them on some projects. Nothing big, just something interesting to get them hooked. Preferably a team project where they would be able to interact and make design decisions. Again, you don't want to put a lot of responsibility. School is the top priority at this point. If you don't make it obvious to your intern you're not going to make much of an impression. After all, it's a learning experience for them more than anything.

Sergey