Actually I disagree on your first point. My first job was maintainenance programming, and for some reason I stuck around and did it for 3 years. That has taught me the suck of trying to maintain and work with shitty code.
Now, X years later I still tell stories about that first job, and I always remember how I felt maintaining spaghetti code when I write code.
BUT, I find that most of my fellow programmers either have not worked as m.programmers; or have done so but didn't notice it, because I guess they don't have a built-in desire for arete or just didn't want to get upset about their work and chose to ignore the crappy code.