Saturday, March 11, 2006

What Should be in a CS Curriculum?

I came across Dan Zambonini's blog posting "What would you put in a Computer Science Curriculum?" recently. Definitely interesting, but I think he misses the point of a CS degree. It's not meant to teach all sorts of low-level, specific, real-world tasks.

The problem is that for every list of skills Dan can come up with (and a few are heavily slanted towards his specialties, I noticed), I can come up with another that would arguably be just as useful to someone in the "real world" who was trying to get a programming job. The true point of a CS degree is to teach the underlying theory of computation, algorithms, networks, etc. Also don't forget the Math - all the aforementioned topics require a good understanding of mathematics. Once the erstwhile grad starts working, they can apply what they learned and will pick up what they need over time (and will do it much more quickly then if they went to a "trade school" CS program like Dan describes).

Let's face it - some real-world skills need an understanding of theory, for example algorithm optimization, or crafting a parser while writing a domain-specific language. If you are looking for real-world experience in a college grad, your hiring practices need adjustment, or go ahead and hire someone with an MIS degree, who learned very little math and theory, but plenty of Java - just know that you are getting someone who might be incapable of venturing outside of the domain you hired them for.

As one who graduated from a CS program myself (UMASS Amherst), years later I am glad my curriculum included plenty of theory. That's not to say that I didn't program - I did plenty of that while I was there, also. My Senior course on compiler design included theory (itself presumed discrete math, the theory of languages and grammars, and algorithm design), but also included a semester-long project crafting a real compiler. It was built up in pieces as the semester progressed, and we learned the parts we needed to continue.

To be fair, Dan's list of topics does include some good basics - like database theory and writing skills. I would be less worried about having experience with language "X", again, someone well-versed in theory can pick up a new computer language very quickly (This article talks about the flawed way in which many students are taught to "program" - by learning a specific language's syntax, rather than actually learning to solve problems with computers). If I were hiring a programmer fresh out of a CS program, here is what I would like to see at a minimum:
  • Calculus, discrete math, statistics
  • Technical writing
  • Algorithm design and analysis
  • Computer architecture
  • Theory of Networks
  • Theory of computer languages
  • Theory of computation
  • Some experience with the various types of languages by domain - functional, logic, procedural
  • Database theory
  • Software engineering
  • Computer Security

Technorati Tags: ,

1 comment:

Bill Wright said...

After going through the excellent CS + Math program at Grove City College, it's telling when I find people impressed by API's and or stuck particular languages - look at all the 500 page books on XML, MVC implementations, scripting techniques - stuff a properly prepared person of average intelligence can intuit/learn in an afternoon and sort of hone over time on their own as needed.

Can we find anyone who regrets going through a real CS program including foundational maths e.g. discrete, calc, plus computing theory, i.e. how to reduce complexity through computing?

Undergrads can pick up current coding tricks at their internships, so they can go into their 1st job saying:

(1) I have demonstrated by ability to pick up current technology

(2) My education equips me to solve one real problem in my first six months on the job.

Who cares about how many lines of .NET code you wrote in college? Or how many proprietary computing methods you have acquired? Bare coding ability is available wholesale overseas at under $5/hr.

Back to calc - obviously that's a real sore topic for some people. To the person who thinks that the avg calc professor doesn't convey enough enthusiasm - the fact that freshman calc class is often the first academic situation in which a student is expected to be self-motivated rather than being entertained into learning should not place the instructor under an obligation to impart a love of learning for the first time into each and every student. Educators try their best, but once someone arrives in calc class they either do or do not already have what it takes to acquire and enjoy the material. Students who succeed have a previous love of learning that started when they were young, 9-12 years old! They are also persistent (fail once? Try again, and whatever it takes, make it through the second time around, it's your last chance!)