Becoming a C++ guru

S

Singulus

Hello all,
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So, how
can I (we, in fact the forum can benefit from the discussion, this is
the point here) become C++ gurus?
I have 5 years of working experience with C/C++, I know that this can
be very ambiguous thing, but anyway...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):

- Read and study the book "The C++ Standard Library: A Tutorial and
Reference" by Nicolai M. Josuttis. In this case I mean exercising any
function of every class of the C++ Standard Library, like some sort of
unit tests, in order to become proficient and knowledgeable what can
be done with the library, how, the common idioms, etc. This includes
the small (and some not so small) programs using the specific classes
and/or part of the library focused to increase understanding.

- After reading the fore-mentioned book I plan to begin to read the
book "Exceptional C++: 47 Engineering Puzzles, Programming Problems,
and Solutions" by Herb Sutter, trying to solve thoroughly all
questions and problems, let's say one per day or so, to keep up my
form and constantly improving. After that naturally comes the other
two book by Sutter, "More Exceptional C++" and "Exceptional C++ Style:
40 New Engineering Puzzles, Programming Problems, and Solutions".

- There are numerous books about C++ that comes to mind in order I
want to improve myself (after reading the fore-mentioned already
ones), but here I don't know the exact order of reading/exercising the
material in the books. These books are:

- "Large-Scale C++ Software Design" by John Lakos

- "C++ Common Knowledge: Essential Intermediate Programming" by
Stephen C. Dewhurst

- "C++ Gotchas: Avoiding Common Problems in Coding and Design" by
Stephen C. Dewhurst

- "Imperfect C++: Practical Solutions for Real-Life Programming" by
Matthew Wilson

- "C++ Templates: The Complete Guide" by David Vandevoorde

- "The C++ Programming Language" by Bjarne Stroustrup (I've read this
one, but not with the my current understanding of the things around
and about C++, so I think the re-read will be beneficial).

- "Effective STL: 50 Specific Ways to Improve Your Use of the
Standard Template Library" by Scott Meyers

- Re-read the "Effective C++" also by Scott Meyers

- "Modern C++ Design: Generic Programming and Design Patterns
Applied" by Andrei Alexandrescu

- "C++ Template Metaprogramming: Concepts, Tools, and Techniques from
Boost and Beyond" - David Abrahams and Aleksey Gurtovoy

- "Beyond the C++ Standard Library: An Introduction to Boost" by
Björn Karlsson

- "Inside the C++ Object Model" by Stanley B. Lippman

- "The Design and Evolution of C++" by Bjarne Stroustrup

This is vast amount of books, no doubt about that, and I'm thinking
whether is appropriate and/or possible to get and instill that
knowledge in myself. It's not impossible, I think I'm determined to do
that because I will feel better for myself, that's the most important
thing after all.

All suggestions for books, reordering the list of the books, practical
tips, and whatever concerning <Becoming C++ guru> "problem" are
appreciated.
 
Z

Zeppe

Singulus said:
Hello all,
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So, how
can I (we, in fact the forum can benefit from the discussion, this is
the point here) become C++ gurus?
I have 5 years of working experience with C/C++, I know that this can
be very ambiguous thing, but anyway...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):

Just my two cents (I have just one and an half year of experience in
C++, anyway): I would forget about reading the Josuttis book, and more
in general any STL book, from the beginning to the end. Thios kind of
books are more a refernece in my opinion, and you should be and become
even more proficient with the STL through the experience: there is no
point in reading about tons of clesses that you are not going to use.
Of course, there are conceptually relevant things in the STL, like for
example smart pointers, exceptions, function objects, binders, traits,
but you should focus on the concept instead of the specific STL
implementation that is explained and discussed in the STL books.

So, that what just to say that the most important books should be:

