Re: What's your C++ skill level?
* Dave Harris:
phlip2005@gmail.com (Phlip) wrote (abridged):
9 - wrote a book with leading-edge techniques in it
8 - published a used library with leading-edge techniques
(or wrote a generic tutorial with standard techniques in it)
7 - have invented leading-edge techniques & blogged about them
I don't think the difference between those has much to do with C++
expertise. Non-experts can write books.
True, non-experts can write books, but they can't write /good/ books. Now, I
have only a very few C++ books, namely Andrei's "Modern C++ Design" and various
editions of Bjarne's "The C++ Programming Language" (1st and 2nd edition in
paperback, and 3rd edition in illegal downloaded PDF -- sorry Bjarne, but I did
buy it, but then it was stolen/not returned, and I don't buy it twice! <g>). And
having written various compendiums and a C++ tutorial (the only one referenced
from our FAQ), and having tried for years to write a C++ book for novices, I can
attest that writing a good C++ book is really, really hard, extremely hard.
One hurdle is of course just the C++ understanding. That isn't a problem for me
-- but there is a vast difference between, on the hand, describing current
knowledge and, on the other hand, inventing new techniques and combining old
techniques in novel, useful ways, as Andrei did. I could never have written
Andrei's MCCPD book; it's a masterpiece. And when I helped review Andrei's old
Mojo article, it was more like Andrei helping me than the other way, which is a
sign of an Expert: you may feel that you're talking as equals, but later you
discover that you learned a lot and some beliefs were adjusted. :-) Still,
although Andrei is indisputably a C++ expert and a Very Smart Guy, I have later
answered one or two of his questions here, so "expert" does not mean "know all":
I submit that a true expert is one who's not afraid to ask about stuff.
Another hurdle is the pedagogical, and I find that much much worse than the
technical, which is trivial in comparision. For ideally everything used should
already have been explained. Some forward references and unexplained cookbook
"for now, just do this..." are unavoidable in any programming introduction. But
with C++ it all hangs together in so many ways that it's a real nightmare. When
you get down to it and try to describe things exactly -- which is what I've
been trying to -- you discover that even the tiniest little piece of the
language connects with and depends on much everything else. And so our Holy
Standard is also that way. It's a spaghetti mess of cross-references. ;-)
6 - have architected entire successful C++ applications
5 - have unit-tested, maintained, and debugged C++ apps
These seem to be more about being an expert programmer than an expert in
C++. We can use C++ successfully while only knowing a small sub-set of
it.
4 - know how to factually avoid undefined behavior
3 - obey a sane subset so narrow most of my behavior is defined!
A lot of emphasis on undefined behaviour. There's more to C++ than that.
My own hierarchy would be more oriented around language features and
techniques.
2-3 At the bottom end are people who mostly stick within the
C/C++ subset, perhaps using new/delete and std::vector<>.
4-5 Next are the ones who know when to use references in their
own code, and who can implement classes with virtual functions.
They know the std collection classes quite well.
6-7 Next comes some facility writing their own templates. They
can use std::algorithms, but may choose not to. They can use
local classes and predicates and pointers to member functions.
They may be considered experts by their colleagues. They may
have some awareness of the dark corners of C++, in which case
they are probably aware of how much they don't know.
8-9 Next comes the people who understand books like "Modern C++
Design", and are comfortable with notions like typelists.
They know what "SFINAE" means and why it matters, and why
perfect forwarding has been problematic. They probably follow
the evolution of the C++ standard.
10 Finally we have the ones who can contribute to the state of
the art (whether through books or otherwise). Who can make
worthwhile criticisms or suggestions for proposals such as
r-value references or lambdas or concepts.
I like this scale. Probably because I don't do badly on this scale. <g>
Another reason is that I consider you a person with good insight: before my
latest disk crash my "C++ documentation" folder contained, among other things,
one Usenet article by you.
Good insight may be more important than pure C++ expertise...
Cheers,
- Alf
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]