Originally posted by zootm
But direct memory manipulation isn't a good part of that, is my point. If you're learning about abstract concepts, it's more important to learn data structures, and algorithms, and how they're represented. The actual nitty-gritty of how memory is allocated and the like is rarely important (concepts like the stack and the heap are equally applicable to garbage-collected languages).
I don't think you're going to be able to really understand a data structure and not understand direct memory manipulation at the same time—implementing a linked list using pointers basically means you must
understand the memory manipulation behind it, and therefore the data structure itself, including its most important characteristics. It's not that you couldn't
understand without doing it, but doing it makes
you understand it.
It's a practical thing. It's not that you couldn't teach the same concepts in Java, it's that without being very careful, you're going to wind up with many students not really understanding what they're doing. An introductory course in Java? Fine. But I think you're going to just wind up with the same dropouts/incompetents later, rather than earlier, because understanding the pointer manipulation which is going on anyway in Java and actually doing the pointer manipulation in C is too close.
It's too easy to make an intro Java class which "anyone" could get, where the implication is "this is programming", when it's really not (well, it's junior-level programming, perhaps). It's sort of dishonest.
Note that I don't really think it's a bad idea to use Java, per se
, or Python, or really anything (real-world languages are better, for obvious reasons). (Actually I kind of like the idea of using Python...) It's just that I think that the kind of professor who could teach effectively with Java would probably not want to use Java.