* stroustrup: if you read this book *carefully* you will end up with a
deep C++ knowledge (i've marked the word carefully, because the book is
quite difficult to read, in the sense that there is a lot of
information, but in my opinion, and not only in my opinion, that
information is often not given the amount of discussion it should
deserve, even if the book is 800 pages long or so.

* Exceptional and more exceptional C++ to address particularly
error-prone common situations and topics.

* a good book on template metaprogramming (maybe alexandrescu will do
the job well).

The others will follow. Of course, it's obvious to say that a good C++
programmer should be at first a good software engineer, otherwise you
will be able to solve very complicated template metaprogramming puzzles
but without being able to apply them properly to an accurate software
design, so it's important to focus the attention on the design as well
(and patterns, and so on).

And, of course, programming alot and applying what you are learning :p

This is what I would do.

Regards,

Zeppe
 
V

Victor Bazarov

Zeppe said:
Singulus said:
[..]So,
how can I (we, in fact the forum can benefit from the discussion,
this is the point here) become C++ gurus?
[..]

Just my two cents (I have just one and an half year of experience in
C++, anyway): [.. useful information redacted ..]

One cannot become a guru by setting and achieving the goal of becoming
a guru. Live your [professional] life, do your best, and if others
see you as a source of wisdom, they might [eventually] call you "guru".
By that time you've most likely transcended the desire of becoming
a guru. You just share what you know in some form acceptable for those
who want to learn.

Just my two cents...

V
 
S

Stuart Redmann

Singulus said:
Hello all,
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So, how
can I (we, in fact the forum can benefit from the discussion, this is
the point here) become C++ gurus?
I have 5 years of working experience with C/C++, I know that this can
be very ambiguous thing, but anyway...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):

[snipped awfully long list of literature]

Just out of interest: Why do you want to become a C++ guru? Mastering the C++
programming language with all its features may be a good thing to boast with at
some college party, but it won't get you a job. Real life projects seldom use
all the fancy stuff C++ is offering for various reasons (one of them is that
often not all members of a programming team have the same amount of experience
with C++, so you'll have to settle for the least common denominator). Becoming a
C++ guru seems like a futile task to me as any employer will be more interested
in whether you are able to solve some real-life problem with any programming
language instead of whether you know C++ pretty well. I have seen a lot of
projects messing with templates and whatnot that were given up because they were
too bad documented and too confusing for following programmers. If you plan to
get paid for your efforts, I'd rather advise you to read about software
management and to widen you horizont by learning other languages. Only if you're
getting to a point where you spend too much time with some standard task you
should think about which programming technique would be more suitable to solve
the problem at hand.

Regards,
Stuart
 
Z

Zeppe

Victor said:
One cannot become a guru by setting and achieving the goal of becoming
a guru. Live your [professional] life, do your best, and if others
see you as a source of wisdom, they might [eventually] call you "guru".
By that time you've most likely transcended the desire of becoming
a guru. You just share what you know in some form acceptable for those
who want to learn.

I interpreted the question more as something like: "how can I
effectively improve my C++ skills" (given that he's a programmer).
Anyway, I agree with you, that "wanna-be-a-guru" thing it's kinda funny
(and naive) idea ;)

Zeppe
 
V

Victor Bazarov

Zeppe said:
Victor said:
One cannot become a guru by setting and achieving the goal of
becoming a guru. Live your [professional] life, do your best, and
if others see you as a source of wisdom, they might [eventually]
call you "guru". By that time you've most likely transcended the
desire of becoming
a guru. You just share what you know in some form acceptable for
those who want to learn.

I interpreted the question more as something like: "how can I
effectively improve my C++ skills" (given that he's a programmer).

And you answered it well. I just added my two cents /in case/ the
OP did want to actually become a guru.
Anyway, I agree with you, that "wanna-be-a-guru" thing it's kinda
funny (and naive) idea ;)

I think that we all at some point want to be somebody or something
we admire or respect. Through that we develop the desire to study
the subject, the field, the people around us, in order to improve
ourselves. And through those studies we outgrow the desire to be
anything in particular and become somebody/something different from
anybody/anything else. That's when one may be recognized as "guru"
if what one has is useful not just for oneself, but for others as
well...

V
 
V

Victor Bazarov

Stuart said:
Singulus said:
Hello all,
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So,
how can I (we, in fact the forum can benefit from the discussion,
this is the point here) become C++ gurus?
I have 5 years of working experience with C/C++, I know that this can
be very ambiguous thing, but anyway...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):

[snipped awfully long list of literature]

