I really enjoy trying to invent clever new algorithms. These days I don't do as much programming as I used to, but as Steve Wolfram is so keen to observe, computers are an excellent tool even for the abstract mathematician.
One eccentric flavor of masochistic "fun" programmers get to experience is debugging. I like debugging only when I can actually find the bug in a reasonable amount of time. Some bugs are actually very subtle and interesting. Please check out my bug collection.
This is one of my favorite areas of research. While I have yet to come up with any results which are both interesting and original, I am always thinking about it, and I have hopes for the future.
My favorite two books in this area are Michael Sipser's "An Introduction to the Theory of Computation" (read that one first), and Christos Papadimitriou's "Computational Complexity" (read that one second). I highly recommend them to anyone learning the field.
Of course, any true computer nerd must be a lover of good video games. I am a big tetris fan, and I've coded this game several times. Most recently, I wrote a network multiplayer capable version of tetris for sunOS (using Qt). It has become quite popular among the math grad students at Courant (the math grad school of NYU), so it is appropriated dubbed Courantris.
In addition to tetris, I occasionally attempt to code a quasi-educational game or two. For example, The No Tipping Game is a Java applet written for Dennis Shasha's problem solving class. The game itself has no AI -- it is meant to be played by two competing humans or external programs (as we did in the class). The object of the game is to make as many moves as possible without tipping the lever. Any volunteers want to add an AI?
Another recent foray is The Matrix: Reduced which is not yet a working applet, but hopefully will be soon. The idea here is to teach the user about certain matrix algorithms, such as Gaussian elimination, by turning it into a game. (Motivated by my experience as a linear algebra teacher.)
Finally, I wrote many many little games in high school and college, but most of these have been lost to the ravages of time and the sporadic hard drive implosion. One surviving morsel is Checkers, written as a sort of research project when I was an undergrad at OSU. It does play checkers decently well (you can download the windows executable to try it out), but it was designed to do much more -- to be able to continuously devise better and better strategies using a genetic algorithm. The idea of a self-improving checkers program is very old. The way I implemented this particular incarnation of the genetic algorithm is very original. Unfortunately, the program turned out to be too slow, by several orders of magnitude, to be realistically testable. Hence I still don't know, to this day, if the idea was any good or not.