I have been teaching scheme for two weeks now ( 4 two hour classes) and I am quite happy. Students seem to understand functional abstraction so seamlessly that it does not seem possible. They are far more advanced than the AP C++ students who have to get by CodeWarrior projects, "int main() {...return 0}", functions prototypes, libraries, and all the other crap you have to skip over before they can write an intersting program. There is nothing I have done in the Scheme class that I haven't been able explain fully, whereas I have had to leave a lot of stuff in C++ out until it makes any sense.Some anecdotes:
- One of the Scheme students told me that some C++ students had said that Scheme was harder than C++; when I asked her if she thought Scheme was hard she denied it emphatically.
- After giving my advanced students on Wednesday the design recipe for dealing with trees and suggesting that they implement a binary search tree in scheme by Monday they told me it was was way too easy and would have it by Friday.
Duncan Innes
Maine School of Science and Mathematics
Limestone, Maine
Matthias Felleisen responds:
Students who have seen C++ first often claim that "Scheme is harder than C++". WHY? I have heard this for 12 years and here is my conjecture:So yes, perhaps it is "harder" -- but with good reason.
- If Scheme is taught with something like the design recipe, you can ask the student to justify why a student did what he did. They hate that, because then they have to think.
- With Scheme you can quickly teach concepts that are beyond the scope of what these students have seen -- and yet they don't understand how to do things. They are still waiting for the "else" and the ";" and the "while" and, boom, here you are teaching functions.
- C++ has lots of syntax to get right, Scheme has almost none. As long as you are fixing syntactic mistakes, you're making progess. You're plodding along. There is no design recipe and you make small, syntax-oriented steps. Nobody can challenge you - yet. Because it might turn out to "work". Plodders love that.
- And last but not least: you can assign students to solve 4 or 5 problems per hour when they usually did 1 problem, if that much. And if they did, they could spend a good amount of time getting the right number of spaces into the output, putting a few extra | and + and & in, etc. Nice stuff for doodeling time away. Practice with problem solving? No way!