We have a small team in our department and typically employ 1-3 students/interns. The problem we have is retention. We like to hire a student that will stick around as part of the team for more than just a summer quarter. The problem is though the last 4 students we hired, up front we discussed this with them and they all ended up leaving earlier than we would have liked.
The relationships all ended in a good fashion, the students either obtained teaching assistant or research positions within the university, or went on to bigger and better things. This is all understandable and we do not hold it against them for doing what is best for them.
But my perspective is different as I worked within our department for 2 years during undergraduate at which point I was brought on full time upon graduation.
How can we retain students? We give them hardware they need/want, we provide them with problems to solve in anyway they see fit (within reason). All in all to me this type of job for a student programmer is so flexible and awesome I cannot see how anyone would want to leave.
I worked as a student programmer as an intern at two different jobs while in school. I am now graduated and work with another company full time. (a third).
The main reason I didn't stick with those companies while as a student was because I didn't see an opportunity to move forward/up in the company. Also, they use one technology and didn't show any signs of expanding out.
As a student about to graduate you feel that you shouldn't make a commitment that easily because you don't want thousands of dollars and 4 years of school to go to one job where you will sit and get stale (even though that's the case a lot of times.) Security isn't in the minds of those kids yet, but it's not their fault.
Show them the company can grow, and they can grow with it in their careers, and show them you guys are open to new technologies and learning.
Maybe you don't have enough great developers to inspire/motivate them to stay
I've had 2 internships at 2 different companies. I just finished the 2nd one a week ago and I realized that I prefer the 1st over the 2nd. The reason is because even though I'm practically doing the same thing at the 2nd company (Web development), most of the developers there are almost as young as I am. Which leads me to think that they don't have enough experience as programmers yet. The best way I can think of for my career to grow and to learn more as a developer is to surround myself with the best programmers that's in my reach. They have those kind of developers over the 1st company that I've been in. That's why I prefer the 1st one over the 2nd one.
Maybe that's one of the reasons why they don't stick around at your company.
I interned at a smallish company in school and ended up staying for two years. One of the things that kept me there, I think, was when I started they had a small (about a month long) project for me to work through that let me learn about the company and let my manager learn my strengths. I was then able to take on a couple of more substantial project that were more rewarding and interesting to me, and more helpful to the company.
Overall, I think the most important thing with interns is to have one off projects lined up that would be helpful. If you don't really feel like you made a difference with your time, there are plenty of better ways to spend it.
You'll always get some amount of turnover with interns however. There's a pretty big incentive to see what different companies are like so you can have an idea of what to look for when you graduate.
I'm currently working at a web development company part time while going to university.
Although I enjoy that it keeps me afloat while paying for school I don't think I would stick around for long after graduating. The main reason is that with a CIS Degree under my belt I would suddenly be worth a fair bit more than just a 'student'. So changing jobs is a good way to get a signifigant pay raise, likely more than what I would get if I just ask for a raise. Plus I kind of tired of maintaining code from other past students who sometimes do wierd things.
I want try new things and see what interesting things I can do. Doing the same thing after university that you were doing before kind of defies the point of university, which is to change who you are.
I would say go easy with technical questions in the interview. I interviewed at a company straight out of university, with zero commercial experience. I didn't handle the technical interview well, but they gave me the role anyway. A year later I was a technical lead at the company.
Spotting motivation to learn, and passion for the industry will be keen.
You have to cover some basic programming concepts to make sure they stayed awake during classes - algorithms, data structures, etc. I'd also want to hear IN DETAIL about some of the programming assignments they have done. I always find it interesting when a potetial employee can not tell me much about the programming assignment that was a major part of their grade.
Next would be trying to figure out if they had reasoning skills. Can they break a problem down into manageable pieces? I really don't care if they get a logic question correct as long as they can tell me the approach they would use (and of course the approach seems appropriate.)
We retain about 50% of our interns. What we do is keep giving them more challanging and interesting work pushing them to their limits. For half it's too much and they leave (generally on good terms). For the other half, they love it because this is why they got into programming, to create really cool code.
You need to aim the job for the type of interns you want to hang on to.
Why are they taking university positions over yours? They leave on good terms, so just ask them during the exit interview? Are they looking for careers in academe? Do they get 'brownie points' for working with a professor? Is spending time in these positions required to keep scholarship money?
Often on a big campus having a job there is a big benefit to having to commute to a job. Students also need flexible time. Let them work remotely some times. Give them a great laptop to use for the time they are employed.
Make them explain why they want to work for your company in the first place and maybe you'll find out what will make them stay. The short internship may be the minimum entry on their resume they need to go work somewhere else or complete their degree.
Technical questions in an interview are necessary, but try not to ask about things that the person could answer if they looked up in the documentation in under a minute. Even things that you think would be necessary (How do you take all commas out of a string) to be half decent. That kind of stuff they can figure out as they go if they are smart problem solvers. Look to see how they answer subjective technical questions rather than objective. Quite literally, you could ask some questions off of this site. Try to avoid Stackoverflow questions. It does not matter. If they can understand the higher level in a nuanced way and sound smart but humble while doing it, They will be able to tackle that language/technology stuff better in a couple months than their peers who have a lot more experience with it.
What kind of tools are you using? IMO I wouldn't care if I was writing code on the bleeding edge, if I had to write it using notepad I wouldn't hang around long. I wouldn't give up my IDE for a 10k salary increase, all the cake you could throw at me, or working on coding for the LHC.
Make it known that interns get dibs on a full time position.
Make full time employment seem significantly better than internship.
Don't make an internship feel like an internship, treat them like they are a real employee
offer competitive pay, at least high enough that its not a significant cut in potential earnings compared to other jobs even one not related to degrees your interns are pursuing.
if you can't offer pay (or even if you can) offer minor benefits/perks, looks like you can't do this but maybe you can get creative and make it not be considered a benefit. A company that I applied for an internship offered interns one paid vacation day and access to company gym.
if you have multiple intern roles help them find a good fit if what they were hired for isn't a good fit.
Think about retention before the person even walks in the door for the first day of their internship. I've seen people try this in the last 2 weeks of an internship, when those overtures should have been made at the beginning.
Also, keep in touch with the former interns you liked. Coming out of college it is natural to try and get varied experiences, it is even arguable that one should work someplace else. However, when the second job comes around and they've scratched their itch, you'll be in a good position to hire them for their second job. Don't do anything crazy, just maybe a call once or twice a year, or maybe do lunch if you're both in the same area.