Finding awesome developers in programming interviews
stevehanov.ca
stevehanov.ca
In a job interview, I once asked a very experienced embedded software developer to write a program that reverses a string and prints it on the screen. He struggled with this basic task. This man was awesome. Give him a bucket of spare parts, and he could build a robot and program it to navigate around the room. He had worked on satellites that are now in actual orbit. He could have coded circles around me. But the one thing that he had never, ever needed to do was: display something on the screen.
Okay, he "could have coded circles around the interviewer" while simultaneously he had never, ever needed to display something on the screen.
Does this mean he's an awesome developer and we should be wary of a false negative provided by applying a single, very narrow test? Or does it mean we should apply lots of tests because you never know when you're going to discover that the person you thought was awesome lacks some basic experience you deem fundamental?
I can laugh about it now - was pretty gutted at the time.
I also laugh about it now, but at the time I was bewildered.
I was going to write that your other possibility seemed like good advice too, but on consideration, it probably isn't, at least without caveats. In this particular example, it sounds like the problem was a lack of ready familiarity with printf. As weird as that function is, any decent programmer with a man page could work out how to do it in under an hour, I'd imagine. It would be insane not to hire someone you intended to do something like embedded development because of lack of printf experience.
On the other hand, take me as an example. I've got long professional experience writing platform independent software. But that experience is in the guts of the program; I've barely ever touched GUI stuff on any of those platforms. If you assumed my long experience with Windows, OS X, and Linux meant that I could program user interfaces on all three with ease and hired me for that reason, you'd find yourself in a world of hurt.
For highly specialized people, it's easy to forget trivial problems. They've just spent the last five or more years of their life honing their skills on a particular set of increasingly difficult problems. I'd be impressed if they could still scratch down a non-recursive fibonacci function off the top of their head. Most human beings cannot do that.
As an interviewer it's easy to forget that you're the only one who is interested in simple functions like reversing strings or shuffling cards. You do so at your own risk. The people walking through your door are expecting to talk about what they're good at. Unless the technology world has progressed at such breakneck speed because we've been mulling over how to best reverse strings for the past thirty years, then it's no surprise that such a narrow test is practically useless for all but junior first-time programmers.
He didn't explain, but the reasoning is that an embedded developer can work for years on projects that dont' have a screen, so there's nothing to print to.
I once found myself in a similar situation. After 2 years of working on an embedded C project (without a screen), I needed to print something. I found out to my horror that I didn't know how to do it - I'd only had experience with C++ before getting this job, so I only knew cout/cin. And even after 2 years of work on pretty hard embedded code in C, not having screen meant that printing had never come up.
Similarly, many embedded programmers who program in C++ have no experience with the Standard Library, Templates, and sometimes even the "new" keyword, since these are things you often don't use in embedded systems. You can get a false negative if you assume that anyone who doesn't know how to use the Standard Library after 6 years of C++ experience is obviously a bad programmer.
As for the lying on the resume, though... I disagree. Assuming everything on the resume is a lie and not being surprised about the lies is wrong. Anyone who will lie on their resume will lie afterwards, too. Anytime they tell you they can do a task, you can't trust them for it. You have to micromanage them forever after.
That's not to say you should assume it's the truth... You should investigate and make sure. But if there are lies, it should horrify you.
I interviewed someone recently who listed C++ as his top skill. What that actually meant was a) he phyically sat near the C++ programmers at his current job and b) he ran the programs they wrote on his PC.
Frankly, I don't blame them. I looked through a stack of a dozen resumes on my boss's desk and noticed that every single resume listed Scrum. Somebody in HR is screening out candidates that don't list Scrum on their resume. I pointed it out to my boss and he just laughed and said he didn't think he could do anything about it. (I didn't look for other patterns, but I bet it's just as bad with particular software technologies.)
So listing every single piece of software you've ever noticed installed on your computer is a good policy unless you're personally handing your resume to the hiring manager. It makes a bad impression on technical folks, but that's better than getting your resume round-filed before anybody technical sees it.
(Note to self: next time job hunting, prepare different HR-friendly and techie-friendly versions of each resume.)
We had a case where we had a stream of candidates giving the same - and wrong - answers to various questions, all had come via the same recruiter, who was debriefing them after and coaching the next one.
Never came to regret it.
Yes, lying is bad, and perhaps I would agree with your well-spirited reply if I weren't already at the other side. I hope it didn't reflect on my personal qualities long-term :)
For example, I have programmed a little in many, many languages, and consider myself reasonably good in Python and C++. I know plenty of people who are less experienced than me who would write that they are "experts" in C++/Python, and would list those languages I wouldn't think to list 'cause I only know them a little.
So what should I write on my resume? I'm trying to compete with these people, after all.
If you go by the standards in the marketplace, well, there aren't any. We interviewed a candidate for a highly technical position only to find out that most of the technology experience listed on her resume was indirect exposure doing administrative and liaison work for technical teams. She was more technical than the typical corporate product manager or account manager position, but she wasn't remotely close to being qualified for the position we advertised. Strange thing was, she seemed to understand the position and clearly wanted it... not sure what that was about, but it proves you can't assume anything.
We decided to hire him. After he accepted the offer, he asked if he could come in over the weekend to get started. Wow! What enthusiasm!
He spent the weekend learning to program in C++. He was great, his knowledge of finance was invaluable, a stellar performer all around. Eventually wrote a webpage test kit on his own and sold it to Adobe.
So was it a lie? He WAS able to program in C++ on Monday.
I suspect this individual was extremely bright, and would have succeeded regardless of job specifics.
Nah... you need to know if the candidate can spot underspecified problems and ask for clarification.
Its like testing bias. No surprise that white upper-middle-class males clog our colleges, if the test is written by one.
Systems programmer deals with deep structures, narrow APIs and lots of persistent state.
Applications programmers deal with wide APIs and state machines.