Feeds

Interviewing C++ developers with extreme prejudice

Clever ways to find clever people

Providing a secure and efficient Helpdesk

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

Internet Security Threat Report 2014

More from The Register

next story
Microsoft on the Threshold of a new name for Windows next week
Rebranded OS reportedly set to be flung open by Redmond
Apple: SO sorry for the iOS 8.0.1 UPDATE BUNGLE HORROR
Apple kills 'upgrade'. Hey, Microsoft. You sure you want to be like these guys?
SMASH the Bash bug! Apple and Red Hat scramble for patch batches
'Applying multiple security updates is extremely difficult'
Business is back, baby! Hasta la VISTA, Win 8... Oh, yeah, Windows 9
Forget touchscreen millennials, Microsoft goes for mouse crowd
ARM gives Internet of Things a piece of its mind – the Cortex-M7
32-bit core packs some DSP for VIP IoT CPU LOL
Lotus Notes inventor Ozzie invents app to talk to people on your phone
Imagine that. Startup floats with voice collab app for Win iPhone
prev story

Whitepapers

Providing a secure and efficient Helpdesk
A single remote control platform for user support is be key to providing an efficient helpdesk. Retain full control over the way in which screen and keystroke data is transmitted.
Intelligent flash storage arrays
Tegile Intelligent Storage Arrays with IntelliFlash helps IT boost storage utilization and effciency while delivering unmatched storage savings and performance.
Beginner's guide to SSL certificates
De-mystify the technology involved and give you the information you need to make the best decision when considering your online security options.
Security for virtualized datacentres
Legacy security solutions are inefficient due to the architectural differences between physical and virtual environments.
Secure remote control for conventional and virtual desktops
Balancing user privacy and privileged access, in accordance with compliance frameworks and legislation. Evaluating any potential remote control choice.