Game programming is the branch of programming related to creating videogames for PC, home consoles and arcade. It is not taught as a career itself, rather programmers learn it by self-teaching although there are some few schools that teach that, like Digipen.
This topic will discuss such theme. There will be basic to advanced articles using C language and SDL. If the reader of these series of articles works hard on them and types all the sample code, he could be able to create a simple 2D game in the fashion of Tetris, Arkanoid or even a 2D game if he makes further research. Game programming is a hard task and can only be learned by doing. We chose SDL as a game API because it is the easier library to work with; besides it is very powerful and offers almost all the features needed in a game. Other game APIs, like DirectX and OpenGL require a higher learning curve.
What you need to know as a requirement for these tutorials is knowledge and experience in a programming language. It is recommended that the reader understands C in an intermediate level, because most articles and sample code will focus on that language. Also, it is recommended but not required to know something about event driven programming, maybe on SDL or on Windows API. We will go from there and get to the programming topics related to our task: learning game programming. Also, it is better if the user is comfortable with maths; only algebra and basic physics knowledge (in the physics tutorial) is required.
The art of programming is not like playing video games; it is more exciting, said the creator of Digipen, a video game training company for game developers and 3D artists. To become a good developer of games, first of all you should be a regular player. If you do not know the main types of games that exist you may not be able to develop a game that meets the minimum standards of quality; also, most users will find that it does not meet their expectations. Therefore, the first step is to know which kinds of games are out there to get an idea of what kind of game you are going to implement.
2D games 
Games have become much more complex and exciting than they were in their infancy. Now most new games are some kind of three-dimensional adventure, whether they are sports games, strategy, racing, wrestling, role-playing, or puzzle. However, the knowledge that this tutorial series will give you will be useful to develop games in two dimensions (2D). To make the jump to the world of 3D games, you need to learn the techniques of 2D games first. Then you master the math knowledge required (linear algebra) and other advanced topics, not covered on this topic.
However, 2D games are not entirely outdated. There will always be public for a Tetris-style game or one like Mario Brothers (maybe for a handheld console, even for the PC). The manner in which the reader can compete with the new 3D video games is by taking advantage of what people like: playability. It is incredible that relatively simple games like Space Invaders and Pacman have had people entertained for decades. By learning this series of tutorials, you may develop games like Space Invaders, Centipede, Asteroids, Pacman or, if you practiced hard enough, a game like Contra or Mario Brothers. But not without tons of work. A game programmer does not build himself from night to day, or in 21 days, like some books claim.
Although most commercial top selling games are developed by a full team of designers, programmers, artists and writers, it is still possible for one person to develop a game of good quality. If you look at the credits screen of some successful games in the past, the main logic of the game was programmed by one or three people. Therefore, and based upon my personal experience (11 full games made by myself), I know that this is possible. Also, there is a big community of self-taught game programmers who make the coding just by themselves (no team).
Game libraries 
And the most important thing is that nowadays is easier to program games (relatively speaking, because any kind of software is somewhat complex). In the past, to program games for the PC you needed to be an experienced Assembler programmer (Assembler guru) to access the video card, sound and joystick through interrupts and BIOS functions. Today, there are different libraries with specialized functions that ease the development of video games; those are DirectX and SDL, mainly. You use them as you do with any other library... and Assembler knowledge is not needed. Windows operating system is sufficiently sophisticated to avoid having to use difficult functions from the past. In Windows 3.1, for example, memory management was 16-bit and, hence, in order to access the dynamic memory you could not use the classical functions called malloc and free. You had to request the memory, lock it, use it and unlock it. It was a very tedious task compared with the straight use of malloc that you can make in Win32. Even if you use the Windows API functions it is an straight task.
What you need to do now is to master one of these development libraries. If you plan to use DirectX, you must also have basic to advanced knowledge of Windows programming, depending on the task. If you use SDL, (what we do in these tutorials, for simplicity) you only need to learn how to handle this library. SDL encapsulates everything related to Windows (or Linux XWindows, if used in this system) so you never have to make a WinMain or WinProc function. Besides, obviously you need to know programming language (C in this case) thoroughly and know how to compile and run programs. It is recommended to have made several programs in other areas of software development.
On these tutorials, words such as double buffering, flipping page, blitting, sprites and finite state machines will be used often. So check the corresponding articles when you need to know more about each topic.
André Lamothe suggestions 
What is most exciting about learning how to program video games is that after this, any kind of software (except operating system software) will be much easier to program. The developers of video games do things that other programmers would consider impossible (as the great master André Lamothe said). André recommends people to program as if nothing were impossible. That way you can get very far. In his words (the bold is mine):
... You'd better forget everything you learned about the PC and what's supposed impossible. Think of programming as a game. It's the greatest game in the world. The object of the game is to do the impossible. Most of the programming that a video-game programmer does would seem impossible to a programmer of ordinary applications. André Lamothe, game programmer, author of a lot of books on that subject and CEO of Xtreme Games LLC.
Therefore, we must defeat the impossible in programming video games. The best gaming market created with Banjo-Kazooie, Quake, Need For Speed illustrate things that had been thought impossible a few decades ago (except for writers of science fiction, though).
Game stages 
First of all, it comes the idea for the game. That idea is improved and written in a game design document. That document is useful for tracking the changes done to the software. Here, the game designer writes and plans everything about the future software: the plot, the characters, the music, the playability, the controls and so on.
Second, it comes the harder stage, the game programming itself and the creation of the media needed for the software. The programmers, who usually work in teams, are divided according their mission: gameplay programmers, 3D engine programmers, system programmers (they make the tools needed for the game: linkers, compilers, art converters among other) and map designer. This is not an exhaustive list, these division may vary.
The creation of media is done here. Several 2D and/or 3D artists begin making their models and they later send it to the programmers, for these people to incorporate them into the game. Musicians also work on this phase.
The third stage is the beta-testing and modification of the game software. It is done by a special team of beta-testers who try to test every possible action in the game, searching for bugs (programming errors) and informing the programmers. The programmers then modify the software to correct the problems found.
The fourth stage is selling the game. It includes marketing strategies, advertising and so on. Sometimes the company that created the game sells the rights to another for it to commercialize the game. That is the case of Rare, who sold its game licenses to Nintendo.
The fifth stage is optional, and it may include some improvements made to the game to be sold as expansion packs. Also some corrections can be done if the release version still has bugs. Usually, the modifications can be downloaded freely through a website.
On this topic we will cover step 2, game programming.
Proposed articles 
- Abstract Data Types
- Collision detection
- Basic SDL
- Blitter and sprites
- Dynamic Link Libraries
- Function pointers
- Options menus
- Finite State Machines
C++, Java, python
- Add your own