I'm an undergrad Math/CS student. One of my cousins, an exceptionally bright 11-year-old, is interested in learning to program. I'd like to give him some kind of direction; at least, more than I got: to teach him to avoid bad habits, use design patterns (OO vs procedural, especially) properly, and make sure that he stays interested. I'd like to see what Slashdot thinks: what are appropriate resources to use? Which language should I try to teach him? Are there any good books out there?