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.
Total rubbish. I hate the whole attitude about “natural ability”. Any good programmer has the mental capacity to learn other brain-based skills, including UI design. UI design is not an art, it's just the application of a set of principles with a bit of thinking outside the box. The only reason most programmers suck at UI design is that they have no training or knowledge of the subject. This could be obtained by study, at least to an extent suitable for desktop applications.
I shun this in the same way as I shun the idea that programming is an art. Both programming and UI design, along with web design and other such design-for-function fields, are not art, they are simply skills. Art is creative, involving the use of the imagination, emotion and expression. Programming and UI design use none of these.
When writing purely functional software I can't think of how any of those apply. Sure, it's possible to make some novel things which will then involve some imagination, but “serious” programming (for want of a better word for it) is pretty much all just the application of principles in the right combination.
There's not much room left for creative solutions in software development, because the constraints are so broad these days and everything's been done.
Sometimes I look at code and it's just beautiful. There are good variable names, it's nicely broken into components, and just easy-to-read in general...
Sometimes I use an API and it's beautiful. I barely even need to look at documentation. It just does what I want, the way I want it to.
Being able to create this sort of stuff is more than just a skill that can be taught. I've worked with a number of programmers who write really crap code (even if it works)...
There are certainly elements of programming that can be taught (syntax, ideas such as recursion, whatever...), but there's definitely a creative aspect too. This is one of the things that bug me most about most programming courses. They teach you the plain knowledge that you can get from a textbook, but they don't actually teach you how to write good code.
I guess what it boils down to really is that I have a really wavy and messy idea of what the word “creative” means.
I'd probably agree if I had some definite idea of the meaning of “creative”, but the best I can muster off the top of my head is a decision with no immediately-apparent rationale. Why did the artist draw a big red triangle in the middle of the canvas? I've no idea, but it appeals to me anyway. (I'm not sure if the artist knows why that triangle's there either.)
When it comes to programming, I tend to think that since I can find the rationale it's not creative. As I say, though, I guess my lesson for today is that I've an overly-stringent idea of what creativity actually is.
I think you place too much emphasis on incomprehensibility. Artists have rules and boundaries and rationales; even when breaking them they acknowledge where the form breaks and their new developments begin.
Anyhow, by your maxim, a painter, having no idea how to code, could look at your code and label it art.
I'd like to take your argument and make it into, "Programmers who give no thought to UI design or who make consistently bad UI design are inexcusably lazy." (Too lazy to get training, too lazy to implement training, too lazy to care about UI design, whatever.) You can't possibly be arguing that innate talent can't influence the goodness of programs, as some people seem to think, so I agree with you. (I hope this isn't diluting your point too much.) It is incredibly thoughtless, stupid, and wasteful to simply wave off the necessity for this training by saying some have it and some don't.
I think when people use the word 'creativity' in programming, one of the down-to-earth senses in which they mean it is having the insight to use 3 simple functions where another person would use seventeen, or seeing that 48 options can be divided into 5 basic cases, etc. (Sorry, these are lameass examples. Brain tired.) It's sort of the same cognitive ability that allows some people to write 4-line mathematical proofs where others write 50-line proofs. Another sense of programming creativity is the ability to envision complete systems for handling data; not everyone has the architect mindset. Likewise, not everyone has an intuitive sense of 'intuitive' to use when designing an interface. But, as you say, all these skills can be honed with training, and basic principles, developed over the years of computer use, can be taught systematically.
I don't really agree that art needs to convey a feeling, but I am a cold heartless robot. I like my Jane Austen and my Bach and my Modrian as much as my Whitman and Beethoven and Klimt. I'm taking your view of art to be an accessory to your rant, anyway; it's not necessary that all programming/design be excluded from the realm of art to argue that all poeple are innately capable of executing it competently.
I have quite a weird outlook on talent, though. I tend to think that talent isn't really a natural ability in something, or at least not completely a natural ability. Instead, it's more like an overwhelming interest in some activity.
For example, I would not be the programmer I am today (and I'd like to think I'm at least pretty good) were it not for my enjoyment of it. That enjoyment led to what later became practice, and because of that practice I know have experience which guides my work.
I can't say for certain that this applies to other stuff, but until someone assures me otherwise I find it quite likely. Does a musician really have a natural talent for music, or does he or she have a big interest in music which leads to lots of practice?
It's hard to say, but I certainly prefer my idea of talent, because it doesn't exclude any person from aquiring any skill with some effort, whereas the conventional idea of talent seems to imply that a given person is only good for one thing and average or useless at everything else. I believe if I took the interest I could become a good user interface designer; of course, since I rarely write end-user applications I've had no need to learn the skills required.
As a side note, I wonder why it is that so many developers give their time “for free” to open source projects (really, of course, it's “for the greater good”) and yet there's disproportionate interest from every other required skillset.
Nuh-uh, your rant was way more fun to read than mine.
But don't you remember that "people are stupid"? I think before I did tech support I held a view similar to yours, but having tried to explain basic technical concepts to a decent sample of the human population, I am convinced that there are logical abilities independent of experience (and since people tend to experience things that interest them, likewise independent of interest). E.g. some English teachers who type with one finger and only use a computer once a week and only when they have to will instantly understand "save" or "the phone cord has to be plugged in for the DSL to work", and other English teachers who type with one finger and only use a computer once a week and only when they have to will have to grow accustomed to such strange notions gently and over time. Some people don't innately understand cause and effect, and end up relearning C&E over and over again in different contexts: this particular cause actions leads to that particular reaction. It takes them longer to adapt to new software/situations/contexts than (say) me, but they can still do it, they just need more/different training.
Not everyone can be a designer genius, not everyone can be a champion marathon runner. But nearly everyone can get fit enough to run five miles, or at least run to catch the bus in the morning. Everyone can understand the elements of design - or physics, or gardening, or international law. Even plasticity of mind can be trained to a certain extent. I don't think it's so black and white that you have to exclude the influence of nature to allow the influence of nuture.
I think people are too intimidated, generally, to participate in open-source projects, unless they have a strong programming background or they're thick in a geeky clique. I'm exaggerating, but I bet that's why there aren't that many design nerds who flock to these projects; they just aren't thinking, "they want me." And some doubtless don't know about open-source projects at all - Microsoft is practically pounding down your door to get you to use their OS, so everyone knows about Windows/Word, but you have to be self-motivated to run out and learn about (most) open-source softwares. Generally, that motivation comes from deep programmer nerdishness. ... I think it could be helped a lot by outreach; if you're working on a project, you can attempt to court designers...