One day in September, I was talking to a late-added student after class, trying to catch her up with her classmates. I wrote the expression "3 + 4 * 5" on the board and asked what its value was. She confidently answered "35", so we talked about order of operations and how to evaluate complex algebraic expressions, illustrating the difference between (3+4) * 5 and 3 + (4*5) with Scheme expressions that she could watch the computer evaluate, one step at a time. I watched light bulbs go on over her head as she exclaimed "I could use Scheme to help with my math homework!" She had a lot of catching up to do, but she earned a B for the semester.
I've done a statistical analysis of the past three years' freshman CS classes at Adelphi. To nobody's surprise, computer science majors are disproportionately male, and computer science majors get better grades in CS courses. But when I switched the beginning language to Scheme, the correlation between gender and first-semester grade dropped sharply, almost to zero. I'm waiting on more data to assess the significance of this; I speculate that it may have to do with an increased emphasis on thinking creatively, and less on memorizing vocabulary and syntax.
Rice University's TeachScheme! Project comprises several components:
This two-hour workshop won't get very far into the curriculum or the language (albeit much farther than you could get into C, C++ or Java in two hours!), but will demonstrate some ways to use programming to teach mathematical concepts. I hope to lead a more in-depth, full-week workshop this summer.
Scheme is a full-fledged programming language, every bit as powerful as C++ or Java, but with a much simpler syntax, so you can spend your time on fundamental concepts rather than memorizing syntax rules. In my first-semester programming course, I teach perhaps half a dozen syntax rules, one at a time. That's fewer than it would take to write the simplest "hello, world!" program in C++, C, or Java, yet by the end of the semester my students are writing recursive functions, traversing linked lists, binary and n-ary trees, and writing functions that operate on other functions as parameters.
Furthermore, the DrScheme software package is designed for educational use: it provides a minimum of options and menus, a "stepper" feature with which students can observe the evaluation of an expression step by step, and a series of instructor-customizable "language levels" that tailor the language to the student's experience level (so a student who accidentally invokes an advanced feature of the language gets an error message rather than inexplicable behavior).
But don't take my word for it. Read what other high- and middle-school teachers have said about the approach.
The software we're using, DrScheme, is available for free download for Mac, Windows, and Unix.
The textbook I used for my first-semester course, and from which this workshop is excerpted, is How to Design Programs, by Matthias Felleisen et al at Rice University. The book is due to come out in print from MIT Press in a few months, but it will remain available on-line for free.
Although Scheme's syntax is extraordinarily simple for a computer language, it is still a new language, and you'll need to learn the vocabulary. Here's my page on the minimal Scheme language, covering spelling, grammar, vocabulary, and idioms.
I've summarized the Design Recipe(s). covered in this workshop, and some additional ones covered in my first-semester course. Use them!
You might also be interested in Jack Crouch's CS1 Web site. Jack Crouch teaches a 9th-grade course on beginning programming, using Scheme, DrScheme, and How to Design Programs.
I've set up a folder for programming examples, many of them developed by high school teachers.