I have to own up here and say up front that I am a lecturer at the University of Bolton and teach game programming and design, so you can discount what I say as propaganda if you like
When I first started programming, I was writing machine code on the old Atari 400. It was a hell of a system, had hardware sprites, had 256 colours (which was unheard of in the days of spectrums and such) it was 6502 so it was a simple chip.
I learnt assembler by reading magazines, having the BYTE 6502 chip reference manual (I think it was BYTE). Typing in listings and seeing what happened etc. The very typical bedroom coder.
After a while, I got onto a PC and started learning higher-level languages. My first was Pascal, which was a really nice language to learn, it had things like strong typing, functions, even some OOP stuff. I was into the demoscene at the time and hooked up with a few friends to do some demo stuff. Then one of the guys in the team told me to look at Watcom C. At the time memory management was a pain in the arse, with a load of paging and whatnot to take care of. With Watcom C, there was a thing called a "Dos Extender" which basically threw out all the paging mechanisms (holdovers from earlier 8086 chips) and gave you a flat address space (basically linear memory). Man that was great!! so we threw around chunks of memory and did all sorts of funky stuff. We used to do some pretty fun hardware bashing, things like messing with the video card to enable smooth scrolling (using a thing called Mode-X) and of course doing dodgy things with interrupts and the OS.
Anyway, after a while, the guy who got me into Watcom C told me to check out the new Watcom C++ compiler. He gave me a really simple example of a new thing (to me) called a "Class", his example was a file class, with file.open, file.read,file.write,file.close etc. It was a revalation!! Imagine having an "object" that could do stuff by itself!!!
Anyway, after a lot of C++ shenanigans, I was getting pretty handy with it. I'd been writing stuff like the Mode-X FAQ on and off for a long time, basically being active in the "scene" as it was and generally working at polishing my programming chops. It was all late-night bedroom coding with IRC sat in the background (hey, I had a modem connection to Demon in london and I used to phone-phreak a bit to some coder sites in the states).
I decided to go to Uni to get my skills up a bit. Met some great people and generally programmed a lot. It was fun and got me away from Hull where I was living. Great move there
It also meant I could do some contract game stuff for various companies as a freelancer during the summer months.
Anyway, after leaving uni, I spent a year or so in a distributed database place doing programming and customer support. It was ok but not my ideal job. After deciding to leave one day, the VERY NEXT DAY I got a phone call from my mate Charlie Wallace who was the programming manager for Team17 at the time (he's now somewhere in hollywood I think). He said "Phil, come up for an interview ok?" and I did. Anyway, he showed me some funky new hardware, which really impressed me. It was the 3dfx chip and would begin a 3D revolution. I'd been doing 2D and 3D stuff with my friends, writing our own software rasterisers and blitters and generally learning the ropes. Now I was working at a real games company doing all sorts of funky stuff!
Anyway, my time at Team17 was great. I decided to leave a few years back because they'd gotten stuck in a rut of sequels and doing whatever the publisher wanted, I think I was on my 6th worms game. Which wasnt like the early days when I started there. I decided to go indie and do my own thing, but luckily got a job teaching game programming and design at the Uni to help me fund it and stay sane.
I'm not saying my story is going to be typical, or even useful. But hopefully you can see that having an interest in game development and programming should be a goal itself. If you want to turn that into a job in a games company, you'll need to be able to keep at it, even when things get really difficult. You'll need to be active in developing your own skills and it never hurts to actually spread your knowledge and be active in game development communities (try gamedev.net for instance).
At the end of the day, you are a game programmer if you program games. Dont get hung up on languages or genres. If you want to end up in the games industry, then C++ is a good thing to learn. In fact, I think C++ is good to learn anyway, because its quite close to the hardware. I'd even suggest learning some assembler, mainly becuase its easy to understand AND teaches you something about the hardware youre using.
The best way to learn, is by doing it.
Now the sales pitch.
I know its probably going to be viewed as propaganda, but I do honestly think that if you have the aptitude and really REALLY want to become a well rounded game programmer, you can do worse than taking a GOOD course at a University equipped to teach game development. When I say GOOD, I say it because there are lots of BAD courses out there trying to trick you into starting without really having much in place (there is a place in london with 112 courses with "games" in the title). So pick a place with a good programme and you would get a lot out of it.
Why do I think its useful?
1) You get 3-4 years of just doing game development
2) You meet people who are the same as you
3) In a good programme, you get to meet and be taught by people who've already done it
4) The social aspects are also of benefit in the long run
I wouldnt say you HAVE to go the University route, but if youre in the UK, its definitely something I'd advise. It can get quite expensive in the US, so not so sure how it works out over there.
But let me state clearly, that a University course WILL NOT make you a game programmer. YOU will do that. Only YOU can gain the skills and be able to convince people you have them. The University is the enabling environment to help that, but it cant make it happen.
Hope I didnt go on too long. Its got me on a roll
Phil.