24

Most C++ programmers will not specify their rank on their CV (at least, as far as I have seen) but some people clearly can put "C++ expert" on their CV (like most of the boost lib writers).

But at which time in a programmer's evolution does he become an "expert" (in C++)? What are or should be the requirements - or what do you expect from a person who has this "title"?

  • lots of experience?
  • passed some hard tests?
  • specific diploma?
  • ???
  • Profit!

(I don't feel like an expert, but that won't stop me from asking myself this question :) )

Notice that I've read this question that has similarities but doesn't answer mine exactly...

50

I think it still stands what Herb Sutter once wrote back in 1997:

C++ is a wonderful language that I enjoy using daily. At the moment, it's my primary programming language. It has drawbacks compared to other languages I've used: for example, it has no real module system, and no standard garbage collection. It also has solid features available in few or no other languages: for example, its flexible templates support completely new styles of generic programming. Bottom line, C++ has more power than any of us can handle all at once. I doubt that there are more than half a dozen people on the planet (and I have specific names in mind here) who are true experts in the entirety of C++, from the core language to all the facets (pun intended) of the standard library. Most of the rest of us can only aspire to know a few narrow areas in depth and the whole reasonably well.

Fortunately, there's no need for us to all be Stroustrups or Koenigs to get concrete benefits from C++. Just avoid the dusty corners of the language, and remember that cuteness hurts in many ways. Above all, "write what you know, and know what you write," and you'll certainly do well!

Quoted that, i think i agree with Eran Galperin on what he wrote. Merely using it for years does not qualify you as expert. I'm happy i understand some stuff of C++, but fail hard at other stuff. Being an expert in C++ is a huge achievement.

48

The day you can really write 'C++ Expert' on your resume and mean it, you wouldn't need to have a resume.

29

Summary

  1. Relative: Are you among the top developers you work with (or worked with)?
  2. Absolute: Do you read C++ books from world-class experts, and understand them?
  3. Forever: Do you code in C++, trying to find new ways of coding better, faster and safer? Do you STL? Boost? Does C++0x means something to you?
  4. Humility: Do you know you're not the best, but are still able to find the info you don't know, reading the right expertise from the right experts, and understand it, and explain it to others, who will trust your answer?
  5. Investigating: Can you produce test code to prove/dismiss a point, producing results and analysing them, including using a language feature you never used before?
  6. Obsolescence: Learn to recognize when you are obsolete.

Note that most of the points will silently reference another...

1. Expertise is relative

Most people would not hire world-class C++ experts anyway, so you should not try to pass as one unless your first name is strange and recognizable (Herb? Bjarne? Andrei? Scott? Andrew?)

Instead, you should know where in the "global C++ developers" population you are.

For example, if in your past jobs, you went from "I'm junior C++ typewriter and I know Word and Excel" to "I know why your C++ code does crash", then you are at least somewhat better then the other people. Did you participate in your team/company's coding norm? Do people ask you questions about their C++ problems? Do you offer them solutions?

In the same way, if you participate in C++ forums with developers from all around the world, like Stack Overflow and that you are among the elite of this forum, that your answers are praised, that your questions are considered legitimate and interesting, then you could be considered an expert.

2. Expertise is absolute

Knowledge comes from experience, but also from pure learning. For example, reading books from C++ world-class experts like Herb Sutter or Scott Meyers is the bare minimum. Did you play with Alexandrescu's books? Did you have a copy of Bjarne Stroustrup book and actually read and understood them?

Did you read C++ books and felt you understood them? Did you write a C++ book? Or a C++ FAQ?

3. Expertise is Forever

Forever not like in "Diamond are Forever" (this would make you a world-class assh*le, forever stopping others from evolving because you believe you know better).

Instead, Forever like in "You will be condemned to practice your art forever".

Did you use C++ for real life projects? Did you write a library with real-life users? Did you use C++ for personal prototypes, just to see if it works?

No matter how much people work on C++ in their day work, each hour playing at home with C++ is worth 4, 8 or even 20 hours of normal day work because in normal day work, you won't get the opportunity to test your limits. So no matter how much late you are compared to others in your team, if you are geek enough to "play at home", you'll soon get past them in Turbo Mode. Your luck is that there are good libraries on the wild: STL and Boost being the easiest to come because, being templates, their source code is easily available.

This kind of practice pays because it keeps you on shape (mental, if not physical), keeps you up-to-date with current technologies, and because you're just accumulating experience past the experience of other "just for the pay" developers. And with experience comes expertise.

4. Expertise goes with Humility

You are not the expert on C++, but you can still be an expert if you know where to find the right info. This means reading posts from other experts, understanding which info is usable, and which info is useless. This means asking the right questions, to the right people.

