1. Backup your Buzzwords
Almost every computer science resume has a section that looks like:
Skills: C, C++, C#, Java, .NET, WPF, OpenGL, Direct3D, GLSL, Visual Studio, Eclipse, NUnit, JUnit, NAnt, ...I'm tempted to recommend removing this section entirely. It does have some uses though; it is good for google searches and HR/manager buzzword hunters. It can also paint a quick profile: is this person a client-side graphics developer? a server-side PHP/MySQL developer? An architect astronaut?
In order to play the game with the less technical folks, I am OK with candidates including this section, but these skills need to be backed up throughout the resume. For example, if OpenCL is listed but I don't see any evidence elsewhere in the resume, I will be skeptical. If I ask about it in an interview and the candidate doesn't have any experience or even exposure to the topic, they have just lost integrity points.
If you list something in the skills section, make sure it is proven elsewhere in your resume, e.g., "Implemented a GPU-accelerated cloth simulation using OpenCL, which resulted in a 30x performance improvement over a multithreaded C++ version." The buzzword hunters will give you extra points for having multiple instances of the buzzword, and technical folks are more likely to believe you.
2. List Coursework Strategically
|This motorcycle has nothing to do with |
resumes but it sure is fun to ride.
Do not list a course that you cannot discuss intelligently. You should have a reasonable grasp of the subject and a story about a related project. For example, I took machine learning in grad school. I got an A and somehow even passed the PhD qualifier, but I can't do machine learning to save my life. I can pronounce fancy algorithms like boosting and principle component analysis, but I can barely tell you the difference between them - not something worth discussing in an interview.
Do not list required courses! This is common with underclassmen, but I still see it done by upperclassmen who have more interesting things to list. If I know your major is computer science and you go to a reputable school, I also know you took intro to programming, calculus, and discrete math. Don't list them; they get in the way of the good stuff.
3. Include Your GPA
If you are an undergraduate, masters student, or recent graduate, include your GPA in your education section. Why? Because if you don't include it, the recruiter is going to think it is low - really low - like 1.5 low. What if you don't have a 3.0 GPA? Study more and play World of Warcraft less. More seriously, if your cumulative GPA is not great, still include it but also consider listing your in-major GPA or last-semester GPA - clearly marked. Some students do not practice drinking enough in high school and party too much freshmen year, resulting in poor grades (disclaimer: underage drinking is bad.). Listing the previous semester's or year's GPA gives the student a chance to talk to their improvements - in school work, not alcohol tolerance. I recommend listing your in-major, or even in-minor, GPA only if it is higher than your cumulative GPA. If it's not higher, think twice about your field.
Wait a minute. I thought GPAs only matter if you are going to grad school. No one in industry looks at those things, right? Given my extensive teaching experience (one semester), I can say that some of my brightest students had some of the worse grades. They were too busy raising money for their startups or going on job interviews to do every assignment rigorously. Students with the best grades were really organized and conscientious - absolutely fantastic characteristics to have, but not necessarily a guaranteed indication of raw brilliant. Case-in-point: I had a 3.97 in grad school and I am continuously humbled by the intelligence of people in our field. A great GPA can help you by showing your rigorousness; a poor GPA isn't necessarily going to bury you but it will mean you have some explaining to do. Many companies have a minimum GPA require, so I'd play the game to show that you can.
Some people will say that your GPA is only important for getting your first job. After that, leave it off your resume. Baloney. Why not drop the name of your university too? Why should I care that you went to CMU 20 years ago? Because you got in! If your GPA was low or average, OK, drop it. If your GPA was really high, leave it. If you were an over-achiever in college, you are probably still an over-achiever unless your motivation changed.
I don't have a PhD so I can't say if a PhD student should list their GPA but I will anyway. I have never seen a candidate with a PhD be evaluated on their GPA. I'm not saying it doesn't happen, but I've never seen or heard of it. I have heard that if a PhD student's GPA is too high, they should be focusing more on research. If that is really the case, then why do they take classes at all? Go ask someone who is qualified.
4. Don't Ignore What You Did in High School
When you are looking for an internship, don't think that high school isn't important, especially if you are a freshmen or a sophomore. Yes, freshmen can and should land internships. I had two offers from Intel for the summer after my freshmen, and I didn't know anything. Well, at the time I thought I knew everything.
If your high school class rank was really high, put it. Valedictorian - put it. President of the computer club? Put it. Fail history class because you were busy coding Android games in Java? PUT IT. Sell your Android-based startup to Google on your 18th birthday? I should be working for you.
It is espeically important to include self-started personal programming projects, even if you coded them when you were 14. Hell, say "Implemented a pacman clone for the Xbox 360 using C# and XNA when I was 14." If I see that on a freshmen's resume, I want to hire them even if they don't know what a skip list is. They'll never use one anyway.
As you gain experience, it is OK to remove things you did in high school with more recent and stronger experiences.
5. Include Books and Conferences
You're passionate. You read books, go to conferences, and argue with your smart friends to sharpen your skills. Everyday, you make yourself a better developer.
Let your passion show through on your resume and include a section with a few of your favorite technical books. How about Code Complete, Peopleware, The Pragmatic Programmer, Effective C++, and Real-Time Rendering? Those are my favorites. Pick your own. Be ready to discuss them. If your interviewer has read the same books, there's a good chance you will hit it off. If they haven't read the classics, you probably want to work somewhere else. If you haven't read the classics, start yesterday.
As an aside, my first day as an intern at Intel, I asked if I should read any books. My mentor, John Spotswood, recommended Code Complete. Reading that book brought me to a new level in software development - granted I was 18 so I had no where to go but up. Intel was nice enough to pay for any technical books I wanted to read, so Code Complete was just the beginning. Peopleware, The Pragmatic-Programmer, and others followed. I always let the interns I work with now borrow these books and others.
In addition to listing your favorite or most influential books, list the conferences you have attended, or better yet, volunteered at, or even better yet, had work accepted at. This sends the message that you are keeping your skills current, know what's on the cutting edge, or are even defining the cutting edge.
6. Be Specific
In 2003, the stars aligned in such a way that I was accepted into IBM's Extreme Blue internship program. This is an outstanding program that I encourage all passionate computer science students (BS, MS, and PhD) to apply to. I believe much of the program's success is due to Kieran Lal, the program's co-founder and one of our mentors for the summer. Kieran is a great culture-building leader that is truly interested in the long-term success of every intern. Kieran gave great advice, and here I share one piece of it: be specific.
What is stronger:
"Implemented a distributed storage system"
"Implemented a Linux-based distributed filesystem in C (~20K lines) tested with 20K concurrent users"?
Being specific backs up your buzzwords and gives the reader context and scope. What does this mean?
"Implemented an application to track chipset validation"
"Implemented a database front-end to track chipset validation in MS Access 97 in an afternoon"
"Lead a team of five developers creating a chipset validation tracking application with an HTML5 and Android front-end. Used SQL Server with stored procedures on the back-end."?
7. Keep it to One Page
When I was a know-it-all intern at Intel, I spent an afternoon toying with SQL Query Analyzer. So I thought it was a good idea to beef up my resume:
"Optimized SQL queries using Microsoft SQL Query Analyzer"
I added lots of things like this, which turned me into an 18 year old intern with a two page resume. I brought it to an internal job fair, and people didn't know what to do with it. Staple it? Paperclip? More importantly, they couldn't see the meat in the resume because all the SQL Query Analyzer junk got in the way.
As a recruiter, I got lucky one time at a university career fair and noticed that a resume was actually two-sided - and all the good stuff was on the back side! I wonder how many two-pages resumes I missed.
If your an undergraduate, keep your resume to one page if your going to the career fair. A PhD student or developer with a few years experience can definitively have multiple pages. I actually keep two resumes: a short academic-focused CV and a longer industry-focused resume.
Need to save space? Leave off "References available upon request." That is always implied.
8. Link to Your Personal Website
The top of your resume should have a link to your personal website, which acts as a portfolio with screen shots of your work and possibly code examples. You don't have a personal website? Make one. Everyone else is doing it so you need it to be a player. A development blog is also appropriate and perhaps even better.
In 2000, I had a personal website that included some games I wrote in Turbo Pascal and assembly when I was 15. When I started my internship at Intel that summer, I learned that one of the developers downloaded my code and reviewed it, and that played a big role in me getting the job offer.
In an interview, I always try to bring out the best in a candidate. I hate walking out of an interview thinking the candidate might be good but I wasn't able to elicit it. In that case, I have to say no hire. When looking at a resume, I have to go by what's on paper. I can't interact with the candidate hoping to see them shine. Hopefully, some of these resume tips will help our computer science students put their best foot forward.
Other tips? Comments? Criticisms? Let's discuss.