Feeds

Interviewing C++ developers with extreme prejudice

Clever ways to find clever people

5 things you didn’t know about cloud backup

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

Secure remote control for conventional and virtual desktops

More from The Register

next story
BBC: We're going to slip CODING into kids' TV
Pureed-carrot-in-ice cream C++ surprise
China: You, Microsoft. Office-Windows 'compatibility'. You have 20 days to explain
Told to cough up more details as antitrust probe goes deeper
Linux turns 23 and Linus Torvalds celebrates as only he can
No, not with swearing, but by controlling the release cycle
Scratched PC-dispatch patch patched, hatched in batch rematch
Windows security update fixed after triggering blue screens (and screams) of death
Windows 7 settles as Windows XP use finally starts to slip … a bit
And at the back of the field, Windows 8.1 is sprinting away from Windows 8
This is how I set about making a fortune with my own startup
Would you leave your well-paid job to chase your dream?
prev story

Whitepapers

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.
Endpoint data privacy in the cloud is easier than you think
Innovations in encryption and storage resolve issues of data privacy and key requirements for companies to look for in a solution.
Why cloud backup?
Combining the latest advancements in disk-based backup with secure, integrated, cloud technologies offer organizations fast and assured recovery of their critical enterprise data.
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.
High Performance for All
While HPC is not new, it has traditionally been seen as a specialist area – is it now geared up to meet more mainstream requirements?