The idea of teaching multiple languages early in the sequence of computer science in order to help students gain a deeper understanding of what we are actually doing when we’re programming a computer keeps coming back to me. The advantage of a second (and third) language is that expressing the same computation in each allows you to see that computation more abstractly — you can see beyond the language features and quirks to some kind of deeper structure.
Hopefully, it’s easier to build a student’s concept of control flow or function calling or inheritance when they’ve seen a few slightly different takes on it. Given a few examples, people can usually pull out the commonalities and discern the parallels. On the other hand, if someone’s a little confused in one language, adding new syntax and keywords could tip them into total misunderstanding. And there’s only so much time in any course. So far, I’ve chosen against languages beyond Java in the AP class, but I’m starting to warm to the idea for my intro class.
Last year, Michael Ferraro gave his students a project based on a blog post called Eight things programming languages do. I’m not sure how it turned out, but I love the idea of different teams of students working in different languages toward the same goal and presenting to each other.
Then Joel Rosenberg (not the famous author guy, but my friend from undergrad who works on science curriculum stuff, previously at the Boston Museum of Science and now at Lawrence Hall of Science) went to a TeachScheme/ ReachJava conference and started email-introducing me to other CS teachers and putting folders of PDFs on my desktop entitled “NerdBooks” and generally raising hell. My first language was Scheme, so I’m somewhat partial to this because I feel like that language (through SICP) gave me an incredible background of conceptual understanding that I still rely on today. But obviously that’s not a high school course, and I haven’t looked enough at the How to Design Programs book to see what I might use from it.
Earlier this week, I was talking to Kenny Spade and the idea came up again. He suggested using Visual Studio and loading up a wide range of stuff: Visual Basic, C#, Python, Ruby, and F#. I haven’t been in a Microsoft IDE since J++ so I’m not sure if this is a good idea but I’m going to at least check it out. Having a relatively common environment for the various languages would help.
Today, I met with a recent CS graduate and potential volunteer who is interested in helping tutor my students and possibly work on the structure for this assignment. There’s a lot of overhead, both in terms of getting all the environments installed on the student machines and particularly in thinking through the programming problem in each of the languages to see what should be hidden away so that students can focus on the point of the exercise. Initially I’d thought that it would have to be simple and text-based, but in our conversation I was convinced that if we provide the right kind of libraries and they’re easy to include that we could actually have students redo some Processing project in the new language. It will be great to have help on that!
This is starting to feel like a really nice final project for the intro class. I don’t actually know what I’m teaching them tomorrow, but at least I’ve got a plan for May sketched out.