Interviewing C++ developers with extreme prejudice

Clever ways to find clever people

Boost IT visibility and business value

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

The Essential Guide to IT Transformation

More from The Register

next story
NO MORE ALL CAPS and other pleasures of Visual Studio 14
Unpicking a packed preview that breaks down ASP.NET
KDE releases ice-cream coloured Plasma 5 just in time for summer
Melty but refreshing - popular rival to Mint's Cinnamon's still a work in progress
Leaked Windows Phone 8.1 Update specs tease details of Nokia's next mobes
New screen sizes, dual SIMs, voice over LTE, and more
Another day, another Firefox: Version 31 is upon us ALREADY
Web devs, Mozilla really wants you to like this one
Put down that Oracle database patch: It could cost $23,000 per CPU
On-by-default INMEMORY tech a boon for developers ... as long as they can afford it
Mozilla keeps its Beard, hopes anti-gay marriage troubles are now over
Plenty on new CEO's todo list – starting with Firefox's slipping grasp
Apple: We'll unleash OS X Yosemite beta on the MASSES on 24 July
Starting today, regular fanbois will be guinea pigs, it tells Reg
prev story


Implementing global e-invoicing with guaranteed legal certainty
Explaining the role local tax compliance plays in successful supply chain management and e-business and how leading global brands are addressing this.
The Essential Guide to IT Transformation
ServiceNow discusses three IT transformations that can help CIO's automate IT services to transform IT and the enterprise.
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.
How modern custom applications can spur business growth
Learn how to create, deploy and manage custom applications without consuming or expanding the need for scarce, expensive IT resources.
Build a business case: developing custom apps
Learn how to maximize the value of custom applications by accelerating and simplifying their development.