(Dunham 220, a familiar room for any Yale CS major. Courtesy of Yale Conferences and Events)
LC: Can you tell me about how you started teaching and how your teaching has evolved?
SS: When I was here during graduate school I had taught courses that went pretty well. I had one course that was like today’s 112, and we taught it by using hypercard, a sort of predecessor to the world wide web. What was interesting about the course was that it had face-to-face grading. So we had a whole army of TA’s, like you do for CS50 now, and they would grade the assignments. So if you did the assignment, you would come in, sit down with a graduate student, and explain how the program worked. And the graduate student could ask you to modify the code or ask what would happen if you modified it in some way. And your job was to convince the graduate student that you knew what you were doing. If the code didn’t quite work that was okay. You didn’t get a number grade, you were either proficient or not. And if you weren’t proficient when you met with the graduate student, you could come back a couple days later and show them that now you were proficient.
Oh also you know how we tell students they can’t help each other or show each other code? Here we would encourage them to do that. If someone helped you on the assignment, you could give them an assist like in basketball. So helping someone was seen as a good thing. And this is what it is like in the real world if you go work for google or facebook. They want you to help each other.
How does that factor into course policy now? There are some CS courses here that basically tell students to stay as far away from helping others as possible. After you talk with someone about their homework, you have to spend an hour alone in a room listening to music before you start coding or something.
Yeah that’s okay. My preference would be to have the face-to-face grading and to encourage people to help each other. It’s just not feasible with most of our courses. But I think that more closely resembles what happens in the real world.
I had a colleague at NYU who was a statistician, who unfortunately passed away (W. Edwards Deming). He went to Japan after World War II, and Japan was devastated after WWII. Japan as a country doesn’t have a lot of natural resources, but the main thing they have is brainpower. And what he did was try to use management techniques to maximize the output of their companies and factories. And part of the idea was to encourage teamwork. So he wanted to get rid of things like incentive systems. So somebody in school, if they can’t do well, they might make other people do worse to look better. The same thing happens in companies. If the employees are concerned about their own performance as a function of that of their colleagues, they don’t have an incentive to help each other. If someone asks for help, they don’t want to cooperate.
So he tried to overcome that and created this team approach that was very successful. And he, again he was originally a statistician, but he sort of broadened his portfolio. He was there at NYU when I was there, and I remember hearing him teach. And he was saying he didn’t believe in grades. He said if you give someone a test, usually what you want them to do is recapitulate whatever you told them. It’s like you know during the semester you give your students apples and then in the exam you ask for them back. It sounds a little weird, but the fact is that there have been cognitive psychology experiments that show that if you’re just studying for an exam, your brain knows that you don’t need to know this stuff after the exam and puts it in some place in memory that it can erase. It gets garbage collected. So I think that’s what he was talking about. You want to teach in a way that makes a difference.
So when I raise my children, I would teach them to read, but I didn’t want to just teach them to read. I wanted to teach them to love to read. I majored in music–I taught my daughters to play the piano. But I didn’t just want to teach them to play the piano, but to love to play the piano. The students here at Yale, I want to teach them computer science but I want to teach them to love computer science. So that when they have to do the homework or they got a job, they enjoy doing it!
So what is your strategy there? What are the techniques you employ?
Storytelling! I want people to see that there is this social web underlying computer science. So I tell stories about Von Neumann and Norbert Wiener and Turing, Grace Hopper, people like that… About me, my daughters… So that they understand that computer science is not this solitary endeavor. Some people like that, but I don’t have to preach to them, they’re already in the choir.
I’m sure you know, part of the problem with computer science is that it’s real easy to get stuck. You miss a semicolon, you have the parentheses wrong–you can stare at it for three hours and it’s not going to wave its hands at you and tell you what’s wrong. But if you write a paper in history or english or political science… Say you’re supposed to write a five page paper. You write a five page paper and you’re done. The words don’t sit there and scream this is a terrible paper.
But when you write a program, it stares back at you and says this is a terrible program, it doesn’t work, don’t you know any better? And to some extent, even with a math or physics problem set you can fool yourself into thinking you have the right answer. You can’t fool the racket interpreter–it’s unforgiving. That’s why, I think, the office hours and ULAs and piazza and all that… it’s so you don’t end up spending twenty hours on the problem set.
I mentioned that I taught at NYU as well as here, and at NYU I taught undergraduates in addition to business school students. And what I found was that the Yale students were at a different level than the NYU students in the following sense–that the NYU students, they worked hard and wanted to learn whatever they needed to learn, but they always wanted to know why they were learning something.
And the Yale students a lot of them were like that, but you do find Yale students that were open minded and willing to learn for knowledge sake. And they’re more likely to ask open-ended, blue-sky questions that don’t have any particular application today, but down the road they might.
You don’t think that’s annoying?
I think that’s essential.
There was this mathematician G.H. Hardy at Cambridge years ago, and he studied number theory. And he said the main thing he liked about number theory was that it had absolutely no practical application.
Well these days number theory is the heart of cryptography… but the point was he didn’t study number theory because he thought it was practical, he studied number theory because he thought it was beautiful. And when I said “I don’t want you to learn computer science, I want you to love computer science” that’s what I mean. I want you to find some intrinsic pleasure in what you’re learning. It’s wonderful that you can go out and get a job, get paid all this money and get free lunch but that shouldn’t be the end all be all. We are talking about your life and the thoughts in your head, and those thoughts should be congenial, beautiful thoughts!
That sounds like a pretty good summary of 201 to me. A lot of people say 201 doesn’t help you with future classes and it’s not going to get you a software engineering job. I don’t think that’s entirely true; as Professor Eistenstat pointed out to me yesterday, the complicated data structures are heavily recursive and just surviving 201 means you really understand recursion. But I always recommend people take it, even if not for the content, for the enjoyment. Because if you don’t at least mildly enjoy 201, boy are you going to have a fun time in 223 and 323.