I have a bachelors degree in Game design, and using games was a big part of how programming was taught at my school.
A lot of people are going to say "but how are they going to learn, games are complex, etc etc"
They don't have to be. A few examples from how I learned...
In my networking fundamentals, we covered opening sockets, threading to take care of the sockets, passing information back and forth, etc. At the point in a normal course, you'd probably do something like...make a lame chat client, or an FTP program or something. Instead the professor said, ok, I want you to make a game that uses these concepts to pass information between computers. I wrote a pong game that used a client / server type setup. One computer ran the server and both ran the clients. The server computed all the stuff and returned data to the clients on where to place the ball, paddles, and the score. I also had a lot of fun doing it.
Another good one. For my programming fundamentals class (eg, first class the freshman took to learn programming) they used python. After we covered the basics, such as arrays, if statements, loops, and so on, we got into user input. Then the instructor turned us loose on a simple header he'd made that let you move ASCII characters around the screen and asked us to make a simple game, such as a maze the user had to move through via the directional keys. It was amazing, because the next class students came in with some really awesome games using pretty complex stuff they'd looked up and taught themselves. By the end of the year long series of classes, freshman were making sprite based games on par with Super Mario Brothers 3 and other scrolling type games using PyGame.
I also learned Direct3D and OpenGL and wrote a few simple games with them to learn how to work with a rather complex API. Then we picked up Ogre and a physics engine (I can't remember the name off the top of my head). My final project was a bowling game that head realistic physics, and you controlled the spin and movement of the ball via the mouse. I showed it to my current employeer (I started out as a co-op) during my interview, and it really set me apart. Granted my job requires very little programming, but it still really made me stand out when I was able to show them something flashy, rather than a program that did a lot in the background but not much in the userland end of things. Not that theres anything wrong with that, but people tend to like flashy cool looking things.