Going into university as a computer science major you hear a lot about the crazy potential for jobs, compensation, perks and all the rest of it that surrounds tech, especially in Silcon Valley. Looking back, the idea of a pool table and free snacks really appealed to me when I was all about playing video games and starving as a student. Once you’re actually out working, and you can afford lunches and traveling and buying a house and saving for retirement and all sorts of other things, those little perks start to mean less and less and you start to look deeper at what the company, project, or team your working with is all about.

Put another way, if all you care about is getting a job at Facebook and you successfully land an internship there, and then get a job there out of school, great! It’s a fantastic company. But maybe after 2 years you get bored, you want a new challenge, you want to move to a different part of the world, you want to explore technologies that Facebook doesn’t build. You want to buy a house and settle down, hard to do in the valley. It happens. Where are you going to go? Having a variety of experiences exposes you to more ways of working, ways of developing software, offering you more insight and flexibility into where you land in your second or third job out of school.

So if we’re taking a longer term look at things, not just getting your first job (which is an all important step) but setting up your entire career, I thought it might be nice to collect some thoughts and pieces of advice I’ve given out to my various co-op students over the years.

First, try as many different size and types of companies as you can. Life at a start up is very different from life at a mega-corp, is very different from open source. You learn a larger variety of things at a 10 person company, but you’ll learn more business, political and communication skills at a bigger company. Start ups tend to be more flexible, often without documentation or processes. Larger companies more formal. Whether that’s good or bad depends on your personality. Open source presents it’s own benefits around community, licensing, and visibility, while closed source often means your github profile goes dark for a few years. Again, neither good nor bad, just different.

Intern as much as you can. Some schools (I’ve worked a lot with Waterloo students) offer up to 8 internships. Take everything you can get. The experience of actually building something and learning under a mentor is far more useful than any one semester in school could ever possibly hope to teach you. Don’t get me wrong, the foundation and skills you learn in class are important, but there is no substitute for actual experience.

I’ve worked with a lot of students who had dreams of working at Google or Facebook only to be disheartened by the competitive process. If that is where you want to be, take larger and larger leaps with each internship, eventually you’ll get their attention.

Other points: Volunteer, build a portfolio, contribute to projects on github, work for free, contract, e-lance. There are so many opportunities these days to build your skills and have a resume that impresses hiring managers. Take advantage of this while you have the mobility of a student.

Interview as often as you can. It’s a skill just like anything else, it can be learned, but it takes practice. Learn what the commonly asked questions are and how to frame your answers. Practice coding exercises, whiteboarding, etc. Above all else, communication is a skill that can separate you from others - lets face it, us nerds are sometimes awkward.

And finally, resume writing. It’s hard for some people, but stick to the facts (dates, locations), highlight your accomplishments, and when in doubt brevity helps. Tease just enough to get someone to want to ask you more about something. When you’re new to the industry there is a tendency for students to cram every single project and piece of tech they’ve ever used. Don’t do that, just focus on the ones that are relevant to the position you are applying for, and maybe more importantly only list the skills that you actually want to get a job doing.