O'Reilly is the publisher of those (see bottom left of the cover ).
And yes, although not all of their books are phenomenal, they have a
pretty good batting average, and some of their works can definitely
be considered must-reads.
It's still very much used, and will be for many years (as is C itself).
Especially when it comes to high-performance software (CAD, game engines,
OS components), C++ will be very prevalent for years to come (or C,
depending on the project).
However, the "everything-must-be-object-oriented" fad from the 90's has
indeed died down somewhat from what I can tell, and with computers being
as fast as they are today and programmer time being as expensive as it is,
languages which are maybe not quite as fast but much easier to work with
are pushing into some of C/C++'s domains (Python, Ruby, Perl, Java, and
in the coming years probably also some more unusual stuff like D, Haskell
or maybe even Lisp and languages related to it).
As for the OP's question: I've never worked with C#, but it's probably
not a too bad place to start. It is, however, Windows dependant, and
although most desktop systems use Windows, there are many programming
projects which rely on other platforms. Just something to keep in mind.
But in general which language you learn first doesn't really matter
all that much IME. Once you've learnt one, it's not that difficult
to learn others, at least as long as they're somewhat similar in
how they function (it might be a bit trickier going from C to functional
programming with, say, Haskell, but that's less about the language
and more about the programming paradigm).
Agreed, and omg I <3 Haskell... lol
I'd highly suggest learning C and then C++, that way you will start off learning what benefits you will get from an imperative language, and then expanding on it by learning the Object Oriented side of things with C++...
There is a really large benefit of learning C and then C++ behind it: C code is valid C++ code.
So since you will have already learned C, you know the basics of C++... so from there on... you can think of C++ as an expansion of C...
I love C++ because it is everything C is and more... it has all of the benefits of C and all of the benefits of being an Object Oriented Language, and doesn't fall short of Java because it doesn't have garbage collection (thank you destructors...)
With that said, there can be some kinda tricky things to wrap your brain around when learning C++, however, because it would be your first or second language it may not be all that confusing because you wouldn't really have a point of reference as to why certain things work the way they do in C++...
Also, I'm a very large supporter of the explicitness of actual pointers in C++ and C and not just having everything be a reference as in Java...
However, with all of that said... in the words of Peter Parker... "With great power comes great responsibility..."
C and C++ have no safety net and you can really break your programs if you aren't careful.
While struggling without a safety net and becoming familiar with the language at first may be rough... it will be extremely beneficial because it will make you very very comfortable with debugging in the future if you decide to go on and learn other languages (mainly because other languages have way better error reporting and error handling than C and C++)
So yeah, I suggest C then C++...
Hope this helps...
Edit: also, the books published by O'Reilley are fantastic...