To support his claim, Dewar penned a scathing broadside decrying today’s 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.
To sum up Dewar’s argument: today’s college computer science programs aren’t rigorous enough, and don’t 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 article’s 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 Java’s 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, ‘Let’s make this all more fun.’ You know, ‘Math is not fun, let’s reduce math requirements. Algorithms are not fun, let’s get rid of them. Ewww – graphic libraries, they’re fun. Let’s have people mess with libraries. And [forget] all this business about ‘command line’ – we’ll 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, “he’d never heard of a call stack.”
Mama, Don’t Let Your Babies Grow Up to be Cowboys (or Computer Programmers)
At fault, in Dewar’s view, are universities that are desperate to make up for lower enrollment in CS programs – even if that means gutting the programs.
It’s 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?’”
They’ve 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 aren’t 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 He’s 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 didn’t 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, it’s 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 what’s wrong with today’s CS curriculums.
“If you go into a store and buy a Java book, it’s 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, that’s not software engineering, that’s some kind of consuming-level programming.”
In Dewar’s view, today’s 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 they’re 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, I’m sure I won’t get a clear picture if I asked, ‘What does a compiler do?’”
The most pressing problem, in Dewar’s view: “If people come out of school and they know Java and web programming, and they know how to put things together from libraries, that’s 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, today’s Java library cobbler is tomorrow’s pizza delivery man.
Who should (and Shouldn’t) be in Computer Science?
It takes a person with a very specific set of inclinations and talents to be a computer programmer, Dewar notes. It’s 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 it’s 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 they’ve gotten 42 instead of 83, if they find that tedious and boring, they really aren’t the kind of people we need.”