I went to a career fair at Big Ivy University recently, and talked to fifty or so computer science undergrads who were looking for internships or full-time jobs with my employer, 10gen. I'm sure some of them were very smart, but they had not learned how to distinguish themselves from each other. One after another, these students came with identical resumes, identical suits, and identical pitches about why they should get a gig with us.
CS students, I want to tell you how to stand out when you're introducing yourself at a career fair. If you're an extraordinary hacker, you need to tell us that you are, and you need to show that you are on your resume. Otherwise we can't find you.
What You Learned In School Is Not Enough
The first student I met at BIU handed me her resume, and I saw that she knew Haskell, and she'd done a machine-learning project. I thought, "cool," and put the resume in the "call this candidate" pile. The third time I saw Haskell and machine learning, I realized that's just what they teach at Big Ivy.
If you're competing with students from other schools, then your coursework may be an advantage or a disadvantage. But if you're coming to a career fair, you're competing with kids who took the same courses as you. So I'm not impressed that you learned Haskell as a freshman—you'd have been kicked out of the program if you hadn't.
One possibility too terrifying to contemplate is that the students I met at BIU thought their GPA mattered. If so, they're in for a rude surprise. I know they all listed their GPAs on their resumes, but I forgot to look, and I think most employers will forget to look at GPA, as well.
It's a shame, but it's true: a firm handshake, eye contact, and a calm, friendly, enthusiastic manner make a big difference, even for nerds. I will spend more time with you, even though there are five kids in line behind you, and I will answer your questions better and ask you more questions. It's not just that I'm biased towards charismatic people. Your social skills are part of what my company wants to hire. In the long run, if you work for us, you'll be making friends with your coworkers, talking to customers, and presenting our products at conferences. We need you to be engaging.
Individual Projects, Unusual Languages, Unusual Courses
Look, if you're graduating with a CS major, you will get a job. Relax. The market's great. But if you actually care about software and want to work somewhere that excites you, you'll need to put some effort into your resume and how you introduce yourself. Here's what I want to see:
Individual Projects: 100 bonus points each
If you had an idea for a software project and you implemented it, then you should put that at the top of your resume. Above your name. And tell me about that project as soon as you shake my hand at the career fair. The project doesn't have to be totally unique, or profitable, or complete—just make something. Then I'll know you have cool ideas for things to build, and that you love coding, which is highly correlated with being great at coding. You're in the "call back" pile.
If you haven't built an individual project, start. Let your 4.0 GPA slip a little. It's worth it to make time for this project. Don't worry about getting college credit for the time you spend, just build it. Put the GitHub URL on your resume so I can check it out.
Extra Languages: 25 bonus points each
If the only programming languages on your resume are the required ones, then you're showing me you do your homework. It's not enough. Learn an extra language. It doesn't have to be anything exotic like Erlang, just something all your peers didn't learn in class. Put this at the top of your resume, under the individual project. Tell me about how you taught yourself C++ over summer break because you want to do 3D graphics for a living. It doesn't matter if I'm not looking for a C++ programmer, you're showing me you love learning about computers. But be aware that I may know this language, too, so if you claim you're an "expert," you better be for real.
Unusual Courses: 10 bonus points each
I know Big Ivy offers a computer graphics class, but it seems like only one student took it. All the rest just listed the same boring courses on their resumes: Operating Systems, Networking, blah blah blah. I know you took those courses; otherwise you wouldn't be graduating. If you want me to notice you, take lots of electives. Again, your GPA doesn't matter, so don't worry about getting a little overloaded.
Contributing to Open Source
I don't recommend that undergrads go on GitHub seeking an open source project to contribute to. It'll be different once you've been working for a few years, but right now you probably don't have any itches that aren't well-scratched by an existing project. Even if you do, I doubt you're ready to write a patch that's high-quality enough to be accepted. It's much easier to start a new project on your own. For one thing, when you work on your own project, no one has to approve your patch.
Possible exceptions to this rule: Porting a package to Python 3 if no one else has started it; porting a package from a popular language to an exotic one if there's no analogous library in the target language.
Your internships for other software companies are great, but I don't recommend freelance work. It would probably be along the lines of setting up a WordPress site for your friend's mother's law firm. The level of sophistication required for your first real gig is going to stomp all over whatever summer job you get, so unless you really need the money, put your time into an individual project instead.