Table 3.
0
1
2
3
…
t
…
rocket(t) = ?
are all based on Scheme, but restrict the full language to protect students from its dark corners; the languages grow in sophistication with the students’ understanding. The languages are implemented in DrScheme, a pedagogic integrated development environment (IDE). The rocket simulator example described in this Viewpoint is our “Hello World” program. Students at all levels—college, high school, and middle school—react favorably to this curriculum. We also have numerous reports that students improve their performance in mathematics. In addition, formal evaluation shows the extremely positive impact this curriculum (see http://www. teach-scheme.org/ and http://www. bootstrapworld.org/) has on the way educators perceive computing and programming.
At the college level, this course follows a natural progression of programming on lists, trees, documents, graphs; abstraction; programming with first-class functions and accumulators; generative recursion; stateful objects; and many more computer science concepts. We have also worked out the transition to a second course, in Java, that builds on this knowledge. Preliminary field tests validate our conjecture that the transitions are reasonably smooth and never demand a fresh start. a
a This material is being used in inner-city programs at several urban middle schools. It is in use at dozens of high schools. It has also been deployed at several universities of all sizes and styles in the U.S. and other countries. Representative institutions include Adelphi, Brown, Chicago, Rice, Northeastern, and Waterloo. Two German textbooks based on our material have appeared over the past two years. In India, a major corporation uses the material for its “bootcamp” for new employees. Our primary textbook has been translated into Spanish, Polish, Chinese, and (partially) German.
figure 3.
rocket(t) = placeImage (
figure 4.
rocket(t) = placeImage (
Any attempt to align programming with mathematics will fail unless the programming language is as close to school mathematics as possible. The goal of an alignment is to transfer skills from programming to mathematics and vice versa. While students quickly grasp small differences in syntax, they will mentally block if the notion of, say, “function” in programming significantly differs from the notion of “ function” in algebra. Of course, some attributes of our approach are essential and others are accidental. We conjecture that, in addition to a language in harmony with mathematics, imaginative programming demands two more ingredients: the algebraic manipulation of images and symbolic data; and minimal overhead in the IDE for using these features.
As computer science educators, we must also demand a smooth, continuous path from imaginative programming to the engineering of large programs; otherwise beginning pro-
, 25, 10 • t,
)
, 25, height(t),
)
gramming won’t create skills that transfer to our discipline. Our decade-long curricular effort has been building one such path; others may produce different transitions.
Conversely, our community must realize that minor tweaks of currently dominant approaches to programming won’t suffice. Even masking the public static void main of Java hides little when the body of the corresponding method has little to do with the mathematical formulation of a function. The complexity of object-oriented programming bears little fruit here: it makes no sense to teach students how to engineer the structure of large systems when they are yet to write any programs with a complexity worth structuring.
Functional programming languages, such as Haskell, ML, and Scheme, suffer from different, but equally bad problems. These languages are far too complex for novices; except for DrScheme, none support images as first-class forms of data or provide pedagogical IDEs. Their type systems are
References:
Archives