A prominent professor says that university computer science programs deserve a failing grade. Todays U.S. grads are not prepared to compete in the global high tech market.
A conversation with Robert Dewar is enough to make you wonder about the future of the American software engineer. Dewar, a professor emeritus of computer science at New York University
, believes that U.S. colleges are turning out programmers who are theres no nice way to say this essentially incompetent.
To support his claim, Dewar penned a scathing broadside decrying todays college-level computer science training. (The article was co-authored by Edmond Schonberg, also a CS professor emeritus at NYU.) Entitled Computer Science Education: Where are the Software Engineers of Tomorrow?, the widely read article has prompted heated discussion throughout the tech industry.
Professor emeritus, NYU
To sum up Dewars argument: todays college computer science programs arent rigorous enough, and dont promote in-depth thinking and problem solving. Instead, in an effort to boost enrollment, CS programs focus on easily accessible curricula, and so fail to prepare students to compete with their international peers.
One of the articles main points (one that was misunderstood, Dewar tells me) is that the adoption of Java as a first programming language in college courses has led to this decline. Not exactly. Yes, Dewar believes that Javas graphic libraries allow students to cobble together software without understanding the underlying source code.
But the problem with CS programs goes far beyond their focus on Java, he says.
A lot of it is, Lets make this all more fun. You know, Math is not fun, lets reduce math requirements. Algorithms are not fun, lets get rid of them. Ewww graphic libraries, theyre fun. Lets have people mess with libraries. And [forget] all this business about command line well have people use nice visual interfaces where they can point and click and do fancy graphic stuff and have fun."
Dewar says his email in-box is crammed full of positive responses to his article, from students as well as employers. Many readers have thanked him for speaking up about a situation they believe needs addressing, he says.
One email was from an IT staffer who is working with a junior programmer. The older worker suggested that the young engineer check the call stack to see about a problem, but unfortunately, hed never heard of a call stack.
Mama, Dont Let Your Babies Grow Up to be Cowboys (or Computer Programmers)
At fault, in Dewars view, are universities that are desperate to make up for lower enrollment in CS programs even if that means gutting the programs.
Its widely acknowledged that enrollments in computer science programs have declined. The chief causes: the dotcom crash made a CS career seem scary, and the never-ending headlines about outsourcing makes it seem even scarier. Once seen as a reliable meal ticket, some concerned parents now view CS with an anxiety usually reserved for Sociology or Philosophy degrees. Why waste your time?
College administrators are understandably alarmed by smaller student head counts. Universities tend to be in the raw numbers mode, Dewar says. Oh my God, the number of computer science majors has dropped by a factor of two, how are we going to reverse that?
Theyve responded, he claims, by dumbing down programs, hoping to make them more accessible and popular. Aspects of curriculum that are too demanding, or perceived as tedious, are downplayed in favor of simplified material that attracts a larger enrollment. This effort is counterproductive, Dewar says.
To me, raw numbers are not necessarily the first concern. The first concern is that people get a good education.
These students who have been spoon-fed easy material arent prepared to compete globally. Dewar, who also co-owns a software company and so deals with clients and programmers internationally, says, We see French engineers much better trained than American engineers, coming out of school.
Okay, So Hes Not Fond of Java
One of the most ill-considered steps that universities took was to adopt Java as the most widely used language in introductory programming courses, Dewar says. Driving this change was a desire to make CS programs more popular.
He recalls a discussion among the NYU faculty several years ago when they decided to switch the introductory language from Pascal to Java. Pascal had never been that successful in industry, yet this lack of market acceptance didnt matter; learning Pascal tended to promote solid programming practices.
They taught Pascal because it seemed to be pedagogically the best choice, Dewar says.
Yet the switch to Java was made purely on the basis of perceived student demand. To be sure, its a popular code for Web applications and is relatively easy for novices to navigate. Yet it is exactly this ease that goes to the core of whats wrong with todays CS curriculums.
Professor emeritus, NYU
If you go into a store and buy a Java book, its 1,200 pages; 300 pages are the language and 900 pages are miscellaneous libraries. And it is true that you can sort of cobble things together in Java very easily
so you can sort of throw things together with minimal knowledge, he says. But to me, thats not software engineering, thats some kind of consuming-level programming.
In Dewars view, todays young Java jockey is not so much a programmer as a Programmer Wanna-Be. For example, Many Java developers have no idea what storage management is about. So consequently theyre quite surprised if they have a storage leak which results from them not being careful about purging junk from their accumulating data structures.
Furthermore, The trouble with Java is that it hides a lot of stuff
it hides the issue of compiling what is a compiler doing? I think if I was to talk to a Java student coming out, they might not even know the word compiler. If they do, Im sure I wont get a clear picture if I asked, What does a compiler do?
The most pressing problem, in Dewars view: If people come out of school and they know Java and web programming, and they know how to put things together from libraries, thats just the kind of skills that are not going to be demand. Jobs requiring nothing more than these low-level skills set can easily be shipped off to low wage countries.
In short, todays Java library cobbler is tomorrows pizza delivery man.
Who should (and Shouldnt) be in Computer Science?
It takes a person with a very specific set of inclinations and talents to be a computer programmer, Dewar notes. Its these specific people who colleges should gear their CS programs for not the mass of semi-interested people who use pre-built libraries to create uninspired apps.
Most of us who got into programming really did it because we find it fun. We find the intellectual challenge fun. We find being faced with tricky problems, then figuring out interesting algorithmic solutions, fun. We find clever data structures that solve some interesting problem fun.
Maybe its not fun to a bigger audience, but computer science education should be more about finding those people who like that kind of fun, and catering to them, rather than [making it all easy].
If people find it boring to compute some interesting value, then run that program and get a value of 42 when it should be 83, and figure out why theyve gotten 42 instead of 83, if they find that tedious and boring, they really arent the kind of people we need.