TITLE: Class Personality and New Ideas AUTHOR: Eugene Wallingford DATE: January 23, 2007 8:09 AM DESC: ----- BODY:

People you've got the power over what we do
You can sit there and wait
Or you can pull us through
Come along, sing the song
You know you can't go wrong

-- Jackson Browne, "The Load-Out"

Every group of students is unique. This is evident every time I teach a course. I think I notice these differences most when I teach a course Programming Languages, the course I'm teaching this semester. In this course, our students learn to program in a functional style, using Scheme, and then use their new skills to build small language interpreters that help them to understand the principles of programming languages. Because we ask students to learn a new programming style and a language very different from any they know when the enter the course, this course depends more than most on the class's willingness to change their minds. This willingness is really attribute of each of the individuals in the class, but groups tend to develop a personality that grows out of the individual personalities which make it up. The last time I taught this course, I had a group that was eager to try new ideas. These folks were game from Day 1 to try something like functional programming. Many of them had studied a language called Mumps in another course, which had shown them the power that can be had in a small language that does one or two things well. Many of them were Linux hackers who appreciated the power of Unix and its many little languages. Scheme immediately appealed to these students, and they dove right in. Not all of them ended up mastering the language or style, but all made a good faith effort. The result was an uplifting experience both for them and for me. Each class session seemed to have a positive energy that drove us all forward. But I recall a semester that went much differently. That class of students was very pragmatic, focused on immediate skills and professional goals. While that's not always my orientation (I love many ideas for their own sake, and look for ways to improve myself by studying them), I no longer fault students who feel this way. They usually have good reasons for having developed such a mindset. But that mindset usually doesn't make for a very interesting semester studying techniques for recursive programming, higher-order procedures, syntactic abstractions, and the like. Sure, these ideas show up -- increasingly often -- in the languages that they will use professionally, and we can make all sorts of connections between the ideas they learn and the skills they will need writing code in the future. It's just that without a playful orientation toward new ideas, a course that reaches beyond the here-and-now feels irrelevant enough to many students to be seem an unpleasant burden. That semester, almost every day was a chore for me. I could feel the energy drain from my body as I entered the room each Tuesday and Thursday and encountered students who were ready to leave before we started. Eventually we got through the course, and the students may even have learned some things that they have since found useful. But at the time the course was like a twice-weekly visit to the dentist to have a tooth pulled. In neither of these classes was there only the one kind of student. The personality of the class was an amalgam, driven by the more talkative members or by the natural leaders among the students. In one class, I would walk into the room and find a few of them discussing some cool new thing they had tried since the last time we met; in the other, they would be discussing the pain of the current assignment, or a topic from some other course they were enjoying. These attitudes pervaded the rest of the students and, at least to some extent, me. As the instructor, I do have some influence over the class's emotional state of mind. If I walk into the room with excitement and energy, my students will feel that. But the students can have the same effect. The result is a symbiotic process that requires a boost of energy from both sides every class period. We are now two weeks into the new semester, and I am trying to get a feel for my current class. The vocal element of the class has been skeptical, asking lots of "why?" questions about functional programming and Scheme alike. So far, it hasn't been the negative sort of skepticism that leads to a negative class, and some of the discussion so far has had the potential to provoke their curiosity. As we get deeper into the meat of the course, and students have a chance to write code and see its magic, we could harness their skepticism into a healthy desire to learn more. Over the years, I've learned how better to respond to the sort of questions students ask at the outset of the semester in this course. My goal is to lead the discussion in a way that is at the same time intellectually challenging and pragmatic. I learned long ago that appealing only to the students' innate desire to learn abstract ideas such as continuations doesn't work for the students in my courses. In most practical ways, the course is about what they need to learn, not about what I want blather on about. And as much as we academics like papers such as Why Functional Programming Matters -- and I do like this paper a lot! -- it is only persuasive to programmers who are open to being persuaded. But I've also found that pandering to students by telling them that the skills they are learning can have an immediate effect on their professional goals does not work in this sort of course. Students are smart enough to see that even if Paul Graham got rich writing ViaWeb in Lisp, most of them aren't going to be starting their own companies, and they are not likely to get a job where Scheme or functional programming will matter in any direct way. I could walk into class each day with a different example of a company that has done something "in the real world" with Scheme or Haskell, and at the end of the term most students would have perceived only thirty isolated and largely irrelevant examples. This sort of course requires balancing these two sets of forces. Students want practical ideas, ideas that can change how they do their work. But we sell students short when we act as if they want to learn only practical job skills. By and large they do want ideas, ideas that can change how they think. I'm better at balancing these forces with examples, stories, and subtle direction of classroom discussion than I was ten or fifteen years ago, but I don't pretend to be able to predict where we'll all end up. Today we begin a week studying Scheme procedures and some of the features that make functional programming different from what they are used to, such as first-class procedures, variable arity, higher-order procedures, and currying. These are ideas with the potential to capture the students' imagination -- or to make them think to themselves, "Huh?" I'm hopeful that we'll start to build a positive energy that pulls us forward into a semester of discovery. I don't imagine that they'll be just like my last class; I do hope that we can be a class which wants to come together a couple of times every week until May, exploring something new and wonderful. -----