Sunday, March 15, 2009


Richard Lipton ends a recent blog post with the question:

My question today is how can we better educate students to solve problems, to apply knowledge across boundaries, and in general be better problem solvers? What do you think?

When talking with a visiting prospective graduate student, we discuss the fact that our requirements include taking 10 classes (recently reduced from 12). The student seemed to think that's a very large number of classes to have to take.

I'm a big believer in graduate students taking classes. I'm obviously biased having had to suffer through many requirements as a graduate student at Berkeley. And I freely admit, some of the classes felt like suffering.

But the classes provided me with a strong basis to build on. I found classes good for introducing me to the basics of an area, so that I could understand the problems and communicate with people in that area. Classes also introduced me a much larger group of people, working in a larger variety of areas, than I would have experienced on my own.

And while here I'm certainly talking here about theory people getting to know about things outside of theory (as well as systems people getting to know some theory and AI and other things as well), I think the argument holds as well solely for the increasingly balkanized theory community just knowing about what each other is doing. These days, there seem to be boundaries between different areas of theory that are as high as boundaries between theory and systems. (See, for example, this recent post and comments on "European theory".)

I've heard the arguments against classes. The biggest is that they take time away from research. There are plenty of counter-arguments. (Most students don't really spend 40+ hours a week on research. It's important to train for the long-term future career and not just focus on research. There are important other benefits of classes -- meeting people and being able, if needed, to teach in multiple areas.) Other complaints focus on specific implementations. (Why should I have to take a graduate OS class if I took one as an undergraduate? Fine, let's find something else worthwhile for you to take.)

I think one reason for the trend in reducing or even eliminating class requirements is students generally don't like taking classes, especially in areas not directly related to their research. Why should they? It's work they have to do right now, and the payoff is generally long-term. As educators, we should find ways to make this tradeoff better when possible -- but more importantly, as educators, we have to explain clearly to the students that this type of education really is in their long-term interest.

To my mind, classes (and class requirements) are still a powerful tool for educating students on how to solve problems, including across boundaries. The trend away from classes, which should include both "core knowledge" for computer science as well as opportunities (or even requirements) to explore connections between CS and other fields, does not benefit us.


Anonymous said...

Are you training leaders or are the students in your lab just sheep. That may decide your answer. Taking classes, well outside your area is absolutely crucial to formulate your own problems and interests independent of your advisor. However, I have seen some professors hate exactly that fact. Infact, I couldnt take enough classes during my Ph.D. There was so much to learn so much to explore. The deep connections start getting really fascinating at the later end of your Ph.D, often allowing for stimulating afterclass conversations with the instructors. Classes allow collobrations with students at different stages of their Ph.D. The advantages are just too many, the sole disadvantage being yes you or your advisor may be slowed down in your primary project. As if that is the sole point of a Ph.D. Are you trying to create an independent researcher. Solving a very important problem should definitely be the focus but not the enitre scope.

Excessive credit requirements could be a problem if they are a bit restrictive, i.e. take X amount of classes in this area, dont take Business School class someting like that should be done with care. For schools in the lower tier it should be increasigly be possible to take course remotely. MIT open courseware has been just an amazing leveler for us non blue-bloods. It would be even better if somehow their was way I could take credits and interact with the instructor and class.

Anonymous said...

Theoretical computer science has found applications in traditionally non-CS areas such as game theory and computational biology, for example. So, when people claim we should make theorists gain breadth by making them take systems and AI courses...why "systems and AI"? Why not just a general breadth requirement which makes theorists take non-theory courses?

Michael Mitzenmacher said...

Because as a computer scientist, you should actually know something about computer science, besides theory.

I'm all for additional breadth requirements outside of traditional CS as well -- it makes sense for CS people to understand how computer science is used outside of computer science departments as well. And I understand there are tradeoffs. But that doesn't imply a computer scientist -- even a theoretical computer scientist -- shouldn't be broadly trained in computer science.

Anonymous said...

I think it is important and useful to consider what has changed about students' expectations in the last decade or so. I see at least three salient trends:

1. Many students come in with some research momentum. Having already co-authored papers as undergraduates, it is hard for them to accept that they need to focus majority of their effort on coursework again for the first couple of years of the PhD program.

2. Many students come in with a number of advanced courses under their belts: they either have Masters degrees or they took several graduate courses as undergraduates. This makes some of them feel that the marginal utility of yet another course in a particular area is very limited.

3. The nature of computer science research has changed: interdisciplinary work (with biology, economics, psychology, etc) is more and more common. Students interested in such research may actually feel that the course requirements are lacking in diversity and relevance. Frankly--if you look at them from appropriate distance--systems, theory, algorithms, programming languages, architecture, networks, etc., all blend into "core computer science" -- how many of those can one usefully take? Programs that rigidly require students to cover all of these areas may alienate interdisciplinary students.

This said, I think classes are a valuable component of PhD-level education. Many of the students' concerns can probably be alleviated by giving students a lot of flexibility and autonomy in designing their educational experience. Also, we need to recognize students' maturity and thirst for research by making sure that even introductory graduate courses teach students not only the basics of the subject but also the research methods of that discipline.

