Here's a link I find really... hmm... clarifying? I need to practice my english.
Anyway, here you go: http://makegames.tumblr.com/post/1136623767/finishing-a-game
I have studied game dev on my own for a long time now, and I had long plateaus where I did not advance on any direction whatsoever, until I found something specific to study and learn. It usually happened when I tried to do something that was way over my head or kept on doing what I already knew.
Today, I focus on finishing stuff, finishing my small projects, going from start to finish.
The simple fact that you go through the entire thing makes you learn a lot more than simply making two "half-games" or several prototypes; that's my experience.
So, design a game and try to program it. From here, there are only two possibilities:
1 - You'll be able to program it from ground up with no problem; or
2 - You'll face a problem, a new obstacle, something you did not know how to solve.
If you manage to finish it, good! Think of a bigger, more complex and maybe more ambitious project and do that again.
If you then get to that obstacle, you'll need to overcome it, create or find a good solution and finish your game.
If you think the problem is too difficult for you to solve right now, step back and archive your project temporarily. Create a simpler project and do the same. On the future, when you have thought of a solution, get back to this archived project and finish it!
Again, if you missed it, this is a link that everyone who, like me, has difficulties in finishing projects should read.