Not disagreeing here, just trying to add to what you are saying.
Programmers aren't horrible people or anything, they've just spent a lot of time at becoming quite good at a specific skill. Artists and designers spend an equal amount of time becoming good at another skillset, and usability specialists spend the same time becoming good at understanding other stuff that faces the user.
I don't really think that the problem is the fault of the programmers, but rather management. See, management seems to understand the process of creating something as only the mechanical part of the creation (hammering in the nails, writing the code, making the pictures) and completely miss the complexity of coming up with a good design to begin with, as well as the iterative nature of most good design (usually only partly successful on the first try). This is just the mentality of managers, mostly old-school managers who still think that all problems can be solved by engineering and manufacture (or the equivalent).
Most programmers that I know are fully aware of the fact that their skills at making usable interfaces are very limited, as is their knowledge of colour theory and such (the domain of the graphic designer). I am painfully aware that although I can perform a mean usability analysis, my skill at programming is limited to "hello world" levels. Okay, some graphic designers think that usability is simple and they can do it based on artistic insight (they usually state this just before creating some usability nightmare).
Management then stops the programmer from implementing the solutions proposed by the usability experts as that takes resources away from making the nuts and bolts and says something like "we will fix that at the end of the project", resulting in a really clever but unusable product that requires a few months of fixing all the little details at the end...which is too much work, so it just gets shipped like that. Surprise, surprise, nobody wants to pay for it.
Editors for text, artists for art, usability experts for usability, programmers for programming, and managers who have a clue about this all. Please?