Last updated:
9. May 2007

User Interface Programming

(Start main menu) Home ­ Articles ­ Book ­ Resources (End main menu)


On the Web
Key Standards




The Unicode Consortium

Windows Develop­ment




The Old New Thing

Components Notebook


The Code Project


Reliable Software

Sysinternals Freeware


Gnu for Win32

Wine Develop­ment HQ

Edit Con­t­rol Sources

James Holderness

James Brown

Web Develop­ment

CGI Resource Index

Code Brain

Gen­e­ral Develop­ment

Joel on Software

Steve Gibson



Digital Mars

Elements of Hypermedia


Eric S. Raymond

The Jargon File

Encyclopædia Britannica



What is?

Spider Robinson

Baen Books


Amazon’s Computer Top 50

Science Fiction & Fantasy

This page lists Web sites and books that I consider good and useful.

Some of the books have strongly influenced how I think about soft­ware design. One common feature is an all-per­meat­ing at­ti­tude that you must under­stand what you’re doing, that it’s important to get the details right, that the whole exercise is worth while. Some of them pro­vide a wealth of technical detail as well, but so does a good reference manual. The under­lying philosophy of design and pro­gram­ming makes all the dif­ference.

User Interface DesignProgramming and Soft­ware DesignWriting

User Interface Design

GUI Design for Dummies

GUI Design for Dummies
by Laura Arlov

Despite the dummy title, this is an excellent introduction to usability and the design of graphical user in­ter­fa­ces, full of valuable advice for the practicing designer. Laura is a great teacher, with a rare ability to balance breadth and detail just so.

Read Laura’s interview:
Part 1Part 2

“You can’t make a good user in­ter­fa­ce just by following a good standard, but you can make a good user in­ter­fa­ce by following a good design process,” says Laura in an interview with

About Face: The Essentials of User Interface Design

About Face: The Essentials of User Interface Design
by Alan Cooper

This book covers a wide range of user in­ter­fa­ce topics, ran­ging from high-level con­cep­tual models down to minute de­tails of mouse in­ter­ac­tion. Whether or not you agree with everything Cooper says, you’ll find much of value here.

I implemented Cooper’s unified file model in my book Programming Industrial Strength Windows.

Tog on Software Design

Tog on Software Design
by Bruce Tognazzini

A collection of design essays from one of the pioneers behind the Apple Macintosh and the creator of Sun MicrosystemsStarfire vision. I’m particularly fond of his catalog of sur­real­istic error mes­sages such as these:

  • Unable to save file. Save anyway (y or n)?
  • No keyboard found. Hit F1 to continue.

Need I say more?

User Interface Design for Programmers

User Interface Design for Programmers
by Joel Spolsky

This is an introduction to the key prin­ci­ples of user in­ter­fa­ce design. It is short enough that you can get through it in one eve­ning; it is well enough written that this is a pleasure rather than a chore; it is comprehensive enough to cover the fundamentals.

In ad­di­tion to being useful, user in­ter­fa­ce design is also fun. Clearly Joel thinks so, and he puts across his enthusiasm won­der­fully. His writing style is relaxed, in­for­mal, and hu­mor­ous.

User Interface Design for Programmers is in full color, richly illustrated and highly recommended. It is also available online at

Programming and Software Design

The C++ Programming Language

The C++ Programming Language
by Bjarne Stroustrup

Everything that the creator of C++ has to say about the lan­gu­age. The third edition contains in-depth coverage of the Standard Template Library (STL).

Other books by Bjarne Stroustrup include The Design and Evolution of C++ and The Annotated C++ Reference Manual (with Margaret A. Ellis).

Design Patterns: Elements of Reusable Object-Oriented Software

Design Patterns: Elements of Reusable Object-Oriented Software
by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides

Design patterns for soft­ware develop­ment are codified rules of thumb that solve recurring and often gen­e­ral problems. In the inimitable words of Martin Fowler: “Some idea, found to be useful in a practical context, which will probably be useful in other contexts.”

This book catalogues simple and elegant solutions that have developed and evolved over time. Don’t leave home without it.

Writing Solid Code

Writing Solid Code
by Steve Maguire

This book is devoted to exterminating bugs by eliminating bad habits and encouraging good ones. Maguire’s approach is an­ec­do­tal, en­ter­tain­ing and thought-provoking.

Code Complete

Code Complete
by Steve McConnell

This is the most comprehensive overview of soft­ware con­struction that I know. To quote the author: “The research and pro­gram­ming experience collected in this book will help you create high-quality soft­ware and do your work more quickly and with fewer problems.”

If you don’t own this book, run out and buy it.

Programming Windows

Programming Windows
by Charles Petzold

I maintain an army of random monkeys that bang away at my keyboard when I’m not using it. One of them came up with this:

Programming Windows is simple
When Petzold is at your side,
To smooth over every pimple
And polish your pro­g­ram’s hide.

I can’t improve on that; I only want to add that my 1996 ed­ition is not the latest Petzold. The latest Petzold is much heavier than mine, and requires an industrial-strength wheel­barrow just to get it home from the bookstore.

Advanced Windows Programming

Advanced Windows Programming
by Jeffrey Richter

True to its title, this book is a deep dive into the Win­dows API. It does an excellent and comprehensive job of describing kernel objects, processes, threads, fibers, multithreading, synchronization objects, asynchronous I/O, virtual memory and more. Much more.

C Traps and Pitfalls

C Traps and Pitfalls
by Andrew Koenig

Much of this book concerns pitfalls in pre-ANSI C, which does date it a bit. It still contains valuable tips, though, and it is saturated with a pervading sense of the necessity to under­stand what you’re doing.

The following (per­fectly portable) expression gives a flavor of the book; it evaluates to the hexadecimal character cor­res­ponding to x:

"0123456789ABCDEF" [ x & 0xf ]


The Elements of Style

The Elements of Style
by William Strunk Jr. and E.B. White

The classic “little book” on the art of writing—concise, precise and indispensable for anyone who writes:

  • Omit needless words.
  • Use the active voice.
  • Use parallel construction on parallel concepts.

There are any number of writing books out there, and some of them are very good. This, however, is where it all starts—regardless of which language you happen to be writing in. Read it, apply it, and it will make you a better writer.

Here is a small taste:

Omit needless words.

Vigorous writing is concise. A sentence should contain no un­necessary words, a paragraph no un­necessary sentences, for the same reason that a drawing should contain no un­neces­sary lines and a machine no unnecessary parts. This requires not that the writer make all his sentences short, or that he avoid all detail and treat his subjects only in outline, but that every word tell.

Le Ton Beau de Marot: In Praise of the Music of Language

Le Ton Beau de Marot: In Praise of the Music of Language
by Douglas R. Hofstadter

On the face of it, this book has nothing to do with Windows pro­gram­ming or GUI design. But, using poetry trans­lation as his take-off point, Hofstadter imparts deep insights into the relationship bet­ween form and content—insights that trans­late well to other domains.

Other books by Hofstadter include the Pulitzer Prize-winning Gödel, Escher, Bach: An Eternal Golden Braid and The Mind’s I (with Daniel C. Dennet).

(Start bottom menu)

TopHomeArticlesBook • Resources
Win­dows De­vel­oper Maga­zineR&D BooksCMP Books Petter Hesselberg

(End bottom menu)


Search Amazon: Logo