What’s in a CS degree?

Posted: 28 January 2008 in Uncategorized
Tags: , , , , , , , ,

Just what value is there in getting a degree in Computer Science (CS)? Are new graduates competent programmers? Is that the purpose of a CS degree? Should companies be spending money to train new hires out of college in the programming languages and practices that they use?

Robert Dewar is a professor emeritus at NYU in computer science, and he believes that the status of software engineers in America is in danger due to general incompetence of new graduates. The long and the short of it is that after the dot-com bubble burst, and computer science enrollment at universities plummeted, schools restructured their programs to be more fun. Essentially, they were dumbed down. Specifically, the focus has shifted away from math and the theory of computation. Students are not taught a wide range of programming practices, but instead are trained to rely on large software libraries in a sort of “cookbook” approach. That is, students can assemble a solution to a known problem (in Java), but they are woefully undertrained for solving actual problems in the wild with “more practical” programming skills.

Dewar cites Ada as a language frequently used by a company he helped found and that it is getting harder and harder to recruit people with the proper skillset. What is most interesting to me is that he attributes students’ inability to tackle tougher programming problems to the teaching of Java as the first programming language in schools. For each programming language, there are certain mental paradigms that you learn. One thing you only touch on briefly in Java are pointers. You have to know about them if you do any sort of serious code in terms of pass-by-value versus pass-by-reference, but the complexity level is nothing compared to C/C++.

But Java is only part of it, Dewar says. The real problem is the reduction of focus on math and algorithms. In my CS program, I was required to take two math and one statistics class, three classes on algorithms (two of them introductory), and one on the theory of computation. There were a few of the standard CS classes like computer architecture, operating systems, etc. One thing I complained about in my last semester was the fact that I didn’t feel like I had been taught to program expertly in any particular language. A classmate said the purpose wasn’t to teach us a particular language, but to think like a programmer. We would become experts in a particular language in our jobs.

There is some merit in that idea, and I believe that is the intent of what Dewar is talking about. He’s not saying we should become Java or C# gurus by the time we’re done with college, but we should be able to switch to any language and be able to pick up the concepts that the language relies on. Sufficient knowledge of computer architecture is also something every programmer should have.

Here is my theory. CS students are being sufficiently taught to be software engineers. All the stuff Dewar talks about, I have heard of in some of my undergrad classes (which was at the University of South Carolina, by the way). The problem comes from the ease of passing those classes. I would help other people in some of my more advanced classes, and they would be tripped up on simple programming concepts sometimes. It wouldn’t look good for a program to have half the kids failing, but in truth, they probably should. College is the American bar mitzvah for young people nowadays. At least if your families are relatively affluent. It’s easy to get in to many schools and it’s easy to skate by without really getting the topic. Is it because failing a student hurts revenue (no more tuition)?

In the end, you are responsible for your own competence. The school can’t make you learn anything, it’s all up to you. Maybe there are better languages to teach new students, but maybe there aren’t. Maybe it doesn’t really matter, just like learning Chinese as your first language doesn’t make you better at math than learning English. The key is that you can’t rely on one single skillset to take you through life.

Comments are closed.