>>18
Structure and Interpretation of Computer Programs. The C Programming Language (it's a little dense). If you get stuck, fall back and learn Python to build your skill (the docs on the website are good enough, although I've heard good things about a book called, "How to Think Like a Computer Scientist"), but don't use it a crutch.
At this point, the specific language isn't
quite what matters. It's what general lessons you get from the language. Scheme is used in SICP, which will teach you about high-level programming (and general software design). C and assembly thrown together will teach you about low-level programming.
The problem with C++ (ignoring all the crap you have to wade through to even start writing a program), is that you can write in C++ and learn very few valuable valuable lessons about programming; unless you stick to the C libraries (which makes using C++ pointless anyway), you can end up learning something that resembles a crappy version of Java, thanks to std::string, vector, etc. A lot (but not all) C++ tutorials are going to say "char*'s are icky, don't use them", which is probably true enough in the "real world", but you're not writing production code. You're trying to learn.
Start with SICP. Don't get discouraged if you stumble on your first try, just keep going.
Also, don't be lured by money unless you have to be during this process. Too many people start out with good intentions, and then just end up learning PHP or something because they're "pragmatic." If you have to do it to survive, there's no question. But most people do it because they're lazy.
After all of this, if you make a conscious engineering choice to use C++, then you can probably trust your judgment at that point. The key thing is to have a good foundation, and to remain mentally flexible enough so that you can make good choices later on.
Good luck.