I'm currently writing an open source game for the pyweek competition. Competitions like this are a fun way of developing programming skills, since many technologies are often incorporated, such as: network communication, graphic manipulation, game logic, artificial intelligence, team work, project management. You might remember learning to program a computer at school using the Turtle program, which is effective because you can see immediate results of your work.
Since I am very interested in practical learning, I plan to develop some open source development courses that may incorporate some sort of team work and (friendly) competition; perhaps a competition for students to develop a Drupal module, or something.