You can be an expert if people come to you to have the right answer, no matter how you found it, as long as you can understand it and explain it to others

This goes along the line "Forever, not like diamonds". There is always a bigger fish, and sometimes, expertise is just recognizing the best among the best, understanding their viewpoints (and thus, learning), and sharing it with your co-workers.

People like it when, when they ask you a question, the answers is somewhat like "I saw this answer on this particular forum post, and I feel this is the right answer because...", because your knowledge has a verifiable base, and is not some kind of "out of the hat", "take it or leave it" miraculous answer.

People like to trust the people, so don't get mysterious with info.

5. Expertise is Investigating

I know of some armchair experts, that will tell to you that they are right, period.

An expert does not tell he/she is an expert.

An expert proves/dismiss points with code and is able to explain/discuss them, again with code.

And in the end, he/she does offer the proof the solution is the right solution, with both code and testing.

6. Expertise is NOT Obsolescence

It is easy to believe yourself an expert or some kind of technical reference when you worked on the same code since eons. Perhaps you did become set in your ways. Your expertise is just a fancy name to hide the fact you're obsolete.

Did you ever concluded a discussion with a "It is the way it is done here" when every other arguments you offered were easily dismissed as wrong?

If yes, then you have a problem.

You should consider the fact your expertise could be a thing of the past (if at all). Either you work hard to regain your expertise, or you should let go the "Expert" title, using instead something like "Experienced".

26 accepted

An expert in any programming language has:

  • Intimate knowledge and experience in a diverse array of designs and implementations the language is commonly used for.
  • Familiarity and expertise with the latest methodologies and design patterns,
  • Vast knowledge of its distinctive features.
  • Even greater knowledge of possible traps and pitfalls.
  • A long list of good resources to query when he encounters something he is not familiar with.
  • A strong and diverse portfolio of previous projects with that language at different positions (implementation, design).

There is no test you can take that can qualify you as an expert (though some presume to do as much). Your track record speaks the strongest about how good you are.

16

When you feel that you really don't want the job you're applying for.

5

My version of this question is to ask people how they rate on a scale of 1-10 in C++.

If they say ...

  • 10: I pretty much dismiss them at this point. There are no 10's in C++. It's just too complex of a language. If you disagree then you haven't used C++ enough.
  • 9: Unless it's Bjarne Stroustrup, Herb Sutter, or the authors of C++ Template Metaprogramming, I pretend they said 10.
  • 0-8: It's relative :)
4

Slightly different angle, here. If someone told me they were an boxing expert, I wouldn't talk to them about jabs and left hooks, I'd talk to them about fights they'd won. If someone told be they were an expert with woodworking tools, I wouldn't ask them to recommend a manufacture of saw, I'd ask them to build me a chair.

IMHO, C++ is just a tool with which you can apply a range of techniques to get your desired result. If you can use C++ to achieve excellent results with minimal resources in a short timeframe, you are an expert. It is a mistake to confuse breadth of knowledge with genuine ability as they regularly do not coincide. Expertise is more about the correct application of knowldge as the possesion of knowledge. Are the true experts of the English language the great authors or those who compile dictionaries?

3

In my opinion, you can put "C++ expert" on your CV if

  • you think it will significantly improve your chances of getting the work; and
  • you're not going to get caught out (i.e., you can bluff your way through any test of that statement).

The second point doesn't necessarily need you to be a C++ expert at all.

The CV is a tool to get you through at least the first cut-off stage and it's not delivered under oath. Even if you think you can't fool the second-stage interviewer enough to get through it, you've still gotten closer than if you had put C++ newbie on your CV.

None of this is purely honest of course but I've competed in the contracting and consulting markets for almost 25 years so it may be I've become somewhat jaded and cynical.

Your mileage may vary depending on how much of a C++ expert or self-salesman you are.

3

Consider what Joel Spolsky said about Getting Your CV Read (circa 2004; still valid - OK, so he said "resume", but he meant "CV"). Also from today's message: Another Resume Tip. Also, what E W Dijkstra said in EWD498 about "Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer."

3

If you are tempted to put Expert anything on your CV be careful you have some external confirmation of your self-evaluation (PDF link).

As for C++ specifically, intimate knowledge of something like the boost library is not important. For more important is to look at the design of a library (such as boost) and to quickly a) understand the design choices the library writers had available, b) list the pros and cons of the variety of ways the library could have been implemented, and c) why they picked the design direction they did without needing to read external documentation where the design decisions were discussed.

Caveat: This assumes the domain of the library doesn't itself require special expertise.

2

My defintion of expert might differ from yours. My honest guess is that unless you comment on, contribute to or are a member of the standards committe for C++ you probably aren't the expert you think you are. I also suspect that if you work in maintaining an active C++ compiler you have probably seen the uses and abuse of the language in a way that few ever will - though you likelly have a vested interest in being on the committe to keep up with any language changes.

