Computer Science Isn't Programming

Jim Morris, who is a professor of computer science and dean of Carnegie Mellon University's West Coast campus has an article on Computer Science education in the Pittsburgh Post-Gazette. He says:

the vocational nature of computer science reduces its appeal to many students. Contrast what computer careers seem to offer with the promise of the traditional sciences that offer intellectual grandeur and the opportunity for a rewarding career that helps humanity. Since 1990, the number of undergraduate degrees awarded in the biological sciences has increased 70 percent. During the same period, the number of computer science degrees awarded each year has dropped by 10 percent. Today, we are producing about 25,000 computer science bachelor's degrees annually. The life sciences produce six times as many.

The current approaches to computer science education fail to teach the science of computing. As a result, they fail to inspire the very best and brightest young minds to enter the field.
From Programming doesn't begin to define computer science
Referenced Wed Jul 07 2004 17:52:43 GMT-0400

I've got at least one corroborating data point: when the boom was happening, I had kids come to my office all the time, usually after their second year, when they get the living tar beat out of them with several large programming projects, and say something like "I don't like programming. Should I stay in CS?" I've had various feelings about that.

I usually told them that I knew lots of people who had degrees in CS but didn't program for a living. Some were system administrators, network engineers, lawyers, or doctors and lots were salespeople.

As Morris says, there are lots of interesting challenges in CS that go well beyond programming, but its difficult to appreciate them without at least an understanding of programming. I usually advised students that even if they didn't end up programming for a living, learning to program would give them a special perspective. Here are a few things I think they might get out of programming:

  • People who program have a unique understanding of the relationship between static representations and dynamic processes (I have a theory that music composition students get a similar understanding).
  • Participating in programming projects teaches you why its hard to get software right. You understand the non-linearity and brittleness of software.
  • Programming as part of a CS degree should also teach students (although I'm afraid sometimes we fail) why learning to write small programs doesn't qualify you to engineer large software projects. We do a worse job at teaching how large software projects can be successful.

What other things do you think learning to program teaches a CS major even if the CS major isn't going to program for a living? I'd like your perspective.