What Makes a Good Resume

October 17, 2011 at 09:40 PM | Uncategorized | View Comments

I've read a small but nontrival number of resumes in my life, and each time I've vocalized strong feelings about what makes a resume good or bad.

Some people, presumably mistaking these strong feelings for expertise, have asked me for advice when writing their resume... So I will summarize here the things which I appreciate or despise while reading a resume.

Disclaimer: these are just my feelings. It's likely that people similar to me will have similar feelings, but it's unlikely that someone like me will be the first one reading your resume.

For many positions a non-technical recruiter or HR person will be the first to see your resume. They will likely apply naive pattern matching against a given set of buzzwords to determine the quality of applicants, so a section containing buzzwords and synonyms (ex, "Python, CPython, Django 1.3, Django 1.2, Django forms, Django admin, AJAX, ...") would likely be helpful (although, again, I can't speak with authority as I'm not a non-technical recruiter).

Steve Hanov has a comic that might be helpful.

As I'm looking at a resume I'm trying to answer three questions: what does the applicant know? How well do they know it? Would an interview with this applicant be a waste of time?

Some of the things I like to see are:

A summary of skills, programming languages and tools sorted by experience. I can't count the number of times a applicant includes a list like this on their resume:

Programming languages:
Python, Java, C/C++, Objective-C, JavaScript, C#, Visual Basic, HTML, CSS, Perl, Scheme, ML, Prolog.
Make, Vim, Emacs, Word, Power Point, Terminal, Linux, Firefox, Flash Player.

This kind of list is absolutely useless. Actually, no, that's not true. It's very useful. It tells me that the applicant doesn't feel the need to distinguish between their knowledge of Prolog and their knowledge of JavaScript, and they think C is similar enough to C++ to warrant listing them together.

A list ordered by experience is much more useful. For example, my list might look something like this:

Programming languages:
Python (5 years, 50k SLOC), ActionScript (2 years, 20k SLOC), JavaScript (5 years, 5k SLOC), HTML+CSS (5 years), C (2 years, 2k SLOC), some knowledge of PHP, Scheme, Haskell, and ML.
Vim (6 years), Bash (4 years), POSIX shell environment and utilities (4 years), Linux (8 years, mostly Debian and server administration), Mercurial (3 years), git (1 year).

Alternatively, the headings "most experience with" and "some experience with" could be used, as they give some idea of both expertise and breadth.

It's also worth noting that, at least in students, self assessment of knowledge is useless, so when I see words like "expert" or "very good" in a resume I mentally replace them with "dangerously ignorant".


Relevant links. I feel like this should go without saying, but I would guess that only 10% of the resumes I have read included any kind of link.

I appreciate any links to a applicant's online presence: a blog or personal website (if it has been updated in the last five years) is good, and an account on GitHub, BitBucket, StackOverflow, Reddit or other social site is even better. It's hard to convey interpersonal and communication skills on a resume, but social sites are a good way for applicants to demonstrate those skills.

And a corollary which: irrelevant links (for example, to a "home page" without any information that isn't already in the resume) are worse than useless - they waste my time and make the applicant look silly.

Length. I don't care. After the summary of skills, languages, and tools I'm usually skimming for interesting things... And if the applicant has three pages of interesting things, I would like to read those three pages. But if the applicant has three boring pages, I'll just skim over them.

Relevant work experience. Specifically, specific work experience. A statement like "worked on a team" or "helped implement" isn't as helpful as "wrote server-side JavaScript" or "designed the database schema". Also, while others might, I don't care about unrelated work experience.

It's also useful to include the software/tools used at a job. For example: "MegaCorp - 2001 - 2003: Designed database schema to optimize sale transactions; performed A/B testing to optimize widget sales; software used: PostgreSQL, PHP, libABTestOMatic"

School. As a university dropout, I'm a bit biased here... But I care very little about school or degrees unless they are directly relevant to the job at hand. For example, if I the position I'm hiring for would benefit from a strong knowledge of a particular academic field, formal education in that field would be important... But, in general, I haven't found formal education to be very important for the types of programming that I do, or the types of developers I hire.

Look, feel, and little details of the resume are important too. I want a programmer who cares as much as I do about consistency, attention to detail and never, ever, under any circumstances mixing tabs and spaces. If an applicant's resume has bullets that don't line up, text in random fonts, and consistently missing punctuation, I can't help but assume that their code will look similar.

Cover letters. I have read one or two very good cover letters where the applicant gave specific reasons they were interested in the job, and why they would be worth my time to interview. They were short, to the point, and distinctly lacking in phrases such as "I would make an excellent …". I appreciated these cover letters.

I have skimmed and subsequently ignored all other cover letters.

tl;dr: I want a resume to show me in as much detail as is sensible what the applicant has done, what they know, and why they are a good programmer. Bonus points for interesting content and links to social sites like StackOverflow or Reddit.