As much as I love spending time writing code, a big (and important) part of my day job is running a big team. Several kinds of questions come up during the various times of year. Right now we are interviewing summer intern candidates. I get asked by new leads how best to structure such efforts, so I thought I would blog my philosophy both to answer the FAQ and as a way to explain to prospective candidates what you can expect on the CLR team.
There was an episode of ER where 4 prospective interns were split between Dr. Green and Dr. Weaver. Dr. Weaver is a "by the book" rules oriented person who promptly took both interns to her office for an hour lecture on the virtues of being a Dr. She showed them where they would be working and what they might do. Dr. Green grabbed a clipboard and muttered "follow me" and proceeded to go from patient to patient and did the job. Each intern was asked to do hands on work with the patients. At the end of the day, guess which interns were totally stoked about joining the team?
If you come to work on the CLR team, roll up your sleeves. There are no observers.
My ideal intern projects meet the following criteria:
- Take a Chance: Some ideas may not pan out and don't fit well into product cycles. Giving these incubation style projects to an intern is a win/win: we get to see if the idea has merit, and the intern can try to break new ground.
- Bugs are for warm ups only: Fixing/finding bugs can be a good way to get exposure to a code base. But it should be done on a limited basis (1, 2 weeks tops) for an internship. I like to see how someone works under all phases of a project, not just the bug crunch.
- Do the Lifecycle: I like projects that have a spec/design phase, a coding phase, a testing phase, and ideally some kind of production usage. Again, stress the broad experience.
- Raise your bar: The project needs to foster getting good feedback from a variety of team members. Part of the cool thing about working on the CLR is you get to learn from people with decades of experience spanning multiple OS's, companies, etc. Ideally you will lead a CLR Architects meeting on your topic and defend your design. There is no better way to raise your bar than convincing Chris Brumme you've thought it through completely.
In the past we have had interns prototype obfuscators, create MDA plug-ins for VS.Net, write new automated test tools, analyze and publish performance projects, prototype new NGen enhancements, and implement features like the profiling API's. Many of our full time employees started out as repeat interns. At least two that I know started interning after their Freshman year.
We're looking for people who love to write code and think of themselves as developers (PM, Test, and Dev). There is a lot of competition for the open slots, so make sure to talk to your campus recruiter early and come prepared to kick butt!