How can I teach a bright person, with no programming experience, how to program?
I was recently asked by an older friend working on the city council if I would be willing to teach a summer programming course, targeting middle school to high school aged students with either minimal or no prior programming experience.
I'm a senior in high school, but I've been programming since a young age, and I've worked locally with my city on various projects requiring programming.
The first thing is, I don't want to teach something that can easily be learned anywhere online. If I spent all day over two weeks teaching only basic HTML with bits of CSS, I'd feel like I'm ripping them off (since the class is planned to be $30.00 per person, although I won't receive any of the money). Furthermore, there's actually already a web design class being taught, and I got the impression that I wasn't meant to focus on web development.
If it was all up to me (which it's not, I have to create a plan and present it in front of the summer programs board for approval), I would spend the first week teaching Haskell, and the second week using it to solve math problems (like those seen on Project Euler). Unfortunately, I'm probably the only one who would be interested in taking such a class, and I should probably focus more on programming rather than mathematics.
I've seen in this thread that Java was not well liked, and I've seen in virtually any other thread that people loved Lisp dialects (especially Scheme, and I suspect this is somewhat related to the love of books like SICP).
I have the problem of trying to make the course interesting and engaging, while educational. I don't necessarily need to "sell" programming to them, since they should be somewhat self-motivated applicants, but I also don't want to bore them and "ruin" programming for them.
What should I do? What should I teach?