I've hired dozens of C/C++ programmers (mostly at the entry level).
To do that, I had to interview hundreds of candidates.
Many of them were woefully poorly prepared for the interview.
This page is my attempt to help budding software engineers get and pass programming interviews.
A surprisingly large fraction of applicants, even
those with masters' degrees and PhDs in computer science,
fail during interviews when asked to carry out basic programming tasks.
For example, I've personally interviewed graduates who can't answer
"Write a loop that counts from 1 to 10" or "What's the number after F in hexadecimal?"
Less trivially, I've interviewed many candidates who can't
use recursion to solve a real problem. These are basic skills;
anyone who lacks them probably hasn't done much programming.
Speaking on behalf of software engineers who have to interview prospective
new hires, I can safely say that we're tired of talking to candidates
who can't program their way out of a paper bag. If you can successfully
write a loop that goes from 1 to 10 in every language on your resume,
can do simple arithmetic without a calculator, and can use recursion to
solve a real problem, you're already ahead of the pack!
As Joel Spolsky wrote in his excellent essay
The Guerrilla Guide to Interviewing:
1. Employers look for people who are Smart and Get Things Done
How can employers tell who gets things done? They go on your past record. Hence:
2. Employers look for people who Have Already Done Things
Or, as I was told once when I failed an interview:
3. You can't get a job doing something you haven't done before
(I was interviewing at HAL Computers for a hardware design job,
and they asked me to implement a four-bit adder. I'd designed
lots of things using discrete logic, but I'd always let the CPU
do the math, so I didn't know offhand. Then they asked me how to
simulate a digital circuit quickly. I'd been using Verilog, so
I talked about event simulation. The interviewer reminded me
about RTL simulation, and then gently said the line I quoted above.
I'll never forget it.)
Finally, you may even find that
4. Employers Google your name to see what you've said and done
What the above boil down to is: if you want to get a job
programming, you have to do some real programming on your own first, and
you have to get a public reputation, however minor, as a programmer.
Don't wait for your school to teach you how to design and program;
they might never get around to it. College courses in programming
are fine, probably even necessary, but most programming courses don't
provide the kind of experience that real programming gives, and
real employers look for real programming experience.
If you're in college, and your school offers programming lab courses where
you work on something seriously difficult for an entire term, take those
courses. Good examples of this kind of course are
Take several of this kind of course if you can; each big project you
design and implement will be good experience.
Whether or not you're in college, nothing is stopping you from
contributing to an existing Open Source project.
One good way to start is to add unit or regression tests; nearly all
projects need them, but few projects have a good set of them,
so your efforts will be greatly appreciated.
I suggest starting by adding a
conformance test to the Wine project. That's great because it gives
you exposure to programming both in Linux and in Windows. Also, it's
something that can be done without a huge investment of time; roughly
40 work hours should be enough for you to come up to speed, write a
simple test, post it, address the feedback from the Wine developers,
and repeat the last two steps until your code is accepted.
One nice benefit of getting code into an Open Source project
is that when prospective employers Google you, they'll see your
code, and they'll see that it is in use by thousands of people,
which is always good for your reputation.
If you want a quick reality check as to whether you can Get Things Done,
I recommend the practice rooms at topcoder.com.
If you can complete one of their tasks in C++ or Java within an hour, and
your solution actually passes all the system tests, you can definitely program
your way out of paper bag!
Please let me know whether this essay was helpful. You can email me at dank at kegel.com.
I'm looking for a few good interns.
If you live in Los Angeles, and you are looking for a C/C++ internship,
please have a look at my internship page.
- Similar pages
- On getting a job
- On education
- On the art of interviewing (from the employer's point of view)
- On adding to Wine's conformance test suite
Last Change 15 Jan 2006
(C) Dan Kegel 2004,2005
[Return to www.kegel.com]