Just out of interest: Why do you want to become a C++ guru? Mastering
the C++ programming language with all its features may be a good
thing to boast with at some college party, but it won't get you a
job. Real life projects seldom use all the fancy stuff C++ is
offering for various reasons (one of them is that often not all
members of a programming team have the same amount of experience with
C++, so you'll have to settle for the least common denominator).
Becoming a C++ guru seems like a futile task to me as any employer
will be more interested in whether you are able to solve some
real-life problem with any programming language instead of whether
you know C++ pretty well. I have seen a lot of projects messing with
templates and whatnot that were given up because they were too bad
documented and too confusing for following programmers. If you plan
to get paid for your efforts, I'd rather advise you to read about
software management and to widen you horizont by learning other
languages. Only if you're getting to a point where you spend too much
time with some standard task you should think about which programming
technique would be more suitable to solve the problem at hand.

Oversimplification or substitution of goals doesn't necessarily serve
a good purpose. Becoming a guru in something is never about material
compensation. "Guruness" is not a set of skills or ability to work
long hours or a way to get ahead in life (whatever that means). It
is a state of mind, a way of life. Being a guru and earning a decent
living are orthogonal. They are not the same, but neither they are
opposites.

Nobody becomes a guru as a task. Nobody works their whole life in
pursuit of a "lifetime achievement award". Such award, prize, simply
finds one at some point, as a recognition of one's peers, and *not*
as a promised pay-off. Having such award as a goal will most likely
mean a huge disappontment later in life...

V
 
G

Greg Comeau

...How can I (we, in fact the forum can benefit from the discussion,
this is the point here) become C++ gurus?
...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):

- Read and study the book "The C++ Standard Library: A Tutorial and
Reference" by Nicolai M. Josuttis. In this case I mean exercising any
function of every class of the C++ Standard Library, like some sort of
unit tests, in order to become proficient and knowledgeable what can
be done with the library, how, the common idioms, etc. This includes
the small (and some not so small) programs using the specific classes
and/or part of the library focused to increase understanding.

... "Exceptional C++: 47 Engineering Puzzles, Programming Problems,
and Solutions" by Herb Sutter, trying to solve thoroughly all
questions and problems, let's say one per day or so, to keep up my
form and constantly improving. After that naturally comes the other
two book by Sutter, "More Exceptional C++" and "Exceptional C++ Style:
40 New Engineering Puzzles, Programming Problems, and Solutions".

- There are numerous books about C++ that comes to mind in order I
want to improve myself ....

This is vast amount of books, no doubt about that, and I'm thinking
whether is appropriate and/or possible to get and instill that
knowledge in myself. It's not impossible, I think I'm determined to do
that because I will feel better for myself, that's the most important
thing after all.
...

Re your raw question, I would probably bubble up The C++ Programming
Language and C++ Templates. But then, it depends upon what your
goals are.

It's unclear what you're trying to accomplish, so this may be
somewhat in left field, but I'll step back and offer it anyway
even if it does nto apply to you. And this is to say that
"Becoming a guru" is rather fuzzy. And IMO is probably not something
to make a goal in and of itself. Personally, I wouldn't.

Also, you are setting goals which are too C++ centric. I think you
are also probably getting into a forest vs trees situation.

This is not to say you should not read all those books, and that
you should not focus on C++, but there is more out there than
just that, despite it being a handful already.

Circa 2001, I was the PTA President of my daughter's school.
On one occasion the principal and I went to here some talks
about something. One speaker was a previous NY City Teacher of the
Year. He went on and one about how this and that were important.
But then mid way throough his talk, he completely took a turn
and began discussing how everything he just said didn't matter
if the kids didn't know how to use the stuff they were learning,
didn't have time for play, didn't learn it as play, couldn't solve
real problems, were taught as zombies, etc. He was exactly right.

So balance it out. It can be an ambiguous thing, but it's also
more than that. And remember to enjoy yourself. We do need
to structure thing, but also, don't hesitate to let nature
take its course. Myself, I've learned as much unexpectedly
as I've planned for. Let all the possibilities happen.
And stay broadminded even on specific topics.
 
R

Roland Pibinger

