A blog posting by a long-ago associate has lingered in a Firefox tab for quite some time. The posting by Dan Weinreb is "Why did MIT Switch from Scheme to Python?" with further discussion on Hacker News. Don't be fooled by the title, because the thread is really about the evolution of a computer science curriculum .
Thirty years ago this August, I arrived at MIT, and I registered in the course 6.031, The Structure and Interpretation of Computer Programs. The lecturer was Robert Fano, an electrical engineer famous for his work in information theory who moved into computer science in the 60s at least a decade before the first undergraduate CS curriculum emerged. My recitation instructor was Christos Papadimitriou who was already distinguishing himself as a theoretical computer scientist. Within weeks, as I listened to the magic delivered by the Italian- and the Greek-tinged voices, I decided I would major in computer science.
In the next few years Abelson and Sussman would concentrate 6.031 into 6.001, the very renumbering punctuating an essential victory. They would pack Algol and Lisp into an elemental Scheme, unifying key concepts, intensifying workload in a curricular tour de force. Yet, my reaction then was I quite liked seeing the two parts separately for their own indvidual elegances and well, skins (remember the Algol 60 report).
I can remember Fano with a forceful enthusiasm explaining call-by-name as he dashed out a diagram with contours and the magic of thunks as chalk hit chalkboard in the Green building lecture hall. And in the 2nd half of the course the same crystalline clarity emerged in Papadimitriou's recitations of Lisp's dynamic forms and list structures and meta-forms of representation and computation (that's data and control abstractions). As 6.001 came into force, my worry was that the sheer grind and the forging of axes into a volume would lose the potency of the original. However, over the years, hearing wows and even avowals of love for 6.001, I accepted that perhaps not much was lost.
The shift now, this last year with the retiring of 6.001 and the introduction of 6.01 is much more significant, belied by the simple loss of a zero. The course may still contain a good chunk of what was there, but it hits at once at perhaps one level of abstraction too high and with an abundance of grit and whirl of "real world" engineering and so much more stuff. All considered, I doubt the MIT CS curriculum will be damaged by this. Still the transformation brings me to active discussions over the last few years in the ACM venues on the declining enrollments in CS programs and on the shaping of computing courses for other fields and the primary education system. You see the same vector of replacing elemental formulations with ones that accommodate teaching students in other fields by contextualizing with relevant or engaging problem domains.
In all this discussion of pragmatic factors and educational theories, I wonder whether what may be lost in translation (for a while anyway) is exactly the magic at the heart of the field that would draw people into it. 30 years ago the field's own core curriculum was still being formed for those in the field itself and now with the computing crescendo of the 90s, we are in the next era of cultural diffusion. Even if it might make sense for MIT to retire 6.001, is it not time for an analogous course for a broader audience, say simply Computing, to emerge? (Certainly both Denning and Wing have called along this direction for many years [start here].) Just as in high school courses in Calculus or Physics, distilled and pure forms may not just be a good idea as a foundation prior to utility but also for their innate beauties that inspire and subscribe. And though certainly the voices that I heard are to be thanked for my own arrival, by now it's clear that the forms themselves can have a voice of their own.
Ramana, who do you think should take a course in "Computing"? Majors, non-computing majors, or both? What would it include? I'm on the commission to design the new high school AP exam in "Computer Science: Principles" which aims to be a course like the one you are pointing to. It's a challenging question to ask what role programming and preparation for the major plays in a course like this.
Mark, I was thinking more along the lines of an elective high school class that's a peer of other pre-AP math and science classes. I think programming should play a part there but to render concepts concretely not so much as preparation for the major (analogous to science fair projects). Such a course would be a success in my view if it did sparked more to go into computer science as a major.
Displaying all 2 comments