A friend of a friend emailed me and asked for advice on how to get an internship. I realized this info might be helpful to other people too so I modified my response a bit and posted it here.

Work hard in school. The material you learn in class provides the foundation for what you’ll be learning in the workplace. However, don’t focus exclusively on school work. Believe it or not many companies really don’t care about GPA (as long as it’s above a 2.5 or so). They care about what kind of projects you’ve done, how quickly you can learn and how you problem solve.

In order to maximize your chances at getting an internship (especially at a big tech company – Amazon, Apple, Google, Microsoft, Facebook) make sure you’ve done some personal projects. School projects are nice but usually they’re not substantial enough to place you above your fellow applicants. If you do a project using some type of new technology it will demonstrate both your ability to learn quickly and to actually build something. Having a concrete personal project you can easily demonstrate to an employer is essential to a good interview. Make sure you have a good resume, you can find a great example here. Use that example as a template for yourself.

Web projects are easily demonstrable to employers and web development courses are optional at many schools which makes these types of projects good candidates. I’d suggest you develop something in Ruby on Rails, Python with Google App Engine, or .Net if you’re interested. These frameworks are widely used and deployments are (relatively) easy and usually free for basic level projects.

Internships at big companies require similar qualifications as small companies. The only difference is that your work needs to be more impressive for bigger companies. The increase in difficulty is because these companies simply have more applicants. Additionally, the problems the bigger companies face sometimes simply require more talent to get the job done.

Much like the prep work needed to get an interview the actual interview is fundamentally similar. The big tech companies have very standard interviews often requiring an entire day for the final round. Smaller companies will also ask you coding questions but their interview process will be less structured. They just don’t need as much structure when dealing with less applicants.

I suggest you read “Cracking the Coding Interview” by Gale McDowell. It will help you understand what interviewers are looking for during your interview. Additionally, Gale also has a lot of guidance for how to go about getting an interview as well as how to interview well once you get there.

Bigger companies typically start recruiting for internships in the early fall and are generally finished by late February. Smaller companies usually start their recruiting in January or so and are finished by March or April.

During my internship with Microsoft I noticed that almost everyone had previous internship experience often with smaller companies. Keep trying if you don’t get a position at a top company your first time around. Even many full time employees at the big companies took multiple years to achieve their ultimate goal of working were they do.

When you evaluate your offers pick the one where you feel you can learn the most, not necessarily the one that pays the most. My first internship was actually my lowest paying offer but I felt I could learn the most there, and I absolutely did. I wouldn’t have gotten my internship at Microsoft without that experience.

I’d be happy to offer you personal advice if you’re interested. Get in touch on twitter or via email and hopefully I can offer some guidance! Best of luck!