I'm 22. I have a bachelor's degree in CS and slightly more than three years of professional experience. None of my previous experience involved game development or even computer graphics, but I really want to work as a game developer because I'm carrying a big love for computer games through my entire life. It began with "Bobby is Going Home" on Atari 2600. Then there were the NES games that shaped my childhood: Flying Warriors, Mario, the various versions of Contra, Mighty Final Fight... And finally, there was the PC with Commander Keen, Duke Nukem, Doom, Quake and the Half-Life series, which I consider the best FPS game ever.
I have always admired games and the technology that makes them tick, but never had the chance to work on a real game because where I'm from there are simply no game studios.
But I have recently moved to the US. There are much more opportunities here, but the problem is that I lack the experience necessary for a game developer. In my understanding, modern games are very complex and it would be extremely difficult for a person with no previous experience in this area to just jump in and start working on them.
So, my question is, what should I do to qualify for a software engineering job in game development? What do I need to learn? And another thing - if you are an engineer at Valve reading this, what would I need to show you to get a job at the company?
A little bit on my background, if it helps: I'm a C++ guy, I do know C and can write low-level or system-level code if necessary. Understanding of linear algebra is present. I did work on some simple games in my spare time, but a) there was little spare time between my day job and my studies, so the games had to be really simple b) they all look like shit because I'm no artist.
Just to throw another idea out there, a further alternative would be to work/look at open-source games. Technology wise you are definitely in the correct direction, most common languages in game dev are C++ and various scripting languages (from my experience).
I have no idea how much time you have or what sort of stuff you want to do in games (e.g. graphic/sound engine, networking, ai...) but since you mentioned FPS games, you could look into Xonotic. It is a fast FPS game, open-source and based on a heavily improved Quake3 engine.
That might give you a better idea of what components make a game and you will not have to worry about artworks etc. if you want to contribute/fork.
But I figure, while contributing to open-source will help you understand games better, it will not get you hired without networking I think. You can also check out the SIGGRAPH convention presentations, lots of interesting, although maybe too specialised, stuff there.