A friend recently asked a bunch of us what we'd do if we had 7-9 minutes to explain CS to a bunch of high schoolers (who may or may not have CS experience). This was my response:

I'd actually skip the code stuff, 'cause they either (1) already know how to code and are probably looking for that on their own already, or (2) don't know how to code or how to learn to code, so you'll have quite a barrier to get over in less then 10 minutes. Instead, I'd show them the ecosystem of coders, since at the high school stage a lot of students don't yet realize that Complicated Things Are Made By Lots Of People Working Together (and you can too).

Also, visualizing the open source ecosystem is an interesting programming project in and of itself. Stuff like codeswarms beg a bunch of questions:

  • who are these people?
  • how do so many people coordinate themselves?
  • what the heck is python/apache/postgresql/eclipse?
  • how do these kinds of visualizations get made - where does the data come from, how do you make programs that put those sorts of graphics on your screen, etc?
  • why does the apache movie look so different from the postgresql movie?
  • what might it be like to be a contributor in each project?
  • does the nature of the type of program (webserver, database, popular programming language, IDE) each of these projects is written in change the nature of their ecosystem? (Sapir-Whorf hypothesis.)

...and then try to get 'em involved in whatever your favorite projects are. Basically, give them something to think about that can give them all something new to play with, no matter what they've done (or haven't done) with code before, that leads into a natural "join these communities" call-to-action for those students who are interested in learning more.

Also suggested, by Michael Stone: How to explain zero-knowledge proofs to your children (pdf), which is just delightful.