First you have your pre-requisites:
Geometry, Algebra, and Trig are going to be VERY helpful to you. Make sure you have a
knowledge of your maths.
Then, make sure you have
knowledge of programming languages. Learn some C, C++, or other
object oriented language. Learn them thoroughly. Do plenty of examples of code that have absolutely nothing to do with gaming, but re-inforce
programming concepts and techniques. Focus on understanding pointers, and learn how to use the STL (standard template library).
Next I would recommend learning Design Patterns, such as factories and other stuff such as abstract data types and the difference between the different types of sorting algorithims and when to use each one. I suspect the sorts will be extremely useful to you in the long run.
Modern day platforms use message handlers and threads, so I suggest learning posix threads and windows threads as well as windows message handling. This can get a little tricky.
I'd follow this up with non-blocking protocols and concepts of asynchronous design.
You'll also want to explore OpenGL fundamentals and direct3d. These are advanced topics so make sure your maths are solid and your programming knowledge is well founded.
There are many books on 2D game design, which is much simpler than 3D, but again you'll also find that math helps you a lot in squeezing out performance.
There are several frameworks using Lua ithink (a scripting language) or some other scripting language i don't recall... torque or something, that lets you get your feet wet without having as much of the overhead of programming knowledge. Having that knowledge tho will benefit you greatly in the long wrong when trying to track down a problem.
I also recommend learning x86 assembler. You may never use it, but the lessons you learn from how memmory is accessed at the low level, how the cpu performs operations given it's limited instruction set that even the most verbose programming language is reduced down to, you will arm yourself with that extra edge in pre-optimizing your code.
For the non-programming side, I recommend playing board games and table top games like DnD and other RPG games and try to look at how the rules work and interact with each other. Try to find exploits for the rules, and try to understand the reasoning behind the rules. Why does monoply force you to go to jail after 3 sets of doubles? Perhaps it is to prevent arguments over percieved cheating or loaded dice.
Sitting in my bookshelf somewhere, i have a very
book, by La Mothe i think, that goes over the logistics side of game development. Design documents, asset management, marketing considerations, time management, etc.