Why don't programmers use better practices? Why don't they write unit tests, document code, refactor, use clean designs?
They never shake the idea that programming is hard and is supposed to hurt. No one brags about the projects where everything worked right because of good planning and disciplined programming. Instead, people brag about the all-night hack-fests.
The first lesson every programmer learns is that it's hard. 'You mean I spent all this time trying to figure out why my program wasn't working, and all along it was a missing semicolon/incorrect cast/mistyped method name?!?' Everyone has stories like this from their first attempts. Then you find the right documentation, or you talk to the right person, or you just have the eureka moment that lets you fix the problem. If you got through it by talking it over with a friend, they probably started out with 'I remember one time I spent X hours before I found a bug in...!' You made a mental note of their tenacity and wit. You learned a social lesson along with the syntax lesson: Real Programmers tough it out.
As time goes on, programmers replace the pain of syntax problems with the pain of brittle design. Initially, writing the fibonacci number generator is exciting because the novice has no idea whether they'll even get the code to compile, much less work correctly. After a semester or two, they can routinely get everything to compile, and often their code even works! Now they start branching out into ever-larger programs. They no longer worry about syntax headaches, but because they're waiting for the computer to land that blow that costs them yet more hours of "But it should just work!" they're not the least bit surprised when making any change turns out to be painful. Even though they're building bigger, more interesting programs, it still hurts, just like before. Nothing changed, so everything must be ok. Eventually, they stagger out, bruised and battered, from under the mound of code they've scraped together out of spit and bailing wire, a little tougher, and now they have a story that starts 'I remember one time I spent X hours before I found a bug in...!'
Sometimes a new programmer catches a break. Early on, they get to work with an expert who steers them painlessly past the snares that trip up beginners. When they get to the end, they look back and say "Wow, I never could have made it this far by myself. And it was so much fun this way. I didn't even have to wrestle with X like I usually do." On the next project, they take one of the new practices with them. They've seen that one small part of programming doesn't have to hurt, and they won't go back. People who aren't as inquisitive, or never had the privilege of working with experts, won't have had that experience, and keep on going at it the hard way.