I advise you to work on free software. When you release your source code, other developers can look at it and make (preferably constructive) remarks. Personally, I would read your source code for sure. I think that you can learn a lot from others.
Run some source code analysis tools like PMD and Findbugs on your own creation to evaluate its “quality”. Maybe you will learn a lot about your mistakes.
I advise you to learn how to use design patterns wisely in video games, especially the flyweight design pattern.
I advise you to improve your skill in algorithms, physics and maths. It depends on which kind of games you create. I’m very interested in spatial subdivisions.
I advise you to learn OpenGL, preferably with JOGL because I would like to find someone to help me to maintain the JOGL backend of LibGDX because Xerxes and me are already very busy. Moreover, it would give you a deeper understanding of the functioning of frameworks and libraries based on OpenGL.
Edit.: I think about state machines too and I advise you to look at the Fettle API.