A programmer is already a good designer
Yes, you are! You are already a pretty good designer. You already have the behaviour and qualities that is required to be a good designer. The problem is that there is a mindset that you, as a programmer, have which interferes with you getting started with visual designing. You need to shed some of that mindset and you will realise that you have many of the qualities which a budding designer struggles to develop.
Familiarity with technical challenges is a hindrance
When a programmers starts designing a product, she throws about a design on paper or wireframe it and goes about implementing it. When she is stuck somewhere while implementing because the design she made before is too damn difficult or the complexity of the program increases, she goes back and changes the design to suit her needs.
Do not do that!
Moreover, while designing in the first phase, because she knows all about data models and tech stuff, this subconsciously affects her design. A programmer has to fight these instincts when she is starting out.
Data Models clout Design
Data Modelling is the bread and butter of a good programmer. Designing software is all about nailing the data models correctly - this makes the code clear and understandable. This data-model approach is so natural to a programmer that this thought often creeps in when she goes about doing the visual design.
Programmers hate duplication and redundancy religiously. Design often does not work that way. Design is natural - information should be present where it is most expected even though there is duplication.
Data Models are out. Use cases are in.
Design is not Art
When a programmer asks a designer how to go about starting to design, the common response is Observe things, Notice the details, Copy the stuff you like. Though this is good advice, but it is downright useless to the programmer’s logical mind. She needs a proper logical route to get her thinking. That’s how our minds work. This response is often called art oriented advice.
This puts a misconception in the programmer’s mind that design is a commercial spawn of Art. This is not true - if anyone tells otherwise, ignore them.
Design is a discipline just like engineering. Though there are major differences in the two disciplines, but they both are disciplines nevertheless and can be learned.
Programmers are already good designers. What applies to software design readily applies to visual design as well. You have to recognise the bridge.
Programmers are already creative
Creativity and Innovation are different. Creativity is not a eureka moment that comes in bursts of brilliance.
Creativity is the ability to create things which can be shown, used and discussed upon. Programmers have been doing that for ages. We are already among the most creative people, maybe more than the creative professionals.
Think about how you create software and apply the same spark of creativity when doing visual design.
Your systematic mind is the best thing you have
You have an uncanny ability to be systematic when writing code. You are systematic in the sense that you know how systems work - how changing one line in one file will affect another line in another file.
Budding designers struggle with having a systematic mind because relating two things together is difficult. Perhaps the most difficult thing in designing. If I tell a designer to design me a button (and this is a true story), she will design a breathtakingly beautiful button without asking any other questions. But then it does not go well with the page.
Design is about giving relative importance to elements on the page - it is goal-oriented. Some things need to be more prominent than others (if other elements are necessary to begin with) for the user to achieve the goal.
A programmer relates things better. She already relates files, databases, webservers all together. She is already in a position to efficiently design.
Freaky attention to detail
The talk about attention to detail in design is particularly new. Think about yourself. You have been paying attention to every variable name, every whitespace, every comment that you write since the day you started programming.
I would be surprised if designers are not surprised by the programmers’ attention to detail. The same attention to detail should reflect when you are designing visually. Attention to detail comes naturally to you when you are writing code because you have doing it for so long.
The devil is in the details.