Wednesday, November 23, 2011

No, you don't know C/C++ [Resume/Interview Rants, Part 2]


Probably more than 50% of the resumes I see -- maybe even 75% -- have a "languages" section. For those not familiar, a resume will look like this:

Joe Coder
1313 Mockingbird Lane, Sunnyvale, CA

Objective: To be a Great Programmer
Languages: C/C++, Java, PHP, HTML, XML, CSS, Javascript, ASP.NET, T-SQL
Prior Work Experience: PHP Web Company, Inc. 2009-Present

See what he did there? There's a "languages" line that just lists off a bunch of random stuff. Recruiters, and not to mention LinkedIn, will tell you that this is how you get your resume found online -- by putting in a lot of keywords that people are looking for. Some resumes I've seen are so chock full of keywords that a person 2 years out of school has a 3 page resume. I think my resume finally passed 1 page last year... that's, um, 17 years since I've started working full time and 25 years since my first job.

And oftentimes this works out. Consulting is one area where it does. People want to hire consultants with a particular skill that they don't have. So if I was looking for a C programmer and didn't know the first thing about it, I'd probably look at Joe's resume and be interested. When I interviewed him, he would probably be able to show enough savvy to make it through the interview, and I would hire him.

When he arrived to do the work, he would be cramming to make it through the day to do the work in C. Googling frantically, asking questions on StackOverflow, etc. But since the client really doesn't know how to write code himself, and Joe is a resourceful guy, chances are the project will go along fine. The project will be delivered, albeit in likely hacky code, and everyone is happy.

It absolutely does not work this way when you're looking for full time software engineering gigs.

And here are some pro tips on what I'm looking at. My hope here is that over time, everyone will save a lot of time by following these tips.


First thing's first: I'm suspicious because you put HTML, XML, CSS, and ASP.NET under "languages".

This is the first red flag. When you're interviewing for a software engineering gig, markup languages don't count. I expect to be able to hand any decent software engineer any crazy-ass markup language and have them understand it. I would say that a blanket classification for listing a language in this section is it has to be Turing Complete, but, unfortunately, HTML+CSS is Turing Complete. So I just have to say "markup languages don't count."

ASP.NET is not a language at all. It's a library. This is like saying that stdlib is a language I know. Yet ASP.NET is in these lists all the time, along with Spring, Hibernate, Struts, etc.

And damn you Ohloh for listing many of these under "languages". How is XML any more a language than a CSV file?


Don't list it if it's just a hobby language

Unless you've undertaken some serious hobby work, that is, and feel as prepared as you would with your work.

I had a candidate who was doing fairly well in the interview, telling me about his last job. At some point I noted he listed Ruby and Rails on his resume. I said, "Hey, what have you done in Ruby?" He said it was hobby work. I asked what it is that he's created, family website, something else? He admitted he had bought the book and never really read it.

Let's repeat that: He put on his resume a language for which he had bought a book and never read. O...M...G.

Don't be that guy. Please.


If you list it, be prepared to answer questions about it.

This is an extension of the first point in part 1. Red flag number two: you just spent 2-3 years at a PHP company, doing PHP work. Yet PHP is the third listed language on your resume? Shouldn't it be #1? Your best language should be what you're working with right now, right?

If you have "C/C++" on your resume's "languages" section first, to me that means that either that's your main interest or your main expertise. When I ask you questions, that's where I'm going to go. If you don't want questions about a subject, do not include it on your resume.

The other thing is, I do not properly introduce myself. I'll tell you my name, but not what I do. So you have no idea if I'm a PHB or a neckbeard (answer: 50% of each, well maybe 75% PHB these days... *cries*). This is a trap. If my introductory batting-practice questions lead you into making yourself out to be an expert in something, I may just drill you hard on that later.


Thing is, I won't ask you about stuff you say you don't know

If you come to me saying all you know is PHP, I'm not going to ask you about C++. If you know a language I don't know, and explain it well, I will take that all at face value.


Most importantly (and subject of post): if you put C/C++, it makes me sad

They're not the same! If you write C++ that looks like C, you're doing it wrong. If you write C that looks like C++, your coworkers will likely make fun of you. But if you lump them together as one language on your resume, I'll be sad. If you say that "C/C++" is a language, verbally, in the interview (this has happened), I'll just go ahead, take the blue pill and end it all now.

So the first thing I'm going to ask you is "which is it, C or C++? What's the difference anyway?" If you can't answer this, and you've led me to think you should know, then it's a hard spot to recover from. I don't even think of myself as a good C or C++ programmer given the genius co-workers I've had over the years, so if you've set yourself up as one and can't answer my easy questions... that's just a problem.

Bottom line: if you have to have a "languages" section on your resume, for whatever reason:

  1. List it in the order of languages you know best
  2. If you want to work in a particular language, you're taking a risk listing it first if you don't know it well. But, I don't blame you for trying.
  3. Don't list stuff you don't know.
  4. Don't list XML, HTML, CSS unless you're a designer, and call them skills or markup or something other than bulking them with C++ and Java, please.
  5. For the love of god, don't lump C and C++ together.

Full disclosure, my languages line from my very first resume coming from college (1994):

C, C++, Renderman Shading Language, perl, csh, sh.

And I'd say I totally overestimated my experience with Renderman Shading Language (shouldn't have listed it) and underestimated my experience with Perl (I didn't realize at the time I was more of an expert than I knew).


[Edit]

Heh. I've done the "C/C++" misnomer myself on this very blog. In my defense, I was mostly programming in C# in 2008, so my brain was fairly warped.