"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 reference to Java might be misleading, the authors also say Java is important in learning to code!
I am myself a Java developer and I started when the language was born.
Nevertheless, I can understand where the professors are coming from when they state:
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.
I started to write Java programs with vi (now using eclipse ;-) and I would say that it is indeed necessary to understand pointers to write complex (especially multi-threaded) Java programs. Somebody not understanding pointers will have no idea that every Java Object (even arrays) are accessed through references which is indeed a fancy name for a pointer. So all Java variables except primitive types behave just like a pointer would. I can't see how one could be an expert in Java without understanding this!
I see the point for teaching C and at minimum a few other languages (I did lisp, prolog, ml, assembly for Intel and Motorola and a few others). I am just surprised they don't suggest also at least one assembly language as mandatory.
A student would also need to learn at least a minimum on how the hardware works, (hardrive, processor, cache, bus, memory, etc.)
Why ? Because knowing all the components (hardware and software), knowing the machine and all the layers is the only way to be able to write efficient programs !
We are supposed to have nice abstractions to work more easily knowing only a few layers but in my experience this is a myth and this is how we end up with trashy programs, when the person who wrote it didn't have a clue on how the other layers worked and the nasty impact his code would have on those other layers.
Here is a 2002 article that explains the phenomenon a little more, it is called the Leaky Abstractions
If we are not aware of this, we end up forming "fast-food" programmers instead of the software engineers of tomorrow. I guess that's what the professors were saying.
Then again, in a sense, nothing new here ;-) I have been knowing this for a long time and my guess is that I am not alone ! ;-)