Michael Mitzenmacher said...

KZG --

You bring up good points that do need to be considered.

1. I don't think a majority of effort the first few years should necessarily go to classes. At 10 classes, and PhDs averaging (at least) 5 years, 10 classes works out to 1 class/semester. I'd much prefer students take classes as they go along, not frontload classes at the beginning (although that can be useful if someone needs to leave with a master's, which is why it's usually done that way...)

2. Students with Master's (at most institutions I know) take fewer classes (having classes or credit transferred in some way). I also think undergrads who have taken grad courses shouldn't have to re-take them-- but if they spent their college years going deep into CS and not developing breadth, then grad school is a good time for that.

3. I think it's very important that PhDs in computer science have a strong background in core CS -- I think there are many courses they should take in the core. But I also agree that students with interdisciplinary interests should be able to pursue them through classes.

I think, in the end, we agree on a lot. Classes are a good way to learn; but students need at least some flexibility to follow a program that will work for them. Details will vary from place to place, but classes should continue to be an important part of the program.

Anonymous said...

Because as a computer scientist, you should actually know something about computer science

My point was that computer science doesn't just consist of "theory, systems, AI" anymore. Computer science encompasses more now, yet the course requirements do not.

Michael Mitzenmacher said...

Anonymous 2+6:

I'm interpreting your argument to be, "Computer science is so expansive, we can't possibly require courses in all possible subareas, so why require courses in any? Instead, let's just require a number of classes outside one's main area."

To some extent, I agree. I think it's a bit extreme to say, "Each student needs to take 1 course in theory, 1 course in networking, 1 in AI, 1 in PL, 1 in graphics, 1 in OS, 1 in scientific computing, 1 in software engineering, 1 in hardware" and so on.

However, these are (among) the core areas in CS, and I think PhDs should be relatively knowledgeable across this body of work. Requiring courses in at least 4-6 of these areas seems like a good idea to me, with choices within groups (so a student needs to take some systems -- which may include networking, OS, etc.) as needed.

We could argue what things would really be considered core for these purposes, but to deny there is a core that students should learn about is something I disagree with.

mollishka said...

(NB: I'm an astronomy grad student.)

I'm personally glad that in my program emphasis was not put on classes because while I'm good at turning research into published papers, I totally suck at taking classes. I don't think my case is totally unusual; class-taking and research-doing are different skills. But I am glad that the classes I did take had a focus of "this is what these words refer to, and here is where you can go learn more should you ever need to know."

Anonymous said...

I am certain that the graduate classes I took during my CS Ph.D. at Harvard materially benefited my research, both during the period when I was in graduate school, and thereafter.

As it turns out, I took a lot of graduate classes while an undergrad at Yale, and the CHD (ah, memories) gave me credit for 2 of those classes that were very close in topic to Harvard grad class offerings.

The remaining 10 grad classes I took (well, maybe 9 of them :-) ) added facts, ideas, and techniques to my "toolkit" for research that I've used ever since. For example, it turns out that understanding branch prediction in modern CPUs is key to making sense of packet forwarding performance on commodity PC routers (see Eddie Kohler's TOCS paper on Click to see how C++ virtual functions wreck branch prediction's accuracy, and thus kill packet forwarding performance). So a grad class in computer architecture lets people in other subdisciplines, like networking, understand the networking systems they build better, even if they don't go on to design CPUs of their own.

It pains me when even systems Ph.D. students who are great hackers don't have a solid grasp of architecture--so much of systems is understanding the nuanced behavior of what you've built (if you don't, it probably doesn't perform as well as it could--and might not even work right), and how is that possible without a grad-level understanding of architecture?

Networking/systems people like me get a lot of out of grad theory classes, too, by the way (to offer the perspective on the other side of that fence). Michael Rabin's Randomized Algorithms class not only taught me practical techniques I have applied in my own research (e.g., Rabin fingerprints, used in Rabin-[no-relation], which were a central part of Autograph); perhaps more importantly, it (as HT phrased the importance of theory classes) "trained my mind." That's hard to measure, but I have no doubt it is true--I believe I emerged from that class able to more effectively and creatively design new algorithms for the systems I build.

James Aspnes (who arrived at Yale after I had graduated) has a great retort on the web for undergrads who question why they should study math as part of a CS undergrad degree: that studying math lets you "learn how to activate the parts of your brain that are good at mathematical-style reasoning when you do math—-the parts evolved to detect when the other primates in your primitive band of hunter-gatherers are cheating."

I think that's dead-on. And I think there's room for further activation of this brain region during a Ph.D., especially for systems students.

This is really just the "liberal arts" argument extended to classes in a Ph.D. program: exposure to many currents of thought broadens the student, and trains one to think.

BTW, why did the faculty reduce the number of classes from 12 to 10? Is it thought this will shorten students' completion time (and thus, more or less, save money) by letting them spend more time on research earlier? I strongly doubt it will have that effect, if so; seems only like a net lose.

