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?

Comments (4)

  1. I think 1-3 and 5 would apply to any grad really.   Its not a new thing for business to complain about college grads.  But then college is not exactly vocational training so I suspect there will always be a gap.

  2. orcmid says:

    I’m on the periphery of this, because I don’t work with any large teams at this point in life.  Yet most of what the article says, especially John Montgomery’s observations, resonate with me and what I am able to observe.  I also think the on-ramp for novices and early students is egregious.  Early exposure to important practices and development processes — what it takes to address some meaningful software lifecycle — is seriously lacking, as is any foundational understanding of the tools themselves and how good design is achieved (in regard to internal architecture and user experience both).

    The Masters Degree emphasis is a little worrisome.  Somehow, there needs to be some kind of practical requirement in there.  I have this frightening image of a glut of M.Sc in CS with no industrial experience flooding the workforce (worse yet, ill-conceived start-ups).  

  3. Sushant Bhatia says:

    "C++ is typically a must".

    I cannot agree with this. While c++ does serve a purpose, it is just a tool. The ability to learn to use a tool is what’s important.

    As far as exposure to languages go, I think that a knowledge of Functional and Non-Functional programming languages is important so that programmers learn the styles used in both and when to use them. (Not to mention that languages like C# are integrating both).

    I’m also on the fence about 4. Again, its important to be exposed to that and to know about it when it does get used but in the real world, there are relatively few companies that really employ those techniques. I’ve been luck to have been exposed to formal processes and even luckier to have worked for someone who was open to my suggestion of implementing formal processes.

    I also question the 1.5 years. I didn’t go to a "top school" but I believe that I was "productive" far quicker than that. Most of the developers I know are in the same boat as me (one is even head of IT for a company).

    The problem with college is that students can just get by if they study hard and do what is expected of them. It takes true passion to spend your summer in a dark room coding something that perhaps 10 people would ever use or creating a hardware/software symbiosis that could be marketed one day. Companies need to hunt for these kinds of individuals…not the ones that have a 4.0gpa and have done squat-all outside of their studies.

    Thats my 2 cents! 🙂

  4. I teach high school computer classes that deal mostly with the software end of computers. I have my students do many presentations, which they grumble at. Thanks for the article reference, I will use it to show them another reason to learn communications skills.

Skip to main content