tags:

views:

4073

answers:

26

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  A: 

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.

Johannes Schaub - litb
<pun intended... pfff>
DFectuoso
It was either that or answering: "When your nick in SO is litb", but that would be such a lack of modesty that I understand why you didn't :)
David Rodríguez - dribeas
+1  A: 

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.

Bill the Lizard
While that may work for most languages, C++ may be a particularly nasty exception. There are gobs of nooks and crannies in the language that must be understood to claim expertise, such as file-scope static vs anonymous namespaces to support local types or understanding "const char *const".
Tom
+26  A: 

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.

Eran Galperin
+2  A: 

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.

paxdiablo
Most recruiters know for a fact that people tend to lie in their curriculum. I could try to get to a video on Microsoft recruiting where a your recruiter _recommends_ lying in curriculums to call their attention, but just as much as they can not be caught in a short interview
David Rodríguez - dribeas
My C++ team just hired a new team member. One guy had a really nice resume (aka CV) and claimed to be a C++ 'expert'. We were not requiring our new guy to be a c++ 'expert', but the more C++ the better. Seeing 'expert' on the resume I added some more advanced c++ questions to the phone screen notes. One of the first questions I asked was 'What can you tell me about std::auto_ptr?' I was not expecting to hear 'what's that?' Our 'expert' was really a C programmer. The interview was over at that point. We'd consider a strong C guy, but not a liar.
Jim In Texas
Hence my comment "you're not going to get caught out (i.e., you can bluff your way through any test of that statement)" :-)
paxdiablo
+16  A: 

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

Jonathan Leffler
I think this is subtle but true. if you are qualified for the applied position, over selling your skill in this area is not necessary and even raises skepticism.
MikeJ
I certainly wouldn't want to work anywhere where claims of expert-level knowledge of c++ was greeted with anything but extreme skepticism. Once something on your resume looks doubtful, it diminishes the value of the rest.
PeterAllenWebb
I don't agree. I have seen many CVs that promise more than they offer, but at the end, those are the ones that go over HR barriers. Both HR and interviewers know that people inflate their CVs, it is just a matter of how much.
David Rodríguez - dribeas
@Dribeas: there's inflation and there's outright untruths. If HR doesn't spot the difference (quite possible), they should get a job somewhere else - and hope that the technical interviewers do the weeding out that HR failed to do. (I partially sympathize - but there's truth in the answer too.)
Jonathan Leffler
+5  A: 

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 :)
JaredPar
I hope you listen to their rationale first. Would suck to get dismissed just because the interviewer defined the scale differently. ;)(The interviewee might define it so the best 10% are rated 10, the next 10% are 9, and so on. Which means there are plenty of 10's around)
jalf
@jalf, this post is mostly in jest. But if someone does say 9 or 10, they better be able to completely school me.
JaredPar
The trouble with this is everybody I have interviewed has said I am an 8. As a result I say "Everybody I have interviewed has always claimed to be an 8. In relation to the best of these I am a 10. Though I know there is always more to learn (an I put Bjarne as an 11).
Martin York
+1  A: 

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.).
ChrisW
+47  A: 

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

