Disclaimer: I am still at the stage of learning to properly design/code games. Feel free to take this post with a grain of salt if you'd like.
For starters, I believe before making games you should have a stronger understanding of the language you are working with.
For example, a firm grasp of pointers, classes, Virtual inheritance( and when / where it should be used) and so on. Without having a firm grasp of the language you are working with it will be hard to make even a simple game.
After that, I honestly believe you should start out small games while building your understanding of design techniques for coding.
A lot of concepts all come into making games, which it would be mind-blowing trying to learn all at once at the level of a 3D FPS.
As I said earlier, that I am still in the process of learning how to do it properly, so I suppose I will explain the route I am taking?
When I started heading for game Development, the first game I created was a simple visual Tic-Tac-Toe. It is pretty basic, and the amount of graphics related things that need to be drawn is minimal. It allows you to test your waters in basic AI, Graphics, and Input handling(Keyboard).
After that, I headed for pong which I had trouble getting the collision handling & response to be as I wanted it to be.
Anyways.. Start small, If you are unable to make simple games Like Tic-Tac-Toe / Pong / a Mario replica.. How do you imagine to be able to handle figuring out how to structure your code and make an FPS game?
You can find out more at http://www.gamedev.net/page/resources/_/technical/game-programming/your-first-step-to-game-development-starts-here-r2976