Interviewing C++ developers with extreme prejudice

Clever ways to find clever people

The Power of One eBook: Top reasons to choose HP BladeSystem

These days I do a bit of pimping (a.k.a. "quant headhunting" in polite company - a "quant" is a quantitative analyst doing high-value numerical analysis) for expensive people at banks. It may scare or delight you, but a lot of the financial markets are run off C++ with Excel VBA.

The first pass across the prospective intake is to check they are up to date, and have moved beyond MFC. Sure, I respect those who've made this wretched confection of multiple inheritance, and intrusive base classes actually work, but they should have moved on.

STL (Standard Template Library; Dinkumware does multi platform STL implementations and licenses a version to Microsoft) is a must and opens up opportunities for good deep interview questions. Knowing about Boost (which will probably be in the next C++ standard) shows they are near enough to the state-of-the-art.

I like them enough to understand the problems of inheriting from STL classes and order (N) notation, and it doesn't hurt to be able to write the declaration of a vector of linked lists of stacks, even if you never do it in real life. However, many interviewers like to compose some stupidly complex declaration and ask what it means. What it means, of course, is that they have low standards.

A large percentage of development, naturally, is debugging, so I have an array of code samples broken in obvious and subtle ways to ask about - and, yes, a couple of the bugs are my own foul-ups.

A modern C++ programmer needs to show s/he can happily work at three levels of abstraction, so I like to run discussions at three levels: the middle level is where C++ isn't really very different from Java or even Delphi; you declare, loop and call until the job is done. Many never get far outside this layer in either direction.

Below, we have the "physical" system of memory, CPU and operating system. This is classical old style programming, and quite a few people never master it, which can lead to horrible errors. Even if you don't do much low level work, it's important that you have a good "model" of what is happening to your code, even if it's a simple one. A good example of physical level programming is force fitting a class over a C struct, or perhaps extending a system data structure so C++ can handle it better. Done properly you can convert a simple blob of memory to an elegant class with zero overhead. Same applies to threads; you need to combine the CompSci view of mutexes and semaphores with the understanding that the thread creation API doesn't "really" take a function, but an address. This is part of getting your code to work with other subsystems. Given the percentage of project pain in that area, the more interfacing someone has done the better.

Going up, you need to communicate ideas and model the gross behaviour of your code, and these days that means patterns. Good candidates will be able to work through all the Gang of Four stuff, and even an adequate candidate will be able to not only implement singletons; blackboards etc, but also explain where they are useful. Singleton is asked about in many interviews nowadays, as is MVC and, of course, factory. The larger the project, the more important patterns become, so it is important that the people you hire are up to speed. They may express their ideas in some form of UML (Unified Modelling Language) or the RUP (Rational Unified Process), which is good even if you don't use them yet. Programmers who cannot communicate their ideas aren't just inefficient, they are often quite dangerous.

For completeness, I often chuck in questions about overloaded and virtual functions, though I do worry about people who are too good at them, since it implies their code may be too clever and fragile when others modify it.

A good programmer has a balance between the high and low level views. I see too many people who sneer at low level stuff, only for it to bite them on the ankle later, in ways they simply can't understand.

But ultimately, interviews as such are far from ideal. In recent times, I've handed over a laptop and asked a candidate to write some code for a standard algorithm like quicksort or even just a hash table. In fact, I've found the best predictor of programming skill is actually the expression on their face when I do.

The bottom line, however, is not whether a programmer knows a particular syntax, or can list those operators which may be overloaded. All this is in online help or the web. More important is that s/he can make good decisions about what to use and can explain those decisions. ®

A longer version of this article is available here.

Dominic Connor is a director at P&D Quantititive Recruitment

HP ProLiant Gen8: Integrated lifecycle automation

More from The Register

next story
HIDDEN packet sniffer spy tech in MILLIONS of iPhones, iPads – expert
Don't panic though – Apple's backdoor is not wide open to all, guru tells us
Do YOU work at Microsoft? Um. Are you SURE about that?
Nokia and marketing types first to get the bullet, says report
Microsoft takes on Chromebook with low-cost Windows laptops
Redmond's chief salesman: We're taking 'hard' decisions
Cheer up, Nokia fans. It can start making mobes again in 18 months
The real winner of the Nokia sale is *drumroll* ... Nokia
EU dons gloves, pokes Google's deals with Android mobe makers
El Reg cops a squint at investigatory letters
Chrome browser has been DRAINING PC batteries for YEARS
Google is only now fixing ancient, energy-sapping bug
Big Blue Apple: IBM to sell iPads, iPhones to enterprises
iOS/2 gear loaded with apps for big biz ... uh oh BlackBerry
prev story


Reducing security risks from open source software
Follow a few strategies and your organization can gain the full benefits of open source and the cloud without compromising the security of your applications.
Consolidation: The Foundation for IT Business Transformation
In this whitepaper learn how effective consolidation of IT and business resources can enable multiple, meaningful business benefits.
Application security programs and practises
Follow a few strategies and your organization can gain the full benefits of open source and the cloud without compromising the security of your applications.
Boost IT visibility and business value
How building a great service catalog relieves pressure points and demonstrates the value of IT service management.
Consolidation: the foundation for IT and business transformation
In this whitepaper learn how effective consolidation of IT and business resources can enable multiple, meaningful business benefits.