tags:

views:

653

answers:

11

I've been using C# for a while now but haven't really homed in my UI design skills. At the time I design them, I find myself enjoying the design, but later on, I look back on it and see horrible work. An example comes to mind from my project at work where I had to use 127 buttons to represent 127 computers in our lab. :/

I was wondering if anyone could refer me to a site or book that would teach good UI design?

Thanks!

A: 

You can refer to Windows UI guidelines or Mac UI guidelines.

Mac UI guidelines are available at http://developer.apple.com/documentation/userexperience/Conceptual/AppleHIGuidelines/XHIGIntro/chapter_1_section_1.html

Windows UI guidelines are available at http://msdn.microsoft.com/en-us/library/aa511258.aspx

EDIT: Everybody likes the Google UI here is the link.

Vinay
Read both, but make sure not to confuse the two. While Windows and OSX are similar in appearance, Windows is more "application-centric" while OSX is more "document-centric". Basically, make sure you apply mac principles to the mac, and windows principles to windows.
Soviut
the vendor specific guidelines aren't really a good place to start learning about gui design. They only really help with keeping consistent with other applications on the platform. Analogy to code: It's like learning Java, without learning any of the CS fundamentals.
Breton
Since we will develop our applications run on the specific operating systems, I feel we should follow the specific OS UI guidelines
Vinay
Yes that's fine, right? But to continue the analogy, just coding in the Java style doesn't garauntee that you will write good code, if you don't understand data structures, algorithms, etc. etc. It's the same with UI design. There are fundamentals these guides don't cover, but are more important.
Breton
To state it bluntly, reading these guides will not result in good interface design. It will only prevent stupendously bad interface design. Mediocre is the best you can hope for.
Breton
+6  A: 

Joel Spolsky wrote a book called User Interface Design for Programmers, which is a good read, and an abridged version can be found online.

Fara
+1 for pimping a site owner and because Joel himself edited the question at the same time you were posting the response. Too rich to pass up.
Randolpho
Sycophantism is a virtue now?
Breton
There is no sycophancy in my answer, it's a perfectly legitimate response to the question, and, incidentally, was posted before Joel made the edit.
Fara
Your answer was perfectly fine. I was just reacting to Randolpho's response, who appears to be praising your answer not on its own merits, but because you mentioned a name that he recognizes.
Breton
It's a great book. I recommend buying it because the book deserves to be paid for and the pictures are better in print.
Andy Dent
+1  A: 

Building on Vinay's answer, integrating with your target platform is always going to be of paramount importance when designing an interface. If you were developing on Windows, make sure you stay true to the look, feel, and usability expectations of that platform. The interface guidelines are always going to be a jumping off point, though some are better than others. For my money's worth, the GNOME Human Interface Guidelines are a great set of guidelines to designing user-friendly interfaces, even if you aren't using GTK.

On a more general note, learning good design is really learning to recognize good design. Find some applications that are really intuitive and then mimic their layout, style, etc. Then, when you are struggling with how to implement a particular feature, find a suitable analogue in a one of those other applications. You will want to pay particular attention to issues like grouping, tabbing, shortcuts, dialog modality, etc. I think you will find that very few good design principles are dependent on the language you are programming in, except in so far as it may influence the toolkit and platform that you target.

bouvard
Don't you think there are some other things of higher importance, such as visibility, elimination of modes, constraints, etc. etc.? The strategy you promote is just copying without understanding WHY a design is good. This is essentially what microsoft did with windows, copying all mac OS's mistakes.
Breton
I thought I had implied that "WHY" was important when I used the word "recognize". You can't recognize if you don't understand. But both come with the practice of careful observation.
bouvard
As to copying: fitting in with one's environment is paramount with software. You might build a better widget, but if it works in an diametrically opposite manner to 99% of the widgets the user sees, that may not be a bonus. An efficient design is a product of execution AND expectation.
bouvard
You can indeed recognize that leonardo was a great artist without knowing how he did it, or why his art is great. Efficiency has nothing to do with expectation, except for the first few uses. They are complimentary colors. Expectation only counts the first few uses. Then it's all up to good design.
Breton
"fitting in with one's environment is paramount with software." It's important, but it's not paramount. There are at least half dozen other aspects to ui design that are more important. If the vendor's style guide has codified bad design, then is it really such a great idea to follow religiously?
Breton
You make a compelling argument, but, at least in my day to day development the benefits of familiarity outweigh the potential costs of following platform dogmatism. None of the guides mentioned are in the business of codifying bad design. Sure, some of it IS bad, but its better than winging it.
bouvard
And the notion that one is going to go from "127 buttons" to the sort of intuitive design your suggesting without some intermediary step does not seem plausible or pragmatic to me. I would rather an app succeed at "just fitting in" then fall apart trying to reach an aesthetic zenith.
bouvard
I'm not suggesting intuitive design. Quite the opposite. I'm suggesting learning some fundamentals. Such as, for instance, the differences between "Intuitive", "Efficient" and "Discoverable", and why the latter two are desirable, and the first one is way overrated.
Breton
+5  A: 

I believe observation and instincts helps tremendously.

Play with applications and dig deep into the functionality they implemented. Especially look at Apple, since they revolve around aesthetics. What worked? What didn't? Why did it work? Start asking yourself questions as you tinker with web sites and software.

Then I would play around and design some concepts. Show these concepts to friends, both technical and non. Ask them questions like, "Add a new drink to the list" or "Find x for me." See how they react and differ from each other. Did someone with a technical background notice buttons faster than the non-techies? Should you combine elements together?

This stuff should be fun. After all, this is like building a complete Lego set and showing it off to your friend. He/she get's to see, touch, and play with your creation.

