It’s not something every programmer can learn. Most programmers don’t have any aptitude for UI design whatsoever. It’s an art, and like any art, it requires innate ability. You can learn to be a better writer. You can learn to be a better illustrator. But most people can’t write and can’t draw, and no amount of practice or education is going to make them good at it. Improved, yes; good, no.I actually disagree with Mr. Gruber on his last point. I'm not sure the designers of really great user interfaces have a profound respect for their users.
Conversely, some people who are good UI designers aren’t programmers. But the rock stars are the guys who can do both, and they are few and far between.
...Great software developers don’t design for morons. They design for smart, perceptive people — people just like themselves. They have profound respect for their users.
I think a designer's relationship with his or her audience is like that of an honest believer's relationship with God: respect, sure, but mostly punctuated by fear, frustration, doubt and an infuriating love. When one spends hours moving dots on a screen for the pleasure of an invisible other one has entered the realm of religion. I think being able to not only live in that tension but thrive and make good decisions while in it is the aspect of design that makes it more an art (or a priesthood). That we actualize our thoughts and feelings with text (code) that becomes objects is no more relevant to our real calling than if our tools were paints and brushes.
(This rabbit hole brought to you via @stephenanderson.)