@Waccoon
You have some valid points which I'd like to discuss, but due to lack of time I'm forced to restrict my answer to the programmer's attitude issue.
What you say about bad habits is quite true.
But I'd like to point out that IMHO the problems derived from moving to a more sophisticated language can *not* be looked at as the simpler language's fault! It's totally the programmer's.
I mean that when one decides to change language, firstly he must bear in mind that the approach could be totally different and thus he does not have to expect to be able to work with the very same mindset.
Of course, if the programmer has never experienced that before and he is not told this by anyone he certainly can't be blamed for expecting what he won't find ;-)
The issue about quality programming is strictly related to this, too.
Those bad habits you mention are surely a factor, which fortunately tends to fade away as the programmer progresses in his learning.
My advice in general is starting with a straightforward language to get a good feeling about what programming is: it not only helps understanding the techical aspects, but, first of all, is a kind of test of the real interest in programming; a complicated language may make a potentially good - but newbie - programmer run away forever.
The second step, once become totally familiar with it, after serious efforts and having acquired in-depth knowledge, would be moving to a the lowest level possible - according to one's own tastes/intentions, of course.
Personally, after learning BASIC on the C=64 and working hard with AMOS Pro on the Amiga, I moved to asm: that really opened the world of programming - with that move you start seeing what happens in that grey box. A valuable additional experience has been HW hitting-and-learning-and-hitting-and... , which, apart from the pleasure of doing it, opened my eyes completely.
I think that it can be said that after a similar experience the programmer really becomes better in general because he then can "see" what's behind any other higher level mechanism and thus he automatically produces better software - f.ex. AMOS programming benefits a *lot* from this: more elaborate and efficient things can be done with respect to almost any aspect.
[BTW: I think I have rewritten *all* my pre-asm projects in the late years just because I could not stand the inefficiencies of my old code :-D A look at the game "Follia NBA FE" on Aminet can give a good idea - yes, some good, pleain, self-advertising :-P]
I'm not saying that this path is the only way to go in order to become a good programmer, but I do think it's the best. Another reason is that asm, in opposition to what it could seem, shapes a clean mentality, provided that the programmer does care about producing clean apps (and that's an aspect that no language can ever radically affect).
Regards,
saimo