This doesn't mean that you cant be super proficient at implementing in the language, it just doesn't qualify you as an "expert" on C++. I worked with the language for over a decade and even near the end I would still come across some quirky nuance in the language used in library code that just never came up in my daily work experience. Your skill and expertise will show through in other element of your work (like a submitted sample) or other elements of your skillset.

Leave the expert moniker for the language lawyers out there.

2

Your tests mean nothing. These days a C++ expert (and there are very few) would know all the Boost library well enough to explain any of it to a non-expert.

I consider my self pretty darn good with MFC/Windows style C++ programming, but am now working hard to move out of the 90s by groking the more advanced C++ tools and techniques.

My favorite class is still CString though. You can have my char* overload when you pry it from my cold dead fingers.

2

You are an expert at c++ or any other language if you work in a group of programmers, and are frequently called on for subject matter expertise, consulting, or to help debug problems encountered by others. You make your team better.

This definition does not include subject matter experts who do not share their knowledge, head cases, etc. Some may agree or disagree on this point, but I would not consider someone an expert if I would not hire or have them on my team.

2

I have been programming in C++ for about 14 years now and in my experience to be a C++ expert your name should be eighter Bjarne Stroustrup or Alexander Stepanov. Changing your name doesn't count. ;-)

1

I think years of experience is more important than passing any kind of test or certification. Whenever I'm learning any new language I use (almost) the same criteria to gauge whether or not I can put it on my resume. If I can do all of this:

  • Use the basic syntax without referring to a cheat sheet
  • Do string manipulation
  • Do file I/O
  • Use the libraries and built-in data structures intelligently
  • Understand how memory is allocated and freed (manual or GC)
  • Get information from the underlying OS
  • Access a database
  • Process HTML or XML files
  • Send email
  • Communicate over a network (this might mean sockets for C++, or REST for other languages)

then I pretty much consider myself to be an expert in a language. If I can't, then I'm still learning. As my profile states, I've been "still learning" C++ for quite awhile.

1

Your question has a specific context: it isn't "when are you a world-class expert?", and it isn't "when do you know know everything?" ... instead it's "what do you think that 'expert' means when you see it in a CV?"

But at wich time in a programmer evolution does he become an "expert" (in c++)?

When knowing more C++ wouldn't improve his programming.

What are or should be the requirements - or what do you expect from a guy who as this "title"?

I might hope that he knows no less than I know, about the language, if it came up ("what: you call yourself an 'expert', and you don't even know whatever-expert-level-skill?").

I would certainly also want an "expert" C++ programmer to have some expertise in at least two subjects:

  1. C++
  2. and other aspects of programming (e.g. OOP, QA, development process, etc.).
1

Just adding to what Bill the Lizard said, I think you can consider yourself master of a language or framework when you don't try to rewrite every piece of it whenever you run into a problem. What I mean by this is, when you have enough knowledge about the toolset and language to know what exists in it, what doesn't, what you can leverage, and how to leverage it. Most programmers will eventually learn the gang of four design patterns, programming best practices, etc., but the masters know when and where to use this invaluable knowledge, knowing where it works and where it doesn't and how to work their way around those limitations effectively.

1

When you can hold your own at comp.lang.c++... also when you start working with template mixins and realise you need a front-end to generate the template code.

1

I don't think anyone can honestly put C++ expert (unlike c)

With C you can know the entire language and the stdlib and the odd corners and pitfalls.
With C++ I don't believe anyone can know the whole c++ stdlib + boost etc.

Even just knowing the entire language and the common edge-case problems problems is hard enough.

1

When you can answer all the questions at the end of each chapter of The C++ Programming Langauge by Bjarne Stroustrup then at least I would consider you an expert.

1

Once you have written a standard conforming compiler for the language and your own version of the standard libraries.

0

When you won't get stumped in an interview with a C++ challenge!

0

To me, seeing C++ expert on a resume means that person is not going to ask for help from anyone else on the team no matter what C++ problem he or she runs into. Furthermore, that person is also willing to help solve any C++ problem that another team member comes to him or her about.

If you are ready to make that commitment, then put it on your resume.

0

When you know what does it takes to be a C++ expert? :-)

0

I have to mention Steve Yegge's article on improving your resume, especially tip #7.

0

I think X-Language Expert is an Algorithm Expert.

  • X-Language Programmer

    lool!!! is an programmer use all CPU resources and large data into memory just to execute a simple operation!, your are an X-Language Programmer when CPU hate your code source lool.

  • X-Language Expert

    is an programmer can use minimal CPU/Memory resources.