The goal of any curriculum is to prepare the students for their future. In just a handful of years, teachers aim to give the students the background to be successful for several decades. The challenge of creating a curriculum is the challenge of predicting the future.
Alan Kay's famous phrase, "The best way to predict the future is to invent it," doesn't work so well for curricula. There is always a temptation to create a particularly desired future by teaching students that that is the expected future. Many societies have tried to change the culture through schools, perhaps by changing the history books to tell a story that leads better to the desired future. The hitch is that schooling involves students, who think for themselves and have their own goals.
A group from the ACM SIGPLAN is proposing a new standard for computer science undergraduate curricula. The proposal is to teach much more about functional programming -- explicitly, to teach as many hours on functional programming as we currently teach on object-oriented programming. (Since functional programming is much easier to learn than object-oriented programming, the result might be that students know functional twice as well as object-oriented!)
I completely agree that all computer science students should learn about functional programming and functional programming languages. I disagree that we should teach as much about functional as about object-oriented. I completely disagree that we should try to mandate that much functional programming through manipulation of the curriculum standards.
Students have sensitive lie-detectors that are prone to false negatives. Every semester that I teach Introduction to Media Computation, I get at least one student who asks, "Why are you teaching us Python, some toy language that you made up? Why don't you teach us something real like Java?" My students in that course are non-CS majors, who have even less understanding of what's "real" in the field of computer science than our majors. Still, I would imagine that even CS majors would have a hard time believing that we faculty predict that knowing functional programming will be just as important knowing object-oriented programming in the students' future. That's the message we would be sending by teaching as much about functional programming as we do about object-oriented programming.
By any measure that you care to name, object-oriented programming is a couple magnitudes more important, more useful, and more common than functional programming in any CS students' future. Most programming projects in the future world will most likely be in object-oriented languages. A particularly strong argument is the recent work by Beth Simon and Andy Begel, tracking new hires for a year at a large software development company. These new hires wrote no new code in the course of that year. They only fixed code. All the code they fixed was in object-oriented programming languages. Knowing how to write functional programs in functional programming languages would not help these students.
What would happen if all computer science curricula increased their teaching of functional languages so that they taught as much functional as object-oriented? Based on my reading of the research, I would predict even greater attrition and even fewer women in computer science. The studies of why students, particularly women, leave computer science emphasize how "irrelevant" computer science classes are (see Margolis and Fisher's Unlocking the Clubhouse). Students come in wanting to know what underlies the great technology in their lives, and we teach them about fibonacci numbers and Tower of Hanoi. If we were to start teaching significantly more about a programming paradigm that is rarely used for the technology in their lives, I think we would have an even harder time arguing for the relevance of our major.
We couldn't really mandate functional programming, not in a free market society. Students will simply go elsewhere. They will go to another field, or they will find a CS program that bucks the standards, that teaches them what they find relevant.
I certainly could be wrong in my prediction! It might be that students who learn more about functional programming are more motivated and program even better in the more dominant object-oriented programming. (The evidence of Singley and Anderson, showing only a little transfer from Lisp to Pascal, isn't promising here, but I know of no studies exploring the transfer of knowledge from functional to object-oriented.) It might be that employers prefer students who know functional programming paradigms, and that those students are more successful in their careers. If any of these statements were true, the departments who teach more functional programming ought to use that to their competitive advantage. Trumpet your great results! Let other departments envy your success, and then let them try to copy it! Then, when teaching more functional programming becomes a recognized best practice, it will be obvious that it should be part of the curriculum standards.
In a free market, it is not wise to attempt to mandate change, even if it's "good for you." That was the lesson of Prohibition. We should teach more functional programming to computer science students. We should not in such a way that we appear to be claiming that functional is as important as object-oriented. We definitely should not try to mandate this kind of change, until we see it reflected in existing curricula as a recognized best practice.
|
|
Bio
I started teaching computing in February 1980. I was 17 in my senior year of high school, and I taught "Bits, Bytes, and Basic" in a community education class. I taught through my undergrad years--community education, afterschool classes, GED classes, and even community college in 1984. I read "Personal Dynamic Media" by Adele Goldberg and Alan Kay while on an internship at Bell Labs in 1982. I'd never before thought about computing FOR learning (as opposed to learning ABOUT computing). Adele and Alan's thoughts and words set me on the road to my PhD in Education and Computer Science at the University of Michigan in 1993. Nowadays, I focus on using lessons from learning sciences and educational technology for teaching about computing.
|