Dudironimis
So I took a Java class about a year ago, and I hated Java. I'm taking another one this semester with a different teacher, and I don't dislike it so much now. I actually enjoy it a bit. Does that mean I had a bad professor the first time around? In between I took a C++ class with a professor that explained everything pretty well, so maybe this professor isn't much better, but due to my knowledge of a related language Java seems easier and more fun.
What do you think?
While high level languages are great and help with developer productivity, in my opinion it's a horrible idea to teach people higher level languages first.
- Start with Assembly (it doesn't have to be x86, there are simplified archs designed for education that only run in a VM).
- Then learn the basics of C (esp. pointer arithmetic!) and how C is converted to Assembly.
- Then learn the basics of C++ (esp. classes) and how they are implemented as essentially syntax sugar.
Then, and only then, should people learn about higher level languages. Otherwise people get stuck with misconceptions which can take a long time to unlearn.
It's also important to learn the basics of how a garbage collector works. Perhaps this should be taught in C++ first.
Of course, you don't need to use Assembly to program in Java but the understanding of how your toolchain works is invaluable.
After this I would highly recommend learning even higher level languages (F# or Haskell or some equivalent). Even if you don't use these commonly, your experience will change how you program in languages like Java.
It seems like your C++ class has helped you unlearn your misconceptions.