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?
I hesitate to teach him Java, even though it was my first language, because I'd like to be able to explain "hello world" completely, and the arguments that Java's main() method always requires would mean that I would need to explain arrays, command-line arguments, and String objects right away. I hesitate to teach him a dialect of Basic because of the bad habits that seems to invite. Python looks promising. Any thoughts?