Just out of interest: Why do you want to become a C++ guru? Mastering the C++
programming language with all its features may be a good thing to boast with at
some college party, but it won't get you a job. Real life projects seldom use
all the fancy stuff C++ is offering for various reasons (one of them is that
often not all members of a programming team have the same amount of experience
with C++, so you'll have to settle for the least common denominator). Becoming a
C++ guru seems like a futile task to me as any employer will be more interested
in whether you are able to solve some real-life problem with any programming
language instead of whether you know C++ pretty well. I have seen a lot of
projects messing with templates and whatnot that were given up because they were
too bad documented and too confusing for following programmers. If you plan to
get paid for your efforts, I'd rather advise you to read about software
management and to widen you horizont by learning other languages. Only if you're
getting to a point where you spend too much time with some standard task you
should think about which programming technique would be more suitable to solve
the problem at hand.

To the point!
 
A

Andre Kostur

Singulus said:
Hello all,
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So,
how can I (we, in fact the forum can benefit from the discussion,
this is the point here) become C++ gurus?
I have 5 years of working experience with C/C++, I know that this can
be very ambiguous thing, but anyway...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):

[snipped awfully long list of literature]

Just out of interest: Why do you want to become a C++ guru? Mastering
the C++ programming language with all its features may be a good thing
to boast with at some college party, but it won't get you a job. Real
life projects seldom use all the fancy stuff C++ is offering for
various reasons (one of them is that often not all members of a
programming team have the same amount of experience with C++, so
you'll have to settle for the least common denominator). Becoming a

No... Where I am, I'm the C++ Guru. I develop using newer/more advanced
techniques, and then use that development as a showcase of how the
technique makes things easier to maintain/easier to develop/etc. Then the
less experienced see this benefit and become encouraged to learn the new
technique so they can then use it in their own tasks. (And in one case,
someone took my development in a completely different direction than I had
intended it to, and the knowledge transfer went the other direction. My
phrase was "That's not supposed to be used like that! But I like it. I'm
going to have to incorporate that into my own work....").
 
G

Greg Comeau

Stuart said:
Singulus said:
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So,
how can I (we, in fact the forum can benefit from the discussion,
this is the point here) become C++ gurus?
I have 5 years of working experience with C/C++, I know that this can
be very ambiguous thing, but anyway...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):

[snipped awfully long list of literature]

Just out of interest: Why do you want to become a C++ guru? Mastering
the C++ programming language with all its features may be a good
thing to boast with at some college party, but it won't get you a
job. Real life projects seldom use all the fancy stuff C++ is
offering for various reasons (one of them is that often not all
members of a programming team have the same amount of experience with
C++, so you'll have to settle for the least common denominator).
Becoming a C++ guru seems like a futile task to me as any employer
will be more interested in whether you are able to solve some
real-life problem with any programming language instead of whether
you know C++ pretty well. I have seen a lot of projects messing with
templates and whatnot that were given up because they were too bad
documented and too confusing for following programmers. If you plan
to get paid for your efforts, I'd rather advise you to read about
software management and to widen you horizont by learning other
languages. Only if you're getting to a point where you spend too much
time with some standard task you should think about which programming
technique would be more suitable to solve the problem at hand.

Oversimplification or substitution of goals doesn't necessarily serve
a good purpose. Becoming a guru in something is never about material
compensation. "Guruness" is not a set of skills or ability to work
long hours or a way to get ahead in life (whatever that means). It
is a state of mind, a way of life. Being a guru and earning a decent
living are orthogonal. They are not the same, but neither they are
opposites.

Nobody becomes a guru as a task. Nobody works their whole life in
pursuit of a "lifetime achievement award". Such award, prize, simply
finds one at some point, as a recognition of one's peers, and *not*
as a promised pay-off. Having such award as a goal will most likely
mean a huge disappontment later in life...

And usually sooner. And then again later.
 
T

Thomas Matthews

Singulus said:
Hello all,
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So, how
can I (we, in fact the forum can benefit from the discussion, this is
the point here) become C++ gurus?
I have 5 years of working experience with C/C++, I know that this can
be very ambiguous thing, but anyway...I've come to the point where I
want to structure and organize my further learning in C/C++ in a new
way. So here is my plan (draft):
[snip]

My suggestion: Create a project for yourself and implement it.

Also spend time on this newsgroup answering questions. If your
answer is incorrect, other more knowlegeable people will
correct you.

These are some of the methods that I became a "guru" in the language.
I am not a full guru, as there are people in this newsgroup with
more knowledge than I. ;-)

Once you know the language well, you will need to know techniques
of programming, such as design patterns, containers, functors,
and other paradigms.

--
Thomas Matthews

C++ newsgroup welcome message:
http://www.slack.net/~shiva/welcome.txt
C++ Faq: http://www.parashift.com/c++-faq-lite
C Faq: http://www.eskimo.com/~scs/c-faq/top.html
alt.comp.lang.learn.c-c++ faq:
http://www.comeaucomputing.com/learn/faq/
Other sites:
http://www.josuttis.com -- C++ STL Library book
http://www.sgi.com/tech/stl -- Standard Template Library
 
J

James Kanze

[snipped awfully long list of literature]
Just out of interest: Why do you want to become a C++ guru?
Mastering the C++ programming language with all its features
may be a good thing to boast with at some college party, but
it won't get you a job.

It depends. C++ has a reputation for having a lot of traps, and
many companies do like to have a C++ "guru" on hand.
Real life projects seldom use all the fancy stuff C++ is
offering for various reasons (one of them is that often not
all members of a programming team have the same amount of
experience with C++, so you'll have to settle for the least
common denominator).

Real life projects are implemented by teams, and it's frequent
for the company to try and have one "guru" on the team, just in
case, and to consult about things like coding guidelines, or the
likelyhood that something they want to try will work with future
compilers. Also, having a guru present in code review, to
suggest better ways of using the language, tends to raise
everyone's level.
Becoming a C++ guru seems like a futile task to me as any
employer will be more interested in whether you are able to
solve some real-life problem with any programming language
instead of whether you know C++ pretty well.

Just being a guru isn't enough. You have to know how to program
as well. On the other hand, no one person can know everything.
Our banking experts come to me for help with C++, Unix or
software engineering and design; I go to them if I have problems
with what the program should actually do (i.e. what makes sense
from the domain point of view).
I have seen a lot of projects messing with templates and
whatnot that were given up because they were too bad
documented and too confusing for following programmers.

Being a guru entails knowing when to use what feature. A
template that is instantiated just once is a programming error.
Confusing and undocumented code is an even worse programming
error. Someone who makes those errors is NOT a guru, just a
show-off who knows how to spout the latest buzzwords.
 
D

dave_mikesell

Hello all,
I've searched for similar threads, I've found some bit of useful info
here and there, but nevertheless I want to post my questions...So, how
can I (we, in fact the forum can benefit from the discussion, this is
the point here) become C++ gurus?

Come to my house at 6:00 a.m. You'll begin with painting my fence,
and then move on to the deck, washing and waxing all my cars, etc.

Wait, that's how you learn Karate.
 
D

dave_mikesell

Just out of interest: Why do you want to become a C++ guru? Mastering the C++
programming language with all its features may be a good thing to boast with at
some college party, but it won't get you a job. Real life projects seldom use
all the fancy stuff C++ is offering for various reasons (one of them is that
often not all members of a programming team have the same amount of experience
with C++, so you'll have to settle for the least common denominator). Becoming a
C++ guru seems like a futile task to me as any employer will be more interested
in whether you are able to solve some real-life problem with any programming
language

Moreso frameworks/libraries/technologies. I encourage the OP to check
out Dice.com job listings. Job requirements don't enumerate language
features, but rather experience in MFC, DCOM, TCP/IP, multi-threaded
programming, XML, IPC, etc. Ditto with Java, where they want XML,
Struts, Hibernate, Spring, etc.
 
M

marius lazer

"Guru"-ness is relative. Become the best in your team (problem solving
design and language techniques whatever the language), share your
knowledge, help your teammates grow and they'll call you "guru".

My 2 cents,
Marius
 
D

Diego Martins

Moreso frameworks/libraries/technologies. I encourage the OP to check
out Dice.com job listings. Job requirements don't enumerate language
features, but rather experience in MFC, DCOM, TCP/IP, multi-threaded
programming, XML, IPC, etc. Ditto with Java, where they want XML,
Struts, Hibernate, Spring, etc.

argh
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top