If you've got in-line assembly in your C++ compiler, that is a really good way to learn, because you can learn piecewise: you can do anything you don't know yet in C, and do the bits you want in assembler. For most people that's probably as far as they'll ever go in assembler anyway, because it's a bit slower to write than a high level language: you probably only want to put into assembler things where you need complete control over what's going on, or where you think you need, and can get, a significant increase in speed. Example: in a run-jump platform type game you need to draw things on the screen very fast, but they are often of known sizes arranged in a grid. It could just be that you can produce a faster picture drawer than anything in your libraries etc., not because you are a better programmer, but because you know exactly what you want to do, and don't have to write general code that will work on all sizes of picture...