Unlike what you seem to think, the language isn't terribly important.
Since we use languages to express the solutions we invent, they are part of the domain, but a skilled programmer can write the same solution in pretty much any language. Java, Python, C, C#, C++, it's all imperative languages, which are better at some areas and worse at other areas. Many programmers also know several languages.
Companies like to have people all speak the same language, which is why they hire based on computer language. Also, some languages work well in some domains, so the kind of job also defines the language that you use.
The really important part of being a programmer is however is being able to come up with a solution for the problem at hand. A solution that works properly, scales well, and is understandable. Good performance is also useful, although I rank that below scaling (but my problem domain is not gaming).
Such solutions need lots of knowledge about CS, data structures, algorithms, and their properties (understand why bubble sort does not scale, know the strong and weak points of a hash table, etc). If you want to get the last X% performance too, add knowledge about CPUs. At some point, it starts to pay to organize your data around CPU limitations. (But keep in mind this is often about X%, rather than the much larger O(n**3) versus O(n*log n) kind of decisions that you deal with in scaling.)
You'll also need to have creativity to solve the problem (else the problem would not exist at all, someone would have solved it during a coffee break). In my experience, creativity often comes from understanding the problem deeply, and understanding CS, and then fold and twist the problem, and fold and twist the used data structures and used algorithms, such that it all fits, and no bits stick out (well, at least no bits that are important for the desired properties of the solution).
This is where practical experience shines. Grab every problem you find, and try to fold and twist it into a computer. See it run or fail to run. Try to change it. Read code written by yourself, and find points of improvements. Read code written by others, or let others read your code (which is very scary at first, but oh so useful). Don't be afraid to look into "weird" subjects, you never know what you find, and maybe in 10 years from now, you'll connect that knowledge with a problem and find that one WOOW solution. (Although, in my experience, you never consider it that way, as the solution just is the logical course of action to you, given the knowledge that you have.)
I think you can combine the above with programming games. Games are filled with fun little puzzles that you can solve in many different ways. Try to solve them, read what others have found in dealing with these problems, compare both, improve on it.
EDIT: Oh, and last but not least, have fun. Being in good spirits helps making creative jumps!