This simply makes no sense. C and C++ are two different languages that are used for different things, and good practice in one language isn’t good practice in the other (that is, beyond the fundamentals). Whether you learn C before C++ or C++ before C doesn’t make any difference to the kind of code you write in either language.
Don’t tell me that C++ is a ‘superset’ of C. That’s wrong both technically and philosophically: A lot of perfectly good, perfectly conformant C programs won’t compile if treated as C++, any more than a Pascal program would, and trying to solve programs the C way using C++ is akin to trying to fly a C-130 as if it were an F-16.
Ahem.
I’m apparently not going insane after all: The Elements of Programming Style, by Kernighan and Plauger. I don’t own this one, or if I do my memory is worse than usual, but it seems to be getting good reviews.
Once you know some C you may want to find Deep C secrets. A cracking read.
And if you’re going to be using Unix go see this Unix Hater’s Handbook. Now a free download. Seriously there’s a lot of good stuff in this book (well, sort of book. It’s a 3.5M pdf now). And you don’t actually have to hate Unix.
And I second (third?) Code Complete. The second edition has been considerably updated to cover OO languages. The book will probably only start to make sense after you’ve done a bit of programming but if you understand the principles from the start you could avoid all sorts of bad habits.
A lot of the stuff in this book is obsolete, even if it was correct at one time (and I’m not sure about that, either). Besides, he asked for computer books, not polemical screeds.
I’m of two minds regarding GEB. On the one hand, when I read it, I was definitely impressed. Now that I actually know the things Hofstadter’s talking about, I think it’s kinda cringeworthy. It’s definitely a mistake to walk away thinking you’re actually familiar with any of the topics he discusses.