Cyril Gupta
That seems to be a true statement. After twenty-plus years of working with it, I finally believe I'm an expert at C++ (having just achieved that level in the last two or three years), and I run my own programming company. :-)
Head Geek
@Head Geek: I'd go a bit further: if you're a C++ expert, the reason you don't need a resume is that anyone capable of using you effectively as an employee has already heard of you, and probably read your books. If Stroustrup asked you for a job, you wouldn't base your decision on his CV...
Steve Jessop
That's sort of silly. You can be a closet expert.
ApplePieIsGood
@ApplePieIsGood: Not likely. Part of the process of becoming an expert is working on "real" projects.
Brian
@Steve: If Stroustrup asked me for a job, I'd definitely base my decision on his experience, and the way you submit that to employers is a CV. I have no idea from his books if he has experience in this field, which is *not* designing a language.
Roger Pate
@Roger: that may be, in which case I doubt that you're the kind of employer that tries to attract top research boffins. So the issue won't arise. Cyril's point, which I supported, is that "C++ expert" could be taken to mean a lofty rank at which hiring is based on publication, reputation, interview, and negotiation, not really on some one-page CV. Obviously if Stroustrup was applying for a job "fitting boilers", as opposed to "being a C++ expert", you'd want to see a CV as a pre-interview filter. The way *I* submit my experience to employers is a CV: Stroustrup might prefer a phone call.
Steve Jessop
You're right: most jobs are not in the field of research for a specific programming language. That's also exactly the point I was making. :)
Roger Pate
@Roger: that's true. Most of this question is about arguing over what "C++ expert" actually means, and Cyril has taken a pretty hard-core view that it doesn't mean "a very good C++ programmer". The question itself is kind of predicated on the idea that it matters whether you write "C++ expert" on your CV. Sticking with the example of Stroustrup: you'd want to see his CV, but contrary to Klaim's expectation, I doubt you'd care either way whether he said "C++ expert" on it or not. You'd be looking at specifics of his programming experience.
Steve Jessop
@Steve: Actually, to be more generous to Stroustrup since I know he has done quite a lot of non-C++-specific research, I thought it was clear this question is about being a C++ Expert *User/Programmer,* rather than expert in language design, implementation, and related. That still provides plenty of room for interpretation on what "expert" means, but it eliminates this answer.
Roger Pate
@Roger: sure, it's a game of Sutter's definition, in litb's answer, "true experts in the entirety of C++", vs. the definition used by a recruitment agency, approximately: "beginner + 1 year = intermediate, intermediate + 1 year = expert". Not to say that *you're* using that crummy recruiters' definition, but I suspect a reasonable proportion of people with "C++ expert" on their CV are, and they're the ones who deserve to be dosed with half an hour of questioning about how locale facets were designed, and asked which of the changes rejected for C++0x they would have included, and why ;-)
Steve Jessop
+1  A: 

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.

IAmCodeMonkey
+2  A: 

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.

MikeJ
+1  A: 

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.

Jesse Pepper
Dude, that's sooo funny. Then I realised it was you. +1 just for be obscure.
Daniel Paull
A: 

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

Kris Kumler
Ironically, anyone who claims "C++ Expert" on a resume/CV is likely to get a harder C++ challenge in the interview!
Tom
+3  A: 

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."

Jonathan Leffler
+2  A: 

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.

Jim In Texas
I think that you'll find the http://www.sgi.com/tech/stl/basic_string.html to be very nice too; however, CString has lots of casting overrides for easy conversion to all of the legacy Windows API string formats out there.
Glenn
A: 

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.

Glenn
This is nonsense, even Herb Sutter can't solve all the problems, he needs to ask someone else. So you won't call him as expert?
Comptrol
I'm inclined to dis agree as well, bad logic is bad logic no matter the language it is written in and I'm sure people can write things in C++ that would make Bjarne Stroustrup come over and ask them what it is doing.
Rob
Huh? No. An expert isn't someone who can figure out someone else's brain dead code. By that definition, no one on Earth is an expert. An expert is someone who knows all the C++ language features and common (e.g. STL) libraries.
Glenn
+1  A: 

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.

Martin Beckett
C++ is a superset of C. The C syntax is much simpler than C++'s, also the standard library is a lot smaller - both by several orders of magnitude.
mstrobl
You can KNOW the C stdlib and where to use it and the pitfalls. I don't think you can have the same level of knowledge with the huge c++ stdlib + boost.
Martin Beckett
+1  A: 

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.

Mark Beckwith
+3  A: 

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.

jmucchiello
+1 - boost itself is only a useful tool, not useful as a metric of language expertise. Understanding (possibly even predicting) the design decisions made in any piece of software is where its at.
Tom
The link is not working.
Philippe A.
Try this one: http://gagne.homedns.org/~tgagne/contrib/unskilled.html
jmucchiello
A: 

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

OscarRyz
A: 

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

Daemin
So there's no love for Steve Yegge then, weird.
Daemin
+1  A: 

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

Martin York
+29  A: 

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".

paercebal
Wow. +1 from me :)
the_drow
+2  A: 

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.

Mike
+4  A: 

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?

Shane MacLaughlin
Fluency != Expertise, and C++ != Software Development (though they're all closely related). Heck, I know plenty of people who I wouldn't consider to be experts in their own native language (myself included). We all just know enough to get by, and get a decent score in Scrabble.
Tom
+2  A: 

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. ;-)

EricSchaefer
A: 

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.

Freeseif