A good way to learn (if you already know how to program and want to improve your level) is to browse source codes from others...
For example, if one want to learn how to program a game engine, and already know C++, a good start is to download Irrlicht/OGRE sources and try to understand them... most sources has nice comments and if you search on documentation (or internet) the things that you don't understand, you can easily "understand" how the whole engine works. (at least the core part, or the parts that you think you need (or just want) to know)
A lot of people consult other sources while writing their similar ones, most of them publish after the release something like "based on x".
A classic example (at least for me) is to write a calculator... when i want to learn a new language i just search for someone who made and opensource (preferably command-only) calculator and looking his source i write my own (generally better

*) calculator. *-It's generally better because i also implement input/output functions in every calculator i make (save to file, read from file, etc.), because most of them don't have such features and it's an important part.
This is how i learned Perl (basic-medium level) in one week. If you have some programming background, it's easy to learn other languages this way, and the more languages you know the more easy is to learn the other. Of course if you plan to go pro you need advanced knowledge, so it's not very recommended to learn this way. The best way is to take a good advanced book.
By the way, i think the free tutorials published on C++ specialized websites are pretty nice to learn.