Perhaps more challenging than the code required for program development is the user interface. The code may be bug free, but if the user can't understand the interface quickly, the program is unlikely to be successful.
This book is a very practical introduction to user interface design. The author is a professional interface designer for a software company; his approach to interface design is very organized and methodical. Some of the issues covered in the book include:
I. Research (we do this before we code the interface, right?)
Developing the interface for the person
Focusing on the activity required
Documentation (the real bugaboo of most programs, including the best sellers that generate billions of dollars for their owners)
Appropriate use of text
Using a card sort to understand user thinking
Grokking what users think
Sketching/prototyping the interface
Using paper prototypes
Replicating symbols from the real world (realism)
Tricks of button development (Fitts' Law)
Animations - when do they help, and when do they handicap
Consistency - do your users understand a new form because it acts like one they've seen before
Discoverability - What can users find without using the manual or help
Don't Interrupt - don't get in the way of users work flow
Appropriate use of preferences
Avoiding Features (you can have too many features)
What do video games have to teach?
Various modes of testing, dealing with user feedback, unexpected uses, measuring failure
The book is well written, and a valuable resource for those who are involved in designing GUIs that they wish to be Natural User Interfaces. Even if you've already designed what you think is the ultimate user interface, going through the evaluations suggested in the book may show you ways that you may improve your interface. There is a 12 page index. The writing is conversational and clear. There is a web page devoted to the links in the book as well as any discovered errata. Recommended.