I think any programmer interested in making games should try to implement Tetris. I consider it one of the greatest games of all time. I like the idea that you’re given these random pieces and you have to make sense of it and put it in order. Even when you screw up, you can say you weren’t given the wrong piece, you just put it in the wrong place. This makes it all the more addictive because then you want to go back and get an even higher score.
The great part of implementing Tetris is that there are several ways of appraching it. Another interesting aspect is that Tetris as a game is well defined, there is very little ambiguity on how Tetris plays or how the rules can be interpreted. This leaves you to focus on the implementation details and getting it done right.