Wanting to become a hacker is such an archaic idea. That’s like saying you want to become a guru. If you want a real job, you should strive to become is a software engineer.
Mere programming skill or hacking abilities does not make you a software engineer. Indeed, most programmers, especially self-taught ones, will never even comprehend what
software engineering is. You cannot comprehend it at this stage in you learning, but you should realize that there is a larger field beyond mere programming and hacking,
and that is what you should want to learn about.
C++ is probably the best language to learn. Assembly is also great for understanding how the program internals work ( registers, stack, pointers, function calls, etc ), and you’ll
at least want to study it a little at some point. I would recommend doing c++ with inline assembly for learning purposes. Many c++ compilers also let you look at the generated assembly of the c++ code, so that is easy way to learn about assembly too. As for compilers I would recommend Visual C++ Express. Once you’ve learned c++ and assembly, programming in other languages is easy. This is mainly because you really have to do engineering in C++ to be effective, and if you can engineer in that language, you can engineer in any language (and systems spanning multiple languages, platforms, and hardware interfaces). Software engineering is something you cannot learn overnight though, it takes years.