First of all: I am not interested in a flamewar. I do not discuss to win an argument, I discuss to get some insight. Best discussions are the one you can learn from. So this is the only reason I will ask you some questions.
If I get the feeling that this is getting out of hand (turning into something for the purpose of arguing) I will withdraw from the discussion, because I don't want to waste my time with this shit.
we all also should be providing evidence to support our views.
I think you can't find evidence for everything. If you could, there wouldn't be so much flamewars about which language is the best. You also didn't back up all of your statements.
Do you mind to elaborate on this:
The Java VM is pretty terrible
@Daemon:
2. Java seems to peomote some odd/poor programming practices from what I've seen.
Can you explain this a little bit?
___________________________________________
Now some of my thoughts: People should see languages as what they are: A tool to achieve something. They are no religion.
Every tool was designed for a certain task. Some are like a swiss army, designed to do everything a bit. Others fill a niche. And that is why there will never be a language that is superior to all other languages. No language can be good at everything.
During arguments people often forget about the purpose the language was designed for. I.e.: There is no need to complain about the fact that Java is bad at low level programming. It was never made for this. You also wouldn't complain that a screwdriver is bad at banging a nail into the wall. Just use the right tool for your task.
There are languages that where designed as beginner languages, designed to learn programming the first time. I.e. Basic. They are worth some consideration in this discussion. Is it good to design a language just for learning in the first place? Is it good to have bicycles with training wheels? That really depends on the person imho. Someone who needs support and fast results to keep the motivation may be better of with an easy language.
Someone who doesn't care about that, who is rather into the challenging stuff, is better off with a language that is more complicated and causes more frustrating situations, but will make you learn more as well.
So if someone asks me which language to learn first, I would ask, what for, how serious and what the personal goals are (becoming a good programmer? getting stuff done?). Only then there might be an answer that actually helps.
Here are a lot of arguments against Java per se, which makes me want to write advantages, just to balance it a little bit. But for now I will leave it like that, because that leads away from the original topic. Although I use Java a lot, it is not my favourite language. I see a lot of flaws, but I have other reasons for that than most people seem to have.
Like I said: It is not that it is slowlier than C can possibly be and that is is bad at low level stuff. That is the tradeoff you have to make in order to get the safety and portability that Java provides. You can't make a language safer without removing control from the programmer. You can't make a language highly portable and with direct low level access at the same time that squeezes every tiny bit of performance you can get. So I don't see these as real arguments. They are only important if you have a certain task to solve, but not if you want to compare languages without any context given.
As for java vs c++ I still think c++ wins.
Saying C++ is better than Java without any context (a task or a problem to solve) is also like saying a hammer is better than screwdriver.
You have to give it a context to make this sentence valid.
Personal preference shouldn't play a role when advising a language for a beginner. Sometimes I prefer Java just because I am better in it than in another language and I want to get something done without looking up everything (to cut a long story short: it is lazyness). That is personal preference, but should never be an argument for another person to use this language rather than another.