"Michael Strorm" <> wrote in message
news: m...
> Hi,
> I'm in the middle of "teaching" myself C++. Having skimmed some of
> the "Teach Yourself C++ in 21 Days" book, I got a feel for the
> language, at least. Then I bought "The C++ Programming Language"
> because it was on offer, and I'd have ended up buying it at some stage
> anyway.
Yes, as your knowledge grows, I think you'll find this
book quite valuable. Make sure it's the 3rd or 'special'
edition though. Previous additions are essentially
obsolete.
Another very good book, especially for those who have
previous experience with other languages, is Koenig
& Moo's "Accelerated C++".
www.acceleratedcpp.com
> Skimmed some of that, but there's too much detail (for now)
Yes, it's info

age ratio is quite dense. I also needed
to supplement it with other 'lighter' material when learning
C++.
>and I
> know I won't take it in if I don't get some practice in actually
> *writing* programs in C++.
Yes, good that you realize that. Learn by doing.
> I'm getting the very strong impression that
> (much more so than in C) learning to write "proper" C++ programs can't
> just be done through short question exercises.
Short exercises are good start, especially to prove to
yourself you understand a particular concept(s).
> To get to the point, I'm wanting to start a moderately-sized
> project that would take a week (working full time on it, which I won't
> be
)
Don't be too optimistic with your time estimates. Don't
worry if something takes far longer than you expect. Even
for professionals, one of the most difficult tasks is making
(and meeting!) time estimates. Only practice and experience
will help with this. And having built up a 'code base' of
useful functions helps a lot toward 'speed of development'.
The concept of code reuse. When writing a function, keep
in mind "can this be 'generalized' to be useful in other
contexts?" This won't always be the case, but often is,
given a bit of forethought before deciding e.g. what
the parameters should be, if any. E.g. if you write a
function to output the contents of an object, you could
'hard code' it to use 'cout', or you could defined a
parameter of type std:

stream&, in which case the
function could operate upon a file (std:

fstream) as
well as on 'cout'.
>to do reasonably, cover a decent subset of the language, be
> interesting to do,
Only you can know what you find 'interesting'. E.g. many
are eager to write 'cool graphics games' etc. (which btw
is a far too advanced topic when learning the language,
especially since you'll need platform-specific 'extensions'
and special purpose libraries). E.g. Games don't interest
me at all, graphical or otherwise -- I have more fun with
databases and text manipulation. But that's just me.
> and workable under (say) gcc on Linux (without too
> much nonstandard code).
When learning, you should stay away from all nonstandard
(e.g. platform-specific) constructs. Learn the language
first. Then it matters not what your platform is (C++
is a 'platform-independent' language.)
>It'd also be interesting to get some practice
> in software design in there.
Design isn't really topical here, but we can help you
organize your code to best take advantage of the
language's power, prevent common errors etc. Software
design itself would be better discussed in groups such
as comp.programming and/or comp.algorithms, etc.
Often specific algorithm categories have their own
groups, e.g. cryptography.
> So, I'd be interested to get some suggestions, because I feel like
> doing *something* with all this knowledge
Yes, it is very satisfying to actually build something
useful and/or interesting with your new found skills.
>(and more importantly,
> finding out what I don't know well). Thanks!
The first 'nontrivial' thing I did with C++ (after
many small exercises) was a small 'contacts' database with
e.g. names, addresses, phone numbers, etc. That's because
I'm interested in databases, and that's an area where I
already have skill with other languages, and have the most
experience.
Hint: Use the standard library. It is *very* powerful,
and lets you start applying 'code reuse' immediately.
Spend some time learning about containers, iterators,
and the algorithms declared by header <algorithm>
which uses them. *Very* powerful and flexible things can
be done with them. Which reminds me: A very good book to have is
Josuttis' "The C++ Standard Library"
www.josuttis.com/libbook
HTH,
-Mike