Nothing matters half so much as getting used to the frustration of experimenting with new tools. Spend a few days pumping as many hours as you can into a couple of languages and their respective interpreters, compilers, or linkers. You will not make any progress with books or their kin. You might think that sitting down with something new and spending two or three hours completely frustrated is a waste of time and discouraging -- but it will be a basic part of your life from now on.
Things will go wrong. They will not work. It will not be your fault, but it will eat hours of your life. So dive right in and get used to it, and learn how to use the language you choose while you're at it -- there's more to a language than its syntax and semantics, after all. If you can't use the toolchain (I mean again the compiler and linker or interpreter), you can't use the language. So just dive in.
C is a great way to go. On a Linux box, especially, nothing is easier to get working. Lua is great, too, for the same reason, and it has great relevance in gaming. And remember always that the bulk of game logic -- the stuff that you'll be contributing the most to with your ideas -- has nothing to do with graphics or sound, or even the grid layout of a roguelike. You can testing new ideas for combat systems, or conversation AI, or alchemy even when you only know printf and its peers.
Of course, reading source is the second most important thing to do (next to writing it), and it sounds like you've started doing that.