? Java is Bad for Students ?

Slashdot had an article in January 2008 titled Professors Slam Java As "Damaging" To Students . In case the article is gone, it went something like this:

Posted by kdawson on Tuesday January 08, @03:18AM
from the we-had-to-use-the-letter-o dept.
Education Programming jfmiller called to our attention two professors emeritus of computer science at New York University who have penned an article titled Computer Science Education: Where Are the Software Engineers of Tomorrow? in which they berate their university, and others, for not teaching solid languages like C, C++, Lisp, and ADA. The submitter wonders whether any CS students or professors would care to respond. Quoting the article: "The resulting set of skills [from today's educational practices] is insufficient for today's software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals... Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging."

From my point of view, this represents a microcosm of the changes that are beginning to convulse computer science. We have the "old style" – very systems-oriented and emphasizing low-level programming, efficiency over all other criteria, connections with hardware, and details of how programming languages are implemented.

Contrast that with the "new style" – more abstraction; emphasis on a spectrum of criteria including reliability, maintenance, usability, security; connections with other software components and people; and software development that is independent of programming language.

Which is more important? Both of course!

For every engineer that industry needs with an "old style" education, industry needs 100 engineers with the "new style" education. So it's easy to argue that a "new style" education is more important.

On the other hand, if we teach somebody in a "new style" education, it's very hard for that person to later on pick up the system-level "old style" skills. But if we teach somebody in an "old style" manner, that person can learn the relevant "new style" skills on the job. So it's easy to argue that the "old style" education is more important. (Unless you're a program manager, in which case you complain to the universities that we aren't preparing people for actual work!)

The obvious compromise is that we need both. Just like Physics split into Physics and Engineering a century ago, Computing will split into a small, very technical and very hard field, and a much larger applied field (or several fields).

Pinning this macro change in computing on a single language, Java, is naive and narrow. By the way, very similar arguments were used to disparage C in the 1980s and Fortran in the 1960s.

– Jeff Offutt, January 2008