David McGraw
I like the comments about testing it on your friends, but using instinct for UI design is a terrible idea.
Breton
A: 

I think the best idea is to practice. I like designing my windows on paper first (blank or graph paper). Use a ruler and make sure things align and are clean.

An example comes to mind from my project at work where I had to use 127 buttons to represent 127 computers in our lab. :/

Ask questions to yourself here, what didn't I like about it? How can it be improved? Did I need drop down or a list box for the computers?

Also know your GUI widgets.

srand
Practice is useless without a useful method of evaluation. User testing in this case is far superior to self critique. It is generally the case that the software developer, no matter how savvy, or how good a design sense, has no idea what will happen when someone else uses their stuff
Breton
The developer is the first user you have to please :) apparently the poster wasn't doing that ;)
srand
+3  A: 

The Design of Everyday Things by Donald A. Norman

The Humane Interface by Jef Raskin

Breton
+1  A: 

I have read Spolsky's book User Interface Design for Programmers, as well as the classics The Windows Interface Guidelines for Software Design and Windows User Experience. The latter two are/were good reference books. Spolsky's book is a wonderfully entertaining read and teaches you how to think about user interface design.

For my money, though, the best way to design the user interface of a desktop application is to duplicate existing solutions from popular software. And by "duplicating," I'm referring to two distinct facets - the mechanism and the aesthetics.

As far as the mechanism is concerned, make sure your UI works the way people expect it to work. For example, if you have a treeview, make sure the keyboard arrows work for navigation. If your form has a scrollbar, make sure it responds to the scroll wheel on your mouse. By and large, the .NET controls provide the standard behavior by default, but you may have to configure some of the design-time properties to fully achieve this. I had a controls library I was working with a few years back that provided a standard textbox. What I discovered, though, was that the text was not automatically highlighted when I tabbed into the control. I added that behavior because it's the way I (and my users) expected the control to work. Quoting Spolsky, "consistency causes ease of use, which, in turn, causes good feelings..." In other words, if the mechanisms of your UI does not match what your users expect, your UI will be a source of frustration for your users.

As far as the aesthetics is concerned, I have discovered that focusing on things like fonts, icons, spacing between and alignment of controls, selective use of color (I love using gradients), etc. can go a LONG way toward adding that sense of polish to your user interface. I've been known to use bitmap screen captures in Paint to measure the padding between controls in order to mimic the padding in the Microsoft applications. When I divulge that information to co-workers, most of them look at me as though I've lost my mind. But I cannot tell you the number of user interface successes I've had simply by focusing on what everyone else considers insignificant. I chalk that up to simply leveraging all of the research Microsoft has ever done in making their applications visually appealing.

So my recommendation would be to read Spolsky's book and then try to duplicate as much of the Microsoft apps as you can. For desktop applications, it's the surest approach.

Matt Davis
+2  A: 

The most important to focus on first would be the work flow of things. Try to find the goals the user has and create a model the is as effective as possible in reaching that goal. Also read a lot around this one of the best books to start with is The Inmates are running the asylum

I would suggest lots of sketches here. Make sure you keep it simplistic to focus on what and where things are placed and less on how they look. A tool like balsamiq is great for fast UI mockups. Also go through UI patterns here to come up with concepts that work, Tidwells book Designing Interfaces is great and also Infragistics new patterns site are great resources

Now you have an idea on what you want to do, now is the time to put together the interface. Along the way from the first sketch to the last pixel - always user test.

And don't always follow the UI guidelines, it is OK to break them if you have a good reason. And last, you will only get one free unrelated 3D effect in an interface :)

haqwin
upvoted because of everything other than "inmates" - I hate the way Cooper hands out blame without mentioning management
Andy Dent
+4  A: 

Here are books I found helpful and keep referring to (all linked to Amazon):

Donald Norman:
The Design of Everyday Things
Donald Norman: The Design of Everyday Things

Alan Cooper et al.:
About Face 3 - The Essentials of Interaction Design
Alan Cooper et al.: About Face 3 - The Essentials of Interaction Design

Jenifer Tidwell:
Designing Interfaces - Patterns for Effective Interaction Design
Jenifer Tidwell: Designing Interfaces - Patterns for Effective Interaction Design

Helen Sharp et al.:
Interaction Design - Beyond Human-Computer Interaction
Helen Sharp et al.: Interaction Design - Beyond Human-Computer Interaction

Steve Krug:
Don't Make Me Think! - A Common Sense Approach to Web Usability
Steve Krug: Don't Make Me Think! - A Common Sense Approach to Web Usability

Jef Raskin:
The Humane Interface - New Directions for Designing Interactive Systems
Jef Raskin: The Humane Interface - New Directions for Designing Interactive Systems

gclj5
+1 it's like my answer, but with more books. Seriously, guys. Learn you some basics. Then you can critically judge whether it's worth copying what's already been done. Read real books, not online guides, or cynical style guides that corporations themselves don't follow.
Breton
Yes, books help to see all this information in a bigger context. Especially the academic ones. User interfaces are, to a great extent, about human perception and information processing. The technical execution (which button belongs where) is only one part of user interface design.
gclj5
+1  A: 

Take some time and look at other software products. Every year, companies like Google and Microsoft dump millions of dollars into usability testing. Take what they have learned about user interaction and apply it to your own products/projects.

Infragistics also just created a nice reference for UI Design Patterns, it can be found at http://quince.infragistics.com/.

mattruma
A: 

The answers already give some great books on how to specifically design interfaces. I'd like to help with some suggestions to help you improve your nose for design. Some of these might be cheaply available 2nd-hand, or something you can borrow locally (I'm always willing to lend books to people in Perth, Western Australia):

Andy Dent