Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I recently saw a recruiting page for a software company where one of the requirements was "Excellent knowledge of C++."

Now, I know this somehow implies as expert knowledge of C++, but where exactly does expert knowledge fit into. Is it the knowledge and experience of (let's say) eight years of programming in the language, having and knowing the ins and outs of a specific domain. Or, is it a more brush-up, surface approach to one or more domains and a at the same time a more detailed understanding of the whole language?

For example, you cannot be an expert at writing system drivers and game engines at the same time. So, where does this excellent or expert knowledge fit into?

share|improve this question

closed as not a real question by gnat, Jim G., Walter, gbjbaanb, Caleb May 23 '12 at 15:34

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.If this question can be reworded to fit the rules in the help center, please edit the question.

"For example, you cannot be an expect at writing system drivers and game engines at the same time." Why not? – Pubby May 21 '12 at 0:23
Well, I'm not an expect of anything. – Crazy Eddie May 21 '12 at 1:00
It means you can make it past their interview cycle and the C++ questions they give you. It doesn't carry the same meaning between employers, people, or descriptions, and time spent using a language is not related to one's level of understanding and expertise of it (some people just churn out code in any language by just knowing the first few chapters of a book, never learning anything beyond that). – birryree May 21 '12 at 2:27
Having written both system drivers and game engines I have to side with @Pubby here =) – Patrick Hughes May 21 '12 at 4:29
Excellent is a vague word, since my version might be up here/down there and yours is up up there. I will say that an "excellent knowledge" should mean you can code a non-trivial program in less than 2 hours(maybe an alarm-clock program like pomodoro, with settings & sound). – Adel May 21 '12 at 5:27
up vote 17 down vote accepted

If they say "Excellent knowledge" then you should be able to identify and use all of the language's features correctly- including those from the latest C++11 Standard which are currently universally supported (unfortunately, meaning Visual Studio is the lowest common denominator here). A person with Excellent C++ knowledge can author their own type traits or expression templates; they can build their own containers, algorithms, and allocators. They know when to use inheritance and when to use templates and when to use neither. They know how to use RAII to manage all their cleanup-requiring state.

Also, they can cope with interacting with C style garbage, as that is unfortunately still a part of the language.

share|improve this answer
Boy, that seems like you expect a lot, especially when the experts I keep hearing about don't know what member() in an initializer list does. :P – Crazy Eddie May 21 '12 at 1:03
Unfortunately agreeing with both this answer and Crazy Eddie. – Klaim May 21 '12 at 2:48
+1 Looks like a fully agreeable description. If not "Expert", what would this be? – Independent May 21 '12 at 5:25
to be fair this is what expert should mean, but may or may not be what this particular company means by it – jk. May 21 '12 at 9:10
@DeadMG Nice answer. Just like to add: one may not know a language perfectly, if you have 30 years of age and have 20 years of experience in programming in different languages, you cannot cover everything in one language. How long does it take to fully become excellent in one language is trivial. You may never be an expert in one language, but may be an expert in problem solving. I don't think the people that wrote the recruiting requirements thought of this. – Eve May 26 '12 at 23:10

I don't think there's one widely accepted definition of what constitutes "excellent" knowledge of C++.

It tends to be difficult to come up with a clean answer to what would constitute "good", "excellent", "superb", (etc.) knowledge of any language, framework, platform, or what have you. In many cases it's particularly difficult to draw a clean line between knowledge that's really useful, and basically knowing a lot of trivia.

This is particularly true in the case of something like C++ that's been around to decades, applied in many different ways and written in many different styles over that time. There's an almost frightening amount somebody could learn about the language that's almost entirely unrelated to using it to solve problems well. Knowing all the rules of things like overload resolution or partial ordering of function templates is only likely to be useful if you're trying to hire somebody to work on a compiler (or something very similar). I've used C++ since it first became reasonably widely available, and have yet to use (or even want) partial order of function templates in real code.

Though not technically responsive to the question asked, I hasten to advise anybody who includes such requirement in job ads to try to keep some balance in mind. I think excessive emphasis is often placed on programming languages, at the expense of things like problem solving ability and general algorithms. Knowing a programming language well helps one to express solutions well, but is usually of minimal help (at best) in designing the solution itself. A great solution poorly expressed will virtually always beat a mediocre solution, not matter how well it's expressed.

share|improve this answer
+1 one employer may consider C with classes to be 'excellent' another may want a complete knowledge of modern C++ a la DeadMG's answer – jk. May 21 '12 at 9:09
@jk. Anyone considering C with classes "excellent" is a moron. – DeadMG May 21 '12 at 13:57
+1 Very good point in the last paragraph, I thought as much when I asked this question. – Eve May 26 '12 at 22:57

I would expect such person to be current with the C++ standard, the newly added concepts, constructs and keywords. For example, he should at least know what an rvalue reference is and why it can be useful.

share|improve this answer

How good is an excellent football player? It depends on what kind of level you are looking at, international, children's league etc.

An excellent knowledge of C++ probably means that you should know all of the key words and when they are used along with the STL.

Sometimes it will also include design patters and boost but sometimes it will include none of the above and will require that you pass their coding exam and impress their interviewer.

Honestly there simply is no actual definition. Do you feel like you can write a complex, multi threaded, multi tiered application employing C++ and some peripheral libraries (STL, MFC, boost etc). If the answer is yes then you probably have a shot at expert level positions.

If the answer is no you might be wasting your time.

share|improve this answer

An excellent C++ programmer knows when to use the myriad of 'features' the language offers and when not to.

share|improve this answer
I have no idea why you got downvoted, it's the most sane answer. – zvrba May 23 '12 at 15:21
Probably because of the sarcasm around features. – DeadMG Nov 11 '12 at 15:45

Don't dwell over the semantics of "excellent", just apply for the job if it seems interesting and you feel up to it. Let the employer decide whether you're "excellent" enough or not.

An "excellent programmer" knows the raw power of the tool and in the light of it judges several factors that determine implementation of the immediate problem at hand, those factors being: simplicity of implementation, extensibility/reusability, efficiency.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.