First of all, increase your basic theoretical background in whatever you do not yet know.
Study the theory and write a few short examples.
Example basic theoretical background includes:
- Algorithms and Datastructures
- Software design (UML, design patterns, OOP)
- Operating Systems and Parallel Programming
Then, consider learning an additional language (for instance Java or C#).
- Studying additional languages helps better under the pros and cons of what ever language you are using and helps you learn best practices that you may not aware of.
Next choose a new domain (web programming, computer graphics, image processing, computer vision, data access, ...). Study the theory and write a few short examples.
Next create a large example, that encapsulated a multi-layered application, handling data access, UI and a specific domain you have chosen. Put emphasis on the architecture of the application (make sure its parts are as loosely coupled as possible).
Hopefully, you will learn how to learn new approaches and technologies and integrate them with a good architecture.
Specifically for game programming I recommend choosing the following domains/technologies:
- Image Processing basics
- Any specific UI technology
- Computer Graphics basics
- Any specific graphics engine (e.g. DirectX, OpenGL, OGRE, ODG, Java3D, ...)
- Mechanical Physics basics
- Any specific physics engine (e.g. PhysX, ... )
- Any specific game engine (e.g. XNA, ...)
- Multi-threaded programming
- Distributed programming
How to learn:
- Read and run examples from CodeProject.
- Browse through a few books in a book/ebook library or store until you find a couple of books that your like (that match your reading style + cover the topics you want to read about).
- Read blogs.
- Try things and ask on StackOverlow when you get stuck.