Requirements

Our department has recently been revisiting the subject of PhD competency and breadth requirements, largely spurred by figuring out the logistics of moving students down to NYC to work with advisers at the new tech campus. It seems unlikely that our current structure will change much, but it’s interesting to consider the current set of course and exam requirements and what they mean.

The goal of the requirements is simple: students should be competent in core areas of computer science at an undergraduate level, and they should be exposed to a broad set of topics at the graduate level. Graduate school may not emphasize the ideals of the well-rounded student in the same way that undergraduate programs do, but we’d prefer our students to come out knowing about more than their particular sub-sub-field of computer science. The requirements we have provide a guide to what the department feels a prototypical broadly-educated computer scientist ought to know, and there is a clause that explicitly states that we’re flexible for non-traditional areas that may require substantial breadth outside of computer science as well.

At the moment, we have competency requirements in four research areas: AI, programming languages, systems, and theory. We list “scientific computing and applications” as an area as well, but we have no competency requirement there. I was not around when the scientific computing requirement was struck, but I think there is a plausible argument that it not be required: many undergraduates with otherwise excellent computer science training have nonetheless never taken scientific computing. The competency requirement is supposed to emphasize a common core that we think most undergraduates should basically know when they start graduate school, and scientific computing no longer falls in that category. I mostly agree with this, though I’ve noticed that Cornell undergraduate can also finish a CS degree without taking classes in AI or PL.

But there is also a more positive view: we shouldn’t have an explicit requirement in scientific computing for the same reason we don’t have requirements in basic programming, discrete mathematics, or elementary probability. These things are so fundamental to CS that we assume a graduate student wouldn’t ever have been admitted without knowing about them; and a student that didn’t know about these things would have a hard time passing the other competency requirement. Knowing how to multiply matrices and solve linear systems, or how to reason about approximations and iterations, ought to be equally fundamental, in the sense that a student who knows nothing of these topics would have a hard time passing competency requirements in areas like theory or AI. This may not actually be true now, but as competency in dealing with large data sets becomes ever more part of the “core” of computer science, I have a hard time seeing how a little knowledge of numerical computing cannot follow.

Of course, I’d also love for students to know more about numerical linear algebra, polynomial interpolation, numerical differentiation and quadrature, and methods for solving differential equations. For their own protection, I hope some learn as well about the vagaries of floating point arithmetic and basic error analysis. But even at my most optimistic, I have a hard time seeing a future in which these topics move back into our list of topics that we all think computer scientists must know.

Comments

blog comments powered by Disqus
Fork me on GitHub