Well, if you want to "start from level zero" i recommend learning assembly. yes assembly. I learned 6502, you can learn x86 if you like or arm or mips. Find a emulator or an interrupter and read some tutorials. You'll understand exactly how a CPU works and code will make much more sense (like why does getkeys not update until you do pollkeys and etc).
After that i recommend C# because it isnt as nasty as c/c++ (i primarily use c++). You'll understand how a C# line could be represented in assembly. C# allows you to do more things you want to do unlike c and c++ (heres a list of things that we can do in c++ that we will be able to do in the next standard http://en.wikipedia.org/wiki/C%2B%2B0x, C# has a few of these).
If you want to learn a lot you can try learning the language i recommend here https://stackoverflow.com/questions/498964/the-difficulty-in-learning-new-languages-by-yourself/578618#578618 which i think is a good idea after assembly.