I think that Java is not a good fit for learning low level internals of how computers work, operating systems, or computer architecture in general. Assembler, C, Fortran and other early generation languages are a better fit.
To learn modern principles of software engineering, C++, Java, Object Pascal or Smalltalk are better suited for the task. Trying to teach OO principles with C or Pascal is very difficult, these languages are inheritely procedural and not tailor to the oo paradigm.
Yet, there are areas where I believe Java excels as a teaching tool; one of these areas in Threads. Java's Threading constructs make it easy for beginners to grasp the basic concepts of concurrent programming while other languages like C and C++ make the topic extremely complicated. In conclusion, different languages are better suited for some areas of Computer Science. Also, exposure to multiple languages is an invaluable experience. Remember learning how to think recursively using Lisp or Scheme?. Java place is in Software Engineering, as an OO learning tool. Try to do highly distributed or peer-2-peer programming with C. Good luck. My 2 cents.
What about a Flash Like environment using SVG?.
I think that Java is not a good fit for learning low level internals of how computers work, operating systems, or computer architecture in general. Assembler, C, Fortran and other early generation languages are a better fit. To learn modern principles of software engineering, C++, Java, Object Pascal or Smalltalk are better suited for the task. Trying to teach OO principles with C or Pascal is very difficult, these languages are inheritely procedural and not tailor to the oo paradigm. Yet, there are areas where I believe Java excels as a teaching tool; one of these areas in Threads. Java's Threading constructs make it easy for beginners to grasp the basic concepts of concurrent programming while other languages like C and C++ make the topic extremely complicated. In conclusion, different languages are better suited for some areas of Computer Science. Also, exposure to multiple languages is an invaluable experience. Remember learning how to think recursively using Lisp or Scheme?. Java place is in Software Engineering, as an OO learning tool. Try to do highly distributed or peer-2-peer programming with C. Good luck. My 2 cents.