...and when I was a grad student at Harvard, we had to walk between home and Aiken uphill, both ways...

Anonymous said...


Rabin fingerprints are of course not used in Rabin-Karp...mistakenly mentioned them in that context because they have a similar low-cost "sliding" property to the simpler fingerprinting function used in Rabin-Karp. (In fact, Dick actually did mention to me once that an earlier version of R-K used Rabin fingerprints. And the very end of the original R-K paper mentions Rabin fingerprints as an another family of good fingerprinting functions.) At any rate, I learned about Rabin fingerprints in Rabin's class, so the point on the value of theory classes for systems students still holds.

That'll teach me for saying anything about theory on a theorist's blog!

Unknown said...

A lot of your research has been in information theory. However, being "electrical engineering," information theory isn't required knowledge in any computer science department I know of, nor do the vast majority of computer science grad students take a single course on the topic (in spite of being exposed to its periphery in courses on networks, artificial intelligence, cryptography, and other areas). For many if not most CS theory folks, a course on information theory would probably be more useful than one on, say, operating systems or computer graphics, yet, for most programs, the latter better fills out the class requirements. (It works the other way too; my information theory brethren generally hadn't taken computer science theory, and certainly didn't take it in grad school, though I did.)

As I understand it, a Stanford computer science Ph.D. requires no classes (though most take them in order to satisfy knowledge requirements) whereas electrical engineering requires an astonishing 135 units, where a quarter-long graduate class is typically 3 units, and only 69 units can be independent study. That's 22 classes, more than double your ten, and an odd counterpoint to their computer science requirements.

Michael Mitzenmacher said...

M --

I agree that information theory would be very good for all CS theorists -- but that should count as fulfilling a theory requirement, not a CS breadth requirement, in my mind. That is, you're comparing apples and oranges. (And both apples and oranges are good for you.) And I agree that information theorists should take more traditional CS. Of course, I'm on record as believing the separation these two fields enjoy is a bizarre historical accident that is slowly being corrected over time.

Of course, having class requirements should only PROMOTE this kind of cross-fertilization. If you don't have any requirements, nobody is inspired to take classes, especially those outside their immediate area, anyway. I wouldn't REQUIRE all CS theorists to take information theory, but I'd certainly think it should be a standard option, and then people will start to figure it out on their own...

Also, hooray for Stanford EE. (Though 22 quarter classes = approx 15 semester classes, not so far off our previous requirement of 12...)

Anonymous said...

I think taking classes is extremely important for CS Grad students. There's a distressing "professionalism" in CS theory research, a utilitarian approach to knowledge. One of the comments here proves that further by referring to things learned in classes as "tools". If we are to claim that Computer Science is a science we have to inculcate the idea that the ability to make broad connections is as important as doing incremental work (I'm not claiming that it is more important). And broad connections cannot be made without breadth.

Perhaps if the emphasis on taking classes increases, CS depts will start offering more classes for grad students, and start seeing their job as turning out PhDs who have the breadth to do pathbreaking work if they choose to, while not losing the ability to hack away at one branch of the tree if that is their inclination.

Anonymous said...

I got my Master's and Ph.D. from Stanford EE and took/attended way more than 22 classes. It was probably more like 30. I learned a lot of stuff on my own as well, while being selective about the amount of time and effort put into any of the classes I was taking at a given time.

I was at Stanford for 7 1/2 years before I finally figured out what I was supposed to do to graduate; my very senior, hands-off advisor encouraged me to learn as much as possible. Since I chose to work at the intersection of physics, EE (information theory) and CS, with a strong mathematical flavor (quantum information theory), it turned out that there was always (and still is) more that is beneficial for me to know for my research. I now hold a well-paid long-term postdoc at a research lab where I have tons of freedom to continue learning and working on research.

I never could believe how my CS friends didn't have to take any classes. For me, the learning was always the most fun part. I actually can't believe I get paid to do what I do.

Anonymous said...

This is, I think, one benefit of requiring a master before entering a PhD program. In Germany, students spend 5 years taking classes on various level and areas before they are allowed to start as PhD candidates. They don't have to take classes anylonger and can spend (besides teaching activities etc.) their time on doing research. To me, this is a good way of handling things, as those who want to do research can do it without bothering about classes.

Yasser Taima said...

It's interesting that people from well-regarded programs encourage taking classes as an important part of a PhD's education. Where I started a PhD in electrical engineering, the requirement got watered down from 9 to 3 a year later. Still, I tried to follow the Stanford EE model and took 26 courses, including many in mathematics. The result was that the department proceeded to vigorously encourage me to leave. At this "top ten" institution, the chair (who was my adviser) made it clear that he wanted to increase the ranking by getting students to take as few classes as possible and publish more. "Publish what?" was my question back to him, and that was obviously the end of it. I'm now headed to a "bottom ten" program, where I hope to actually learn something worthy of publication and not be bothered by the paper mill model of scientific endeavor.