The Important Things We Are Leaving Out of Computer Science Education

Recently eWeek had a great article entitled "Programming Grads Meet a Skills Gap in the Real World" that I think every computer science/software engineering/computer engineering teacher at any level you read. Agree or disagree it is a powerful and important story. Not long ago the VP of a large development group told me that it takes an average of a year and a half to take a graduate from a top ranked computer science (college) program and make them a fully productive member of the development team.

Think about that for a minute. A year and a half after graduating with a degree in computer science or closely related field. That's a long time. And these graduates are not being hired at cheap rates either.

In the article John Montgomery (his team at Microsoft created the Popfly mashup tool I have written about before) lists six things that he'd like to see computer science programs teach. The quotes items are from John.

  1. Communication skills. "The best developers are often the ones who can explain problems and solutions the most clearly to others"
  2. Teamwork "Very few developers really work alone"
  3. Analytical skills, particularly around ambiguous problems.  "It's important that developers understand the intention of what they're being asked to do as well as the implications of a solution they're thinking of and can weight and communicate these"
  4. An understanding of development processes. "Not a theoretical one—they need to work on teams that use formal, top-down development process, agile development, teams with other developers, teams with test processes, and so on"
  5. An ability to learn on the fly.
  6. Competence in several programming languages. "C++ is typically a must; C# or some other managed-code language is also mandatory"

Some of these are difficult to teach but some are easy. Even high school students can easily learn multiple computer languages. In fact I wonder if that isn't the easiest time for this to happen. In high school there thinking is not as calcified as it will be as they age. The article mentions more dynamic languages like JavaScript and that while it is valuable to learn these different programming paradigms the most valuable thing is to know when to use which.

So what do you think of this list? I know that a lot of educators resist the notion of university as a place to prepare workers for industry but it seems to me that all of these skills are required for researchers and graduate students. Wouldn't adding more of this to the curriculum help everyone? I think so.

BTW what do you think of the rest of the article?