There was an interesting question posted on the Hacker News site earlier today:
Dear HN, I am a decent Rails/HTML/JS/iOS/Android/C# programmer. I want to be able to do a project from beginning to end (web+mobile), but I never have any idea what I need to make should look like. How can I learn design?
Design is an interesting art. It’s a balancing act between function and form. Doing either well is a challenge and doing both well usually requires a lot of practice and experience. I reflected on how I’ve been able to get to where I am today, and the following was my advise for od2m, the asker of the question:
Admire. Emulate. Innovate.
When you’re starting off, you’re not going to be able to create amazing looking stuff because you don’t know how to and you won’t necessarily know what is good. The first thing I recommend you do is build up your pallet and figure out what you like. If you don’t know what is good, look at work that others say is good and observe what they have in common and how they make you feel.
Once you start to get a sense of what you like, next recommendation is learning the raw skills needed to do what you need. In your case, knowing how to do all the things you’ll need to do, such as how to create a box with rounded corners, or gradients. With that knowledge, start trying to recreate work that you admire and try to get as close to it as possible. As you do this repeatedly, you’ll start noticing different patterns and choices the “original” designer had utilized. At this stage, you’re simply trying to walk a mile in their shoes.
As you become comfortable at emulating styles and feel a decent level of mastery over the skills required, you’ll automatically start to have thoughts about how you might want to try doing things differently. Try it. Most of what you do will be shit. Allow yourself to create shit. Keep trying things and you’ll build up your own style, taste and sense of what should take priority.