Don't Make Me Think!

Steve Krug

Mentioned 33

Discusses how to design usable Web sites by exploring how users really use the Web and offers suggestions for streamlining navigation, creating a home page, and writing for Web sites.

More on Amazon.com

Mentioned in questions and answers.

This is a poll asking the Stackoverflow community what non-programming books they would recommend to fellow programmers.

Please read the following before posting:

  • Please post only ONE BOOK PER ANSWER.

  • Please search for your recommendation on this page before posting (there are over NINE PAGES so it is advisable to check them all). Many books have already been suggested and we want to avoid duplicates. If you find your recommendation is already present, vote it up or add some commentary.

  • Please elaborate on why you think a given book is worth reading from a programmer's perspective.

Note: this article is similar and contains other useful suggestions.

How to Win Friends and Influence People

by Dale Carnegie

How to Win Friends and Influence People

Although this was first published in 1936, the advice contained within is still as fresh and appropriate as ever. Don't be put off by the name. This isn't some underhand guide to having your way with unsuspecting victims, but rather common sense advice on how to get on with people, how to nurture relationships and make the most of yourself and your fellow man (and woman).

It is well known that technical folk (including programmers) are often thought of as not being terribly 'people oriented' (whether this is a justified stereotype or not is subject of another discussion) and so this book is an invaluable resource for teaching you the finer points of human interaction.

It's warm, heartfelt, sturdy, straightforward and timelessly written. Highly recommended.

The Goal: A Process of Ongoing Improvement

by Eliyahu M. Goldratt and Jeff Cox

To elaborate: It is a book on how to approach problems. To identify bottlenecks in your system and work on them. So in short, it isn't a programming book, but shows (in novel format) how to problem solve -- and is thus very valuable to a programmer.

[Update Gishu] It's an eyeopener on how the throughput of your entire system depends on the bottlenecks. Optimizing other stages/operations will not produce any results. Although this is ingrained in developers who have had experience optimizing a scenario in their app; however zooming out to a more higher level and applying this can have profound gains. Beck's XP Book has a dedicated chapter on the Theory Of Constraints. Programmers who move onto Leads/PMs will find this a valuable addition to their toolkit.

Surely You're Joking, Mr. Feynman!

alt text

This book will inspire anyone to think and be original.

This might not be a popular one, but

Gravity's Rainbow

by Thomas Pynchon

Gravity's Rainbow

Gravity's Rainbow is my favorite book of all time. I read through the whole thing last summer, and I'm in the process of reading it again. From a writer's point of view, it's pure, beautiful art. However, I recommend it here because it really forces the reader to think and make a lot of mental connections.

Of course, this book has a reputation for being impossible to finish. It's definitely the hardest book I've ever read. Pick it up at your own risk.

Don't Make Me Think by Steve Krug. An essential book about web usability. As Krug says, "Common sense isn't always obvious."

alt text

(Hint: Amazon.com has good usability)

Update: This is now part of the library at work. I've gotten about five people to read it so far. 100% positive reviews, predictably.

Here's a strange one for you all to think about.

On The Road by Jack Kerouac.

It's a modern classic that everybody should read, and I'd be very surprised if English or Media Studies students weren't recommended to read it at some time. Reading should not only be informative and educational, but enjoyable as well. If you're not going to read a book for pure fun now and again then you'll only end up frustrated with the books you need to read as a programmer/developer.

This book is a real eye-opener; a book that'll really make you think about your own life, and for a programmer whom spends their day dealing with pure thought-stuff it's a great way to get you thinking on a different track.

I would heartily recommend Jennifer Government to any software developer. Amazon Wikipedia

It's a very fast paced action story that's excellent to clear your head with. It's a fun book to read (will make you laugh), and the characters are rather tragic (will make you feel more satisfied at work). This is one of those books that is hard to explain the content without fear that people will think you different and odd, but all the same you must tell everyone about (I.e. makes you talk to people).

The Humane Interface by Jef Raskin.

You can see some of the effects of these ideas in Aza Raskin's (Jef's son) Enso project and the Ubiquity Firefox add-on.

Kicking the Sacred Cow

Questioning the Unquestionable and Thinking the Impermissible

by James P. Hogan

alt Kicking the Sacred Cow

Masters of Doom !!

God programmer meet God marketing guy, and no it's not Steve Woz and Steve Jobs, but it's the Johns, Carmack and Romero.

Business, gaming and programming all rolled into one. a definitely page turner all the way until the end.

The Mythical Man-Month

by Fred Brooks

The Mythical Man Month

My personal opinion is, apart from programming, in life we need to find a balance, about everything (or keep striving for it). Many times, I have found myself getting too immersed in one aspect of life (frequently programming/work) at the cost of others. Over the years I have learnt to recognize this and act accordingly.

In work, sometimes I have come across pretty difficult people, making it hard to work with them (not just my opinion, but also of other team members). Previously I used to try hard to convince them, make them more helpful, etc. and get frustrated when I don't succeed.

But this book Tigana, by Guy Gavriel Kay helped me understand that sometimes a person can be inherently complex, hard to work with, without he/she helping it. It is a science fiction novel, and it may not be completely appropriate here, but it helped me work better with my team, so I am linking to it here. It helped me become more objective in dealing with people I work with.

-Omer

Jeffrey K. Liker - The Toyota Way (Amazon link). A good if at times semi-boring read, but loads of information from the company which invented Lean.

Games People Play by Eric Berne.

alt text

IMHO it is a very useful aid to understand and deal with office politics (among others).

We think we’re relating to other people – but actually we’re all playing games.

Forty years ago, Games People Play revolutionized our understanding of what really goes on during our most basic social interactions. More than five million copies later, Dr. Eric Berne’s classic is as astonishing–and revealing–as it was on the day it was first published. This anniversary edition features a new introduction by Dr. James R. Allen, president of the International Transactional Analysis Association, and Kurt Vonnegut’s brilliant Life magazine review from 1965. We play games all the time–sexual games, marital games, power games with our bosses, and competitive games with our friends. Detailing status contests like “Martini” (I know a better way), to lethal couples combat like “If It Weren’t For You” and “Uproar,” to flirtation favorites like “The Stocking Game” and “Let’s You and Him Fight,” Dr. Berne exposes the secret ploys and unconscious maneuvers that rule our intimate lives. Explosive when it first appeared, Games People Play is now widely recognized as the most original and influential popular psychology book of our time. It’s as powerful and eye-opening as ever.

alt text

As well as the mentioned Gadwell's Tipping Point, Blink is a good choice.

A Brief History of Everything by Ken Wilber.

Front cover

In the ambitiously titled A Brief History of Everything, Wilber continues his search for the primary patterns that manifest in all realms of existence. Like Hegel in the West and Aurobindo in the East, Wilber is a thinker in the grand systematic tradition, an intellectual adventurer concerned with nothing less than the whole course of evolution, life's ultimate trajectory—in a word, everything. . . . Combining spiritual sensitivity with enormous intellectual understanding and a style of elegance and clarity, A Brief History of Everything is a clarion call for seeing the world as a whole, much at odds with the depressing reductionism of trendy Foucault-derivative academic philosophy.

The Fountainhead by Ayn Rand. Atlas Shrugged is already on this list, but the Fountainhead deals more with craftsmanship and integrity, rather than supply-side economic theory. Definitely worth a read for anyone in a creative field.

Could not put this one down, The Evolution of Cooperation by Robert Axelrod. Its a fascinating read and as game theory books go it's pretty accessible.

Snow Crash By Neal Stephenson

alt text

Ender's Game by Orson Scott Card

alt text

The Dirty Dozen

alt text

An analysis of the 12 worst Supreme Court decisions

Great and interesting book about how our liberties are being trodden on by the government. Libertarian viewpoint, but objective.

A Random Walk Down Wall Street

Burton G. Malkiel

Nothing else will teach you better how to get a handle on your money.

Wikipedia article

alt text

Niccolo Machiavelli's The Prince. After wondering why people acted so strangely at work, this book was the first of many, that taught me why.

JPod

alt text

How was JPod not posted? It's like a (already posted) Microserfs with internet. It's typical Coupland novel, must read for every techie, geek, webz hipster.

Here are some quotes

"You googled her?" "Of course I did. Didn't you?" I'd somehow forgotten to perform this essential task.

“After a week of intense googling, we’ve started to burn out knowing the answer to everything. God must feel that way all the time. I think people in the year 2020 are going to be nostalgic for the sensation of feeling clueless.”

“It turns out that only twenty percent of human beings have a sense of irony – which means that eighty percent of the world takes everything at face value. I can’t imagine anything worse than that. Okay, maybe I can, but imagine reading the morning newspaper and believing it all to be true on some level.”

Amazon

Love is the Killer App by Tim Sanders - it's for every professional.

Nothing too programmer-specific, but being in the industry that we are, it helps immensly to have a positive mindset depicted in this book.

alt text

Note: I had to move this book from my previous answer to here, to comply with the question's specific rule that one post -> one answer

This is probably not going to be popular, but "If liberty means anything at all it means the right to tell people what they do not want to hear."

In the Beginning was the Command Line

by Neal Stephenson

It's very dated, but I have yet to find a single book (or essay for that matter) that gives a quasi-outsider's view of an industry that the public is apathetic to understand. The insights and descriptions are spot-on, even though the conditions have dramaticly changed over time.

In the Beginning was the Command Line

The Inmates Are Running the Asylum

by Alan Cooper

alt text

It's about using the right language to talk about projects - using stories (and personas) instead of 'features' to talk about stuff that needs to be realized. Also a lot of emphasis on interaction design and related activities. Delivering what is needed instead of what is asked for.

Beyond Code by Rajesh Setty

alt text

Also read these free manifestos

  1. 25 Ways to Distinguish Yourself
  2. Making the Most of Your Time: Going Beyond To-Do Lists

(Note: moved the other book to a separate answer)

Awaken the Giant Within by Anthony Robbins.

alt text

The Black Swan: The Impact of the Highly Improbable

alt text

This book as about why stock markets are not predictable like casinos and the lottary. It is very readable though querky. It will help you to understand when statistical techneques do not work, why math is not understanding, why project managers can't predict schedules and how they can with less effort.

The book does not go into heavy math but will give you a feal for when the math can and more ofter can not be used.

Author: Nassim Nicholas Taleb. Also wrote 'Fooled By Randomness'

Read it if you work with mathematics, statistics or finance - Or if you have a pension.

Simon Singh's Fermat's Last Enigma is one of the greatest books I have ever read.

This non-programming book has taught me a lot about running after the solution of a problem, no matter how old and complex it is.

alt text

I recommend

The Emperor's New Mind

by Roger Penrose

Somehow in the line of Godel, Escher, Bach but, I think, easier to read.

First Things First - another equal great book from Stephen R. Covey.

alt text

Dealing with people you can't stand:

http://www.amazon.com/Dealing-People-You-Cant-Stand/dp/0071379444

Dealing with People You Can't Stand: How to Bring Out the Best in People at Their Worst (Paperback) ~ Dr. Rick Brinkman (Author), Dr. Rick Kirschner (Author), Dr. Rick Kirschner (Author), Dr. Rick Brinkman (Author)

Sensation & Perception by E. Bruce Goldstein will really pull a lot of software engineers out of their comfort zones. I found it to be fascinating when I started thinking about effective scientific visualization techniques with the user's physiology and psychology in mind. Issues with the user's potential for color blindness, visual acuity, attention span and information processing abilities are just some of the reasons why I keep going back to this book.

If you're a Python developer, you will not get around viewing Monty Python stuff. But to quickly look up a quote you find in any Python doc, I really recommend those:

alt text

(as well as part two, they're great; Amazon) and

alt text

(Amazon)

Reading doesn't give you the great look of a puzzled Michael Palin or the anger of a furious John Cleese, but it still is a worthwhile lecture.

Cheers,

The Soul Of A New Machine

by Tracy Kidder

"The Ultimate History of Video Games" of course!

Why? Because in one book you get history, fun, anecdotes, business decisions, project management, opinions, wonderful quotes, the hardware and the software ... all in all portraying an industry that went through numerous cycles, ups and downs, deaths and reincarnations. But most of all: Steven Kent managed to make this book a very entertaining read, you'll be captivated by each chapter.

alt text

see Amazon.com

This is similar to another question. Here is a link to my answer over there.

Now, Discover Your Strengths is my favorite personal/career development book. It teaches the most successful people become successful by focusing on building on their strengths, rather than covering up weaknesses. This book helps you find out where your strengths lie.

Waltzing With Bears

by Tom DeMarco and Timothy Lister

Waltzing With Bears

Great background on what managing risk means and lots of good tools for quantifying risks. They discuss a risk estimation tool which uses statistics to produce a pragmatic and reality-based understanding of the effects that risks will have on a given projects completion date and confidence level.

The prologue on "The Ethics of Belief" is not to be missed.

The Effective Executive

Concise, bare essential and time-less!

alt text

The First Quarter : A 25-year History of Video Games. Unabashed old-school video game geekery.

alt text

One hundred years of solitude

by Gabriel Garcia Marquez

Hackers: Heroes of the Computer Revolution

by Steven Levy

Does a great job of outlining some of the eras in computing, from the enviroment that sprung up around the Tech Model Railroad Club at MIT, to the Homebrew Computing in the bay area, to the story of the game companies of the early 80s. Especially the MIT section has wonderful descriptions of hackers at work, doing what they do best (in a wholly non-technical writing style), bumming instructions, making the machine do their bidding, and in the mid-seventies, it describes the self-made community of hardware hackers (including Wozniak), who built their own computers. Hugely entertaining, and a good way to understand where some of these communities originate from (academics, hackers, tinkeres).

Cover for Hackers: Heroes of the Computer Revolution

The Fifth Discipline:.

Several important things: System thinking, System Archetypes, etc.

alt text

alt text

If you don't want your job to be outsourced (as have happened to many programmers) then you need to read this book, A Whole New Mind - Why Right-Brianers Will Rule The Future, actualize it, and put it into practice yesterday!

I would recommend: "Code" by Charles Petzold.

It completely opened my eyes on how computers actually work, explained and illustrated clearly. I learned that computers have no inherent understanding of numbers, letters, words or anything like that. These were human concepts and it was up to the computer programmer (at a very low level) to present they patterns of bits from computer memory to something users would find meaningful.

Despite its title, "Code" has nothing to do with coding, but explains how computers work at the electrical level.

Peopleware: Productive Projects and Teams

by Tom DeMarco and Timothy Lister

alt text

This classic book encourages us to think about the people instead of the process. It's full of practical advice on team building, productivity and office environments. It's a must read, not just for managers, but anyone related to software development.

Get two copies, one for you and one for your manager.

Zen and the Art of Motorcycle Maintenance

by Robert M. Pirsig

alt text

This book is many things, but you could say it's sort of a philosophical take on what it means to "grok" something.


Commentry from Garth Gilmore:

I credit this book with teaching me more about software development than any programming book I ever read.

The central thread in the book is how our romantic (artistic) and classical (technical/rational) perceptions of the world are both derived from how we perceive quality in the environment around us. This understanding is then applied to apparently mundane tasks like motorcycle maintenance.

To give some examples of how this applies to coding:

  • The section on how to approach the motorcycle with a 'quality mindset' that leads to progress is just as applicable to reaching 'the zone' in programming.
  • The section on 'gumption traps' that prevent progress and lead to you damaging the machine is priceless. The solutions that are presented work just as well when trying to modify legacy code without introducing bugs.
  • The section on how a purely classical description of an engine part is useless (because it lacks any place for the user to stand) should be read by anyone involved in requirements analysis.

Long story short its a good read :-)

Simon Singh's The Code Book is a great book about how cryptography was born and how people is always trying to challenge it.

alt text

The Hitchhiker's Guide to the Galaxy

by Douglas Adams

alt text

Life, the universe, and everything

"See first, think later, then test. But always see first. Otherwise you will only see what you were expecting. Most scientists forget that." -- Wonko the Sane

Never Eat Alone: And Other Secrets to Success, One Relationship at a Time

by Keith Ferrazzi

cover

Comments from duplicate answer by Flory:
I did not think that I would like it before I got the book but I really enjoyed it. It is basically about how to build a relationships. Prior to reading it I expected it to be very trite and about how to use people for your own ends. Instead it was the opposite in how to be used to everyone's ends. Very interesting.

What is the name of this book?, by Raymond Smullyan. It is a wonderful book of puzzles about the intricacies of logic.

Hyperspace: A Scientific Odyssey Through Parallel Universes, Time Warps, and the 10th Dimension

by Michio Kaku

alt text

There's a lot of space out there to get lost in.
-- John Robinson, Lost in Space

Cryptonomicon

by Neal Stephenson

Cryptonomicon by Neal Stephenson

This book follows parallel stories of a World War II code breaker and his present day descendant, and deals a lot with the development of computers (Alan Turing is actually a character in the book). A geek's must-read!

Stranger in a strange land because every programmer should grok the word "GROK".

Lessons Learned in Software Testing by Kaner, Bach, and Pettigrew. Brilliant book, easy to read.

The Thermodynamics of Pizza by Harold Morowitz.

This could have all kinds of morals, depending on how you take it. 1. You can use science to improve EVERYTHING! :-) 2. Make sure you choose the right level of abstraction when designing and coding. 3. You can really improve your life if you just take a few minutes to think about it.

etc.

Getting Things Done

by David Allen.

alt text

The Moon Is A Harsh Mistress

Amazon - Wikipedia

The Moon Is A Harsh Mistress

Written in 1966 this classic science fiction novel takes place on the penal colony Luna (the moon). The story is told by the only programmer/computer repairman on Luna, Manuel. Manuel has a secret. The master computer (Mike) that controls all of Luna has become a sentient AI and happens to have Manuel as its only friend. Mike is rough around the edges at first, its speech is fuzzy and it plays childish but dangerous jokes with its god-like abilities. As time wears on Mikes abilities fully develop into a mature being. With Manuel's guidance they will go on an adventure together that spurs the revolution of freeing Luna from Earth!

This novel is the first Robert A. Heinlein novels I have read but will certainly not be the last. The fact that this book was written in 1966 still astonishes me! It has barely any dated parts and could easily pass for a contemporary novel. It wont he Hugo award for best novel.

Truly one of the better "programmer" style novels I have read. Great adventure the whole way through. If anyone has a suggestion as to which Heinlein novel I read next, please leave a comment!

Written in 1950, Dianetics: The Evolution of a Science describes the optimum computer as an introduction to a science of the mind.

Nineteen Eighty Four

by George Orwell

1984

The Curious Incident of the Dog in the Night-Time

by Mark Haddon

alt text

It will give you some perspective of your odd co-workers.

Blink:

This is an amazing book that details some very counter-intuitive conclusions about the LACK of THINKING actually predominates our decision process.

Player Piano by Kurt Vonnegut

Beyond Fear by Bruce Schneier.
Beyond Fear Book

From Amazon: "Schneier provides an interesting view of the notion of security, outlining a simple five-step process that can be applied to deliver effective and sensible security decisions. These steps are addressed in detail throughout the book, and applied to various scenarios to show how simple, yet effective they can be....Overall, this book is an entertaining read, written in layman's terms, with a diverse range of examples and anecdotes that reinforce the notion of security as a process".

Or just consider it a straight read on understanding what security means - whether for computers or in real life. It can give you the tools to handle the ginormous amounts of FUD we encounter every day.... And it's entertaining, besides. (Even got my father to read it, and he's enjoying it...)

Universal Principles of Design, by William Lidwell, Kritina Holden, and Jill Butler

Universal Principles of Design

One of this biggest issues I have with many programs I have used is the lack of design put into the interface and into the product. This book goes in-depth describing how to enhance the usablilty within a interface. It also tells you all of the basic principals and rules of design, and they give many examples for many different applications whether its techinical or non-technical. The book reads a little like a college classroom book (and it probably is for many design schools), so it the not the most exciting thing to read, but I find the most informative when it comes to interface design.

The Tao of Physics by Fritjof Capra

One notable premise contained within this book reminds me of the saying "If you go far enough away, then you're on your way back home". For example, the Eastern and Western approaches to philosophy and science were so diametrically opposed for centuries but perhaps they're coming around the other side towards similar conclusions these days?

It may be 30 or so years old, but it's still very much worth the read.

alt text

My second choice would be to read Neuromancer by William Gibson (or watch The Matrix which is along the same lines I guess).

I can't believe I didn't see this already listed:

Dune

by Frank Herbert

Dune Cover

Dune is the pinnacle of Sci-Fi novels!

I've been really enjoying haiku recently. To that end, I'd very strongly recommend The Haiku Handbook: How to Write, Share, and Teach Haiku by William J. Higinson.

Book Cover

I recommend reading/writing haiku as a way to relax.

The Tipping Point is one of the best books that I have ever read.

Eats, Shoots & Leaves: The Zero Tolerance Approach to Punctuation

by Lynne Truss

Becoming a better communicator in people language, I believe, makes you a better communicator in code. Punctuation is a very good place to start improving your writing.

The Game

Every programmer should read this book to learn how to pick up women.

The game

Fortune's Formula

alt text

Information theory, betting, value of information, etc.

Fantastic read.

Flow: The Psychology of Optimal Experience

by Mihaly Csikszentmihalyi

alt text

The best and most productive coding is done in a flow state. This is a psychological study of the phenomemon. Although the book is scientifically rigorous it remains accessible to the lay-person.

21st Century Jet: The Making of the Boeing 777, by Karl Sabbagh

From coffee cup holder to three-hundred-foot wing, this book is the story of how a group of people came to build a brand new aeroplane.

The book describes the development of the Boeing 777, from initial concept, through requirements gathering, design, development, testing, production, and delivery. The engineers and management implemented a new development system, overcame changing requirements, met strict safety requirements, and continually optimized the solution. It describes how the designers and engineers worked to make the aircraft easier, safer, and more intuitive for everyone who would come in contact with it (air crew, maintenence crews, and passengers).

Software developers can learn a lot from this book. It's very well written, it reads like a novel. I've read it twice and highly recommend it.

Boeing Computer Services president John Warner said, the Boeing 777 is "three million parts flying in close formation." Sounds like software to me.

Charles Perrow's "Normal Accidents" investigates what can happen when complex technology goes horribly wrong, and formulates his theory of the "normal accident": complex, tightly coupled systems will have accidents, because minor faults interact with catastrophic consequences. We see this all the time in programming and systems administration, and yet, as far as I know, few of these concepts are understood outside safety engineering.

(He also writes very well, and brings life to what could have been a rather dry book).

alt text

Joel Spolsky's "Best Software Writing I"

Women, Fire, and Dangerous Things

by George Lakoff

alt text

It's a book about how people categorize things, and about reasoning in general. It's long and extremely boring for some people, but it is still great.

If you live on the Unix side of the world, The Art of UNIX Programming by Eric Raymond (see also here). Despite its title, it is not a programming book, and it contains very few lines of code indeed. It's the best book I know about the Unix philosophy.

I found Zero: The Biography of a Dangerous Idea to be pretty decent. He has a followup to this called Decoding the Universe: How the New Science of Information Is Explaining Everything in the Cosmos, from Our Brains to Black Holes which I have but haven't read yet so I can't comment on how it is.

alt text

Secret Rendezvous by Kobo Abe. Abe's the frickin' man, man.

http://www.fantasticfiction.co.uk/images/n4/n24878.jpg

But seriously, if you like Murakami, you owe it to yourself to check out Abe.

Happiness is a Choice by Barry Neil Kaufman

It's a great book that can help you understand you can choose how to feel. Turns out you can be responsible for a lot more of your emotions than you think.

Another one from a different angle from prior posts: Gödel, Escher, Bach: an Eternal Golden Braid, by Douglas Hofstadter.

alt text

The Four Steps to Epiphany

I can not believe this book has never been mentioned!! It is one of the best book about product management I have read in years. If you are working for a startup, it is a must read.

alt text

The Milkshake Moment: Overcoming Stupid Systems, Pointless Policies and Muddled Management to Realize Real Growth by Steven Little

The Milkshake Moment

The Right Stuff by Tom Wolfe

Amazon

Walter Murch's "In the Blink of an Eye"

Speed Reading, by Robert L. Zorn:

alt text

Or any other Speed Reading text. Learning my own quirks about how I read has helped me to be conscious of other aspects of how I think. Having the ability to control my reading speed has proven to be invaluable. I still choose to read books for pleasure at my previous reading speed with all its flaws.

The Illuminatus! Trilogy by Robert Shea and Robert Anton Wilson. In many ways, this book changed the way I do my thinking. Not sure whether it is good or bad to completely distrust anything and everything, but at least it keeps ones mind critical instead of automatically accepting something as truth without questioning.

The book also introduced me to the concepts of discordianism, which I find having quite a few interesting points.

Outliers: The Story of Success by Malcolm Gladwell

I just bought it on Audible last week and I can't stop listening to it. It goes through the factors of successful people (ex: Bill Gates, Bill Joy, The Beatles). Fascinating!

Enigma: The Battle for the Code

by Hugh Sebag-Montefiore

alt text

Having a bad week at work? Well at least when you can't figure out some algorithm people aren't dying in their hundreds in the freezing North Atlantic waiting on you to work it out.

As well as being a great read about the dawn of the modern computing age, this book can help with perspective.

Dreaming in Code

by Scott Rosenberg (Amazon Wikipedia)

Cover image

A great book about the development process. It also highlights how developers are doomed to keep repeating the same mistakes over and over again

Juggling for the Complete Klutz

Juggling is mandatory. All programmers must juggle. Sorry, it's a rule.

Rick Cook - The Wiz Biz

alt text

This is a compilation of the first two novels in a series, called 'Wizard's Bane' and 'Wizardry Compiled', respectively.

It all began when the wizards of the White League were under attack by their opponents of the Black League and one of their most powerful members cast a spell to bring forth a mighty wizard to aid their cause. What the spell delivers master hacker Walter "Wiz" Zumwalt. With the wizard who cast the spell dead, nobody can figure out what the shanghaied computer nerd is good for--because spells are not like computer programs.

Lots of in jokes for the Unix/Linux crowd to enjoy. Pretty much anybody in the software industry will enjoy it, I think.

If you program for a nontechnical audience, you find yourself at a high risk that users will not read your carefully worded and enlightening error messages, but just click on the first button available with a shrug of frustration.

So, I'm wondering what good practices you can recommend to help users actually read your error message, instead of simply waiving it aside. Ideas I can think of would fall along the lines of:

  • Formatting of course help; maybe a simple, short message, with a "learn more" button that leads to the longer, more detailed error message
  • Have all error messages link to some section of the user guide (somewhat difficult to achieve)
  • Just don't issue error messages, simply refuse to perform the task (a somewhat "Apple" way of handling user input)

Edit: the audience I have in mind is a rather broad user base that doesn't use the software too often and is not captive (i.e., no in-house software or narrow community). A more generic form of this question was asked on slashdot, so you may want to check there for some of the answers.

Show users that the error message has a meaning, and it's a way to provide assistance to them and they will read it. If it's just jargon-bable or generic nonsense message they will learn to dismiss them quicly.

I have learned that is very good practice to include an error dialog with default action to send (eg. via email) detailed diagnostic info, if you quickly respond to those emails with valuable information or workaround, they will worship you.

This is also a great learning tool. In future versions you can solve known-issues or at least provide in-place workaround info. Until then users will learn that this message is caused by X and the problem can by solved by Y - all because someone did explain it to them.

Of course this won't work on a large scale application, but works very well in enterprise applications with few hundred users, and in a lean agile, release early release often, environment.

EDIT:

Since you have a broad user base I recommend to provide software that does what users are/can expect it to do, eg. do not show them eroror message if phone number is not formatted well, reformat if for them.

I personally like software that does not make me think, and when occasionally there is nothing you (the developer) can do to interpret my intention, provide a very well written (and reviewed by actual users) messages.

It's common knowlege that people do not read documentation (did you read instructions back-to-back do when you did plugged in household appliance?), they try a way to get results quickly, when failed you have to grab their attention (eg. disable default button for a while) with meaningful and helpful info. They don't care about your sofware failure, they want to get results, now.

What techniques do you know\use to create user-friendly GUI ?

I can name following techniques that I find especially useful:

  • Non-blocking notifications (floating dialogs like in Firefox3 or Vista's pop-up messages in tray area)
  • Absence of "Save" button
    MS OneNote as an example.
    IM clients can save conversation history automatically
  • Integrated search
    Search not only through help files but rather make UI elements searchable.
    Vista made a good step toward such GUI.
    Scout addin Microsoft Office was a really great idea.
  • Context oriented UI (Ribbon bar in MS Office 2007)

Do you implement something like listed techniques in your software?

Edit:
As Ryan P mentioned, one of the best way to create usable app is to put yourself in user's place. I totally agree with it, but what I want to see in this topic is specific techniques (like those I mentioned above) rather than general recommendations.

Check out the great book Don't make me think by Steve Krug.
It's web focused but many of the conepts can apply to anything from blenders to car dashboards.
Topics covered:

  • User patterns
  • Designing for scanning
  • Wise use of copy
  • Navigation design
  • Home page layout
  • Usability testing

He also has a blog called Advanced Common Sense

And some random UI related links:
- User Interface Design for Programmers by Joel Spolsky
- 10 Usability Nightmares You Should Be Aware Of

I am making the distinction between User Interaction Experience and pure User Interface (UI) design here, even though there is often a correspondence. You can have great user interaction even with a ‘boring’ grey interface, (note that a boring interface is not a requirement!).

My bookshelf contains the following:

What other books or resources would you add to this list?

Reading about the G.729 codec, I found this interesting tidbit about "Comfort Noise":

A comfort noise generator (CNG) is also set up because in a communication channel, if transmission is stopped, and the link goes quiet because of no speech, then the receiving side may assume that the link has been cut. By inserting comfort noise the old analog hiss is played during silence to assure the receiver that the link is active and operational.

This is the kind of thing a good programmer needs to know about before they design VOIP software, for instance.

Earlier today I also learned about Saccadic Suppression:

Humans avoid retinal blurring during eye movement by temporarily attenuating the data flowing from the retina into the brain. An amusing way to demonstrate this phenomenon is to look at your face in a mirror. Holding your head steady, look at one eye and then the other, rapidly shifting your gaze between the two. The image is stable and you do not see your own eye movement, but another person watching you will clearly see your eyes move.

This has application in video game and other visual and graphics development.

There are many books on user interface design, but I have yet to see a single reference which enumerates most of the human design factors we should understand when designing software. I expect a lot of software engineers learn this by the seat of their pants - they design it, find that something is odd and/or annoying, and play with it until it feels comfortable. Yet the answers already exist, the studies have been done, and someone knows not only how to fix our issue, but why it's an issue.

  • Without getting a BS/BA in a dozen different professions, where would I look for this sort of information?
  • Am I doomed to stumbling across it in daily internet surfing (which many companies/managers frown on)?
  • What other human factors impact programming (please link a reference, resource, or at least give a googleable technical name - alternately post a new question about it with the tag "human-factors")?

Don't Make Me Think! by Steve Krug is an excellent resource for usability. It focuses on the Web aspect of design, but can easily be transfered to other types of interfaces. One thing that he focuses on is getting "the user" into the picture to determine what factors make up good usability. You can implement usability all day, but in the end if a real person is not comfortable with it, then your usability is useless.

The other thing would be to watch for HCI topics in academic publishing. Websites like the ACM or ACM portal will have tons of scholarly papers for your topic (and many others.)

Doing some quick searching I found an HCI links page with 1500 results. The material (like you say) is definitely out there (the truth is too, but that's for another day.)

Also to keep in mind is the Apple/Google/Your_Company comic which is entirely true, as basic as it is.

Don't know how much this applies, but "Nudge: Improving Decisions About Health, Wealth, and Happiness" might help inform you about really large applications with many choices for features (I guess kind of like the ribbon). Haven't read it, but think the idea is definitely applicable.

http://www.amazon.com/Nudge-Improving-Decisions-Health-Happiness/dp/0300122233

Raskin's The Humane Interface is also something worth reading.

What you are asking is a really really complex subject about psychology specifically cognition. I would start reading the Book Mind Hacks. I would also start looking the site Cognitive Daily and Scientific American Mind. This is a huge subject and you are going to have to wade through lots of articles that may not pertain to what you really want to know. You are going to want to look at behavioral learning about how animals (I'm including humans) are trained to do things and how that affects them in other situations. Honestly, you should read the design books mentioned by other people as well. They will offer a of bang for your buck.

The main problem you are going to have is that you are looking for a cut and dry answer about how the brain works and how you tailor UI design to it. There are some, don't get me wrong, but Cognition isn't like programming. There is no proof to how the brain works. (Ever hear a psychologist use the word prove or know....I didn't think so. It's always we infer or we think or it is probably).

There are hundreds of variables to account for in experiments which are run multiple times and there are always competing theories with none of them being 100% correct most of the time (ok there is a non-zero probability that someone will nail a theory right on the head). One example of this is language development. People spend their entire careers trying to figure out why children of deaf people who had deaf parents sign differently than children of deaf people who didn't have deaf parents.

Your other option for finding books on the Cognition is go to your local university or find one online and see what course books are required for those coures. If you are lucky you might be able to score the class notes online also. This will help you understand other things you read about psychology and how it all fits together.

You may also want to google the topic usability engineering (Jakob Nielson, Edward Tufte) and read up on how to run usability experiments. Eventhough you try to apply a theory in your application, doesn't mean that you were successful.

I just thought of another place to look. I would check out the Ted Talks. Not all of them pertain to psychology, but there are some. They give a nice overview of what people have discovered without getting really detailed.

Basically I'm going to go a bit broad here and ask a few questions to get a bit of a picture of how people are handling UI these days.

Lately I've found it pretty easy to do some fancy things with UI design and with WPF specifically we're finding new ways to do layouts that are better looking and more functional for the user, but in contrast one of the business focused guys at our local .NET User Group wouldn't even think of using WPF until it had a datagrid that he could use to make Excel like input forms.

  1. So basically, have you rethought the design of your business apps as you move to Web/WPF/Silverlight designs, because for us at least - in winforms we kept things fairly functional and uniform, or are you trying to keep that "known" UI?

  2. Would a dedicated design guy (for larger teams), or a dev with more design chops rank higher when looking at hiring these days? (Check out what a designer did for Scott Hanselman's BabySmash and Microsoft's Prism demo)

  3. Are there any design hints/tips/guidelines you use for your UI - especially for WPF?

  4. What sites would you recommend for design?

I recommend that you read Steve Krug's Don't Make Me Think first. The book has a great checklist of things that you have to take into consideration when designing your UIs. While it's focused on web usability, a lot of the lessons therein are valuable even to desktop application designers.

That being said, whether you use Windows forms or WPF or Flash or whatever new and shiny thing that comes around is, it is of utmost importance to hire either a) a real designer, or b) a development guy with a lot of UI design experience, either of which who can provide you a serious URL for their design portfolio. It will help a lot not only in improving the design of your application but also unburdening your developers from thinking about UI design, and allow them to focus on the back-end code.

As for "business focused" guys -- it would be really great if you would get the opinion of actual customers and stake holders, and have them do some usability testing for your application. It's their opinion that would matter most.

I think it would not be difficult to get a good designer up to speed on Microsoft Expression Blend to whip up some good XAML designs that your team could use to come up with a really good product.

One of the window dialog of a software I'm working on looks a bit like this : (original screen-shot copied from this coding horror post, other examples available on this SO question)

alt text

The thing is that none of the options can be removed (those who can have already been), and that they must all be visible at a glance (i.e. no tabs allowed) Edit : I've added a comment explaining why tabs are not an option in my specific project.

I've tried to use colors, to add icons, but it just added to the overall feeling that someone had just dropped controls randomly using Visual Studio Form designer during a summer internship.

How can I make this dialog more user-friendly less horrifying without deleting features ?


Edit : The GUI example I took has a lot of obvious design flaws (see those answers 1 2), but even after fixing those (which I've done on the software I'm working on), the dialog still looks pretty ugly.

Below is another example (credit). Controls are (almost) lined up correctly, appropriate controls are used, etc, but the overall result still looks terrible :

alt text

The thing is that none of the options can be removed (those who can have already been), and that they must all be visible at a glance (i.e. no tabs allowed)

Sigh. I would argue that, because everything is visible at a glance, they practically become invisible in a sea of controls.

That being said, the ff (yes another list) are my suggestions:

  • To reduce clutter, make the overall form bigger, and all controls more widely spaced apart in all directions
  • Standardize the height of the controls, e.g., textboxes must all have same height, buttons all have same height, etc
  • Align labels with text boxes more consistently
  • Make the layout flow down instead: 1 column, with each group having the same width as all other groups
  • Set all group box names in bold to make them stand out
  • Put all those "wGetStart.bat" commands in a group of its own

If you really want to learn more about making it "flow", with or without getting rid of all this "visible" information, you might wanna get a copy of Steve Krug's Don't Make Me Think:

Steve Krug Don't Make Me Think

How do you test the usability of the user interfaces of your applications - be they web or desktop? Do you just throw it all together and then tweak it based on user experience once the application is live? Or do you pass it to a specific usability team for testing prior to release?

We are a small software house, but I am interested in the best practices of how to measure usability.

Any help appreciated.

I frequently take any new interface I'm working on to one of our technical support people. They've heard every complaint about interfaces that you could ever imagine, so if anyone is going to think up potential problems, they will.

Also, and I'm not kidding about this, I often take the least computer literate person I know (you're mother is often a good choice...but they have to have used a computer before, otherwise it's going to by pointless) and let them loose on the interface with no instruction. If they can't figure out where things are intuitively, then your GUI likely needs work. Remember, Don't make them think! (yes, I know this is for web design, but it applies)

I know that the default answer is "it depends", but I want to know the feature list you are working from in developing a good application.

I'm particularly interested in features that need to be cared about at design time because adding them late will cost us a lot.

Please list one feature per answer so we can vote for the most important features.

Any extra info, like your own war stories, will be appreciated.

I ask this question to enhance my application from day zero, and I think I'm not the only one with this target, so please write whatever feature YOU think should be exist in a good application.

Usability - No matter how extensible and error free our application is, its success will usually depend upon how much the end users will like it. It could be coded like trash underneath, but if it's easy to use and very intuitive to learn, it will still be a winner.

Never forget that to the end user, the UI is the program. Make a high degree of usability a feature for all your applications.

Someone in the comments asked how to implement usability as a feature -- unfortunately it's not something you can make a feature request on (e.g., "make this website usable") but it's more like a set of guidelines you should follow when designing your UI, much like the guidelines you follow during coding that makes your programs extensible.

This post is hardly enough space for that. I highly recommend Don't Make Me Think by Steve Krug as a starting point for any person concerned about usability.

I have been support a web app that is used by a user base who's age range if from 40-65. The app is very good and has the latest ajaxy stuff etc. What we would now call very user friendly and responsive. I am amazed as to how this app is not so userfriendly for that user base. I was told that some autocomplete features make them disoriented!! Also, a lot of accidental clicks happen, they sometimes say "its not going thru!" then I realize that one of required check boxes were not clicked. I hope I made the scenario clear.

Could someone provice me resources/tips for this? Is not so much as an accessibility issue.

Don't make me think

is like a bible, a must read lecture

I'm looking to find any articles/books on usability. I'd like to get a handle on best practices when designing a UI, this can be anything from which user controls are more intuitive to a new user, to how to phrase text that is displayed to the user to avoid confusing dialogs. I mainly do Windows desktop applications, but most usability standards, I assume, would stand true regardless of the platform.

As an example, here's an MSDN article about the Windows User Experience Guidelines: http://msdn.microsoft.com/en-us/library/aa511258.aspx

The Design of Everyday Things by Donald A. Norman is a standard book on general usability considerations that can be applied to just about everything in day-to-day life. It's not specifically about software, but it's worth it to read it.

Universal Principles of Design is a recommended textbook for my university's Engineering Methods of Software Usability course. Myself, and others who have taken this course, have found this book to be more useful than the required textbook. There appears to be an updated version, called Universal Principles of Design, Revised and Updated: 125 Ways to Enhance Usability, Influence Perception, Increase Appeal, Make Better Design Decisions, and Teach through Design, but I can't speak about that one.

Designing Visual Interfaces by Mullet and Sano provides a great foundation for different layout-related issues. Not a book on usability per se but still relevant, I'd say.

As for web resources, try:

For book inspiration, see Suggested Readings in Human-Computer Interaction (HCI), User Interface (UI) Development, & Human Factors (HF) (and all the great answers in this thread).

Well, a long-standing favorite specifically for user interface design is Alan Cooper's About Face. It should touch most important topics when designing Windows desktop applications.

Then there are also various UX patterns which are well-presented in Quince (needs Silverlight).

Jef Raskin's The Humane Interface is also rather good, but very radical in his ideas. Still, this book points out many fallacies in modern UI design. If you need to stick to the WIMP world, then following his suggestions might be a little hard as he tends to suggest to overthrow everything we're used to. But well-written and good for provoking thoughts, even if you don't follow all his advice.

As for books/articles on usability in general or on slightly different topics:

  • Jakob Nielsen's website useit.com. While not particularly fancy-designed it is a trove of thoughts and advice on usability in general.
  • Steve Krug's Don't Make Me Think. Web usability, but also a very good read.
  • Donald Norman's The Design of Everyday Things. Usability in general and has many pointers on how to think about usability without going into specific technologies. It's applicable to desktop application usability anyway, though.

Try reading this book: Don't Make Me Think. While it's focused on web usability it is applicable to all facets of UI design.

I am putting together some mock-ups of my first real interface and I am left wondering: What are some basic tenets of good user interface design? I am looking for something like a bullet list summary and maybe some resources that might be useful for each tenet.

"Don't make me think!", the title and the book are extremely useful when designing a UI. Some of my favorite sections from it include:

  • Create a clear visual hierarchy.
  • Conventions are your friend.
  • Happy talk must die.
  • Instructions must die.
  • Four reasons why I love tabs.
  • The trouble with Rollovers.
  • Farmers vs. Cowmen.
  • The myth of the "Average" user.

Go and read Controlling Your Environment Makes You Happy and then read Don't Make Me Think! A Common Sense Approach to Web Usability.

Keep it simple, don't ignore convention and mimic sites/programs that work well.

Joel Spolsky (who is co-creator of SO :) ) has a book called "User Interface Design for Programmers" as well as a series of articles on his website (Joel On Software) related to that book.

Another great resource to start with is Jacob Nielsen's usablity website.

I have spent most of my development career writing backend code, or front-end apps for used as daily business tools, by at least semi-skilled staff, e.g. order-tracking, sales capture, etc. That those I helped build peformed their tasks well is comfort enough, but I am still seeking excellence in the building of these kind of apps, versus the trendy emphasis on more personal relationships with the UI.

Can anyone recommend reading on this type of application (LOB?) on the web today? Any available examples to study?

I suggest that you read Don't Make me Think. Don't think that engaging UIs are not efficient. I would suggest the opposite.

Actually this answer has many useful links.

Being mostly a software developer I find that the hardest thing for me is to produce usable user-interface.

I did read some books, including The Smashing Book and Web Design For Developers. But those are mostly concentrated on the Design rather than on building more complex interfaces (like allocating many-to-many items with search with different options on both sides, grouping using different fields and so on).

Are there any books, articles that target building more (logically) complex UIs for the web?

Based on the other answer on the SO the Designing Web Interfaces book looks good

Thanks,
Dmytrii.

As with any topic, get your hands on as many resources as possible.

My most recent addition to my pile of books is Designing Interfaces Patterns for Effective Interaction Design by Jenifer Tidwell. Links: Official website and Amazon.

I highly recommend it: it describes user interfaces in patterns (something that we are familiar with).

A few titles from my book shelf:

I could list more titles, however the above will get you started.

...

Possibly a bit Off-topic, however I cannot resist as this is an area that I know.

If you have the opportunity, talk with your users (or even better sit down with them as they work). It is the best research you can do when trying to improve usability of your software.

If you want to measure your usability check out running System Usability Scale test (commonly referred to as SUS scores). Link 1 and Link 2 (PDF)

HTH,

Dennis

I also like this one:

The Design Of Sites - second edition

Jenifer Tidwells book Designing Interfaces: Patterns for Effective Interaction Design is a good one.

alt text

Chapters:

  1. The user and the task.
  2. Organizing content
  3. Navigation
  4. Organizing the page
  5. Actions and commands
  6. Complex data
  7. Input
  8. Buildes and editors
  9. Making it look nice

I am about to start developing a desktop application, and I am interested in making the application both usable and accessible for end users. Can anyone suggest online resources that offer guidance for developing usable desktop applications? In particular, I would be interested in learning about how to test desktop applications for usability. I am aware of several tools to validate HTML for accessibility; how could you test a desktop application for accessibility?

Thanks, MagicAndi.

I read through the entire Introduction to Apple Human Interface Guidelines, and it was not to my loss. Rumor has it that similar guidelines for MS Windows and Gnome are excellent, too, but I haven't read those.

Wikipedia has interesting pointers to usability. The single best (short) piece of literature I've seen on usability is "Don't make me think" by Steven Krug, with a focus on Web Usability.

As for Accessibility, I haven't read through all of it, but from small exerpts I blieve that real experts have written WIA-ARIA, the W3C take on accessibility.

I forgot where, but these are hints I've learned on how to test for accessibility:

  • Buy a screenreader and try to use your app with that
  • Put on glasses that are not yours (or take yours off) and find your way through the app
  • Try to handle the your App with an imprecise substitute for a mouse, to simulate disabilities of the hand. E.g., try using your app with a trackball, or with a mouse on a reflecting surface.
  • Turn the sound very silent or off
  • Use your app with one hand only.
  • Set your screen to black and white (to check that contrast suffices)

That's all I can come up with now.

Is it possible for a fairly experienced Java Developer to transition to being a Web Developer and then to Web Designer. I guess what I'm asking is - assume you have (Java) developer of above average aptitute - is it possible for that developer to acquire web development skills that will enable him/her to develop small business websites without the need to hire outside skills.
If so, where does one start on the path to becoming a Web Developer/Designer? Skills required? Tools used?

Yes. It is certainly possible, I assume you have been developing most Desktop Application and native Software using Java and so would advise to take up some JSP and Servlets knowledge to dive into web development.

  1. Books for Web Application Development
  2. JSPs and Servlet - Head First Series is good book to start.
  3. Don't Make me thing good book on understanding UI stuffs, which is important for Web Designers.

Try to browse through web-development tags as you will find very useful suggestions there.

I've noticed that Gmail, Hotmail, Yahoo, and Ebay all have their login boxes on the right. Amazon's is on the left, though.

Does anyone know why the right side seems to be the 'right' way to go?

Amazon's is on the right for me. It's just what has become the norm. Now everyone is trained to looked there.

Read Don't Make Me Think, you can get it used for $6. It goes into stuff like that.

So, as recommended, I did the W3Schools HTML and XML tutorials this weekend. I understand the basics.

Now should I look to get more depth in HTML, or go straight into learning CSS (and try to keep learning html at the same time)? If the first, where should I go for more advanced HTML tutorials?

IMHO, i would say depends on your role, are you a designer or you're the coder guy who have to put functionality into the site?

if you're into the design, then i would say css and good website designs are necessary. in that case i would recommend don't make me think and erik meyers css book.

but if you're into the functional part of web site, i would say learn javascript then jquery. i can't tell you how many times jquery save my bacon.

and finally nothing beats putting theory into practice, so you can either search around and view source and learn from good sites, or start creating your own :)

Any key to become a user experience design and Rich Internet Application design? What should I learn to reach it?

The single best, most important thing you can do to learn to become a designer is watch real people (not you, not other engineers) use real software. Read help forums. Usability test other people's software. LISTEN, like, really understand, what they're trying to do and what their goals are. Give them software that supports what THEY want to do.

I suggest starting with Jakob Nielsen: http://www.useit.com/

Other great books:

Then you need to pick up functional skills in design — that's visual design, wireframing, probably some coding (for prototyping purposes), graphics production.

As a UI guy (coding and designing user interfaces) I often find myself in the odd situation arguing about the quality of userinterfaces with programmers and other "laymen".

I find it somewhat hard to argue about things like colors, icons or layout and it doesn't seem that there is a factual right or wrong. But still - without having a convincing argument I still know (i.e. feel) that sometimes a solution is just wrong. What is your approach to this? Do you let costly usability test decide or even the customer? Do you educate yourself in usability engineering? Do you know of good books (like Joel Spolsky's "User Interface Design for Programmers") that deliver arguments? Do you avoid such discussions?

A lot of my clients are small. They don't have the money for a usability/UI expert so we make due. They understand my limitations and we both do our best to bring a little common sense to the table - understanding that we're building good-enough versus the best (UI-wise).

In my experience, large clients have the same attitude toward internal apps. It's only when you build something to sell that people are willing to spend extra money on the problem.

For myself, I believe there's no good reason to be completely ignorant. I do spend a little time reading and puttering. I've found good material with:

  • Steve Krug - his book, Don't Make Me Think!, is aging but still pretty good.
  • Donald Norman - writes about a lot more than UI design. He gets you seeing and thinking about design everywhere.
  • Jakob Nielsen - can be a little extreme. Still, he's not an idiot. He's thought about design (especially web design) a lot and makes some great observations.

Greetings:

I am going to develop a basic Web site that supports some custom content types, is multilingual, and has content moderation workflow for a restricted group of content editors. This seems like an obvious choice for Drupal, except... the content editors will have little computer experience.

In my opinion, that is a show-stopper for Drupal. For example, placing arbitrary inline images in content is a task that WordPress does well. I find Drupal's alternatives (IMCE, img_assist, etc.) clunky and not well integrated, and that will be a problem for this group of content editors.

Also, none of the Drupal content workflow modules I tried seemed well-integrated; they all had a "tacked on" feel to them. As an admin I can understand why an "Accessible content" menu item (via Module Grants module) is necessary to view draft content (fixed in D7 but I can't wait for all the modules to be ported), but I'm pretty sure it'll confuse the content editors.

An alternative is to use a PHP framework. I've read a few threads suggesting that it will take roughly the same amount of time using a good framework as it will to bend Drupal to my willing... maybe wishful thinking? I'm looking at Symfony, which gives me a basic auto-generated back-end, but which I believe I can customize to my heart's content.

How do you make Drupal accessible to non-savvy content editors? If you recommend a PHP framework, which one?

TIA!

I am a developer for a few and maintainer for a couple of Drupal sites that have a group of about 30 people with diverse affinity to technology inputting content. Drupal works great for us and I don't believe we could have done it ourselves as easily. There is just SO much already done by the Drupal community that is hard to ignore!

Anyway, we played around with a few editors and settled with the WYSIWYG module running TinyMCE with IMCE and IMCE WYSIWYG bridge. Nothing against FCK - as a matter of fact, I tried to get this implemented, but believe it or not, its name had some people frowning at it, so TinyMCE it was... Now that module is called CK, so we may revisit this in the future.

As for moderation, we used the workflow module for it as this is fairly easy to get it setup and configured. On one internet site we had "contributor", "editor" and "publisher" roles for "draft", "review" and "published" states, each with progressively more rights on the site. On the intranet site we did for the same folks, we went with "draft", "private" and "published" states.

I would not recommend a PHP framework to replace Drupal as a CMS. I've been doing PHP programming for 11 years now and although I could build a custom-made alternative solution, I don't think I could do it faster. I'd rather use Drupal as a starting ground and then develop Drupal modules to integrate our other systems into Drupal - like Track-IT and Moodle. Of course, this is just me, each one has a different background and experience, so your opinion may differ. That being said, Symfony and codeignite are pretty good for general app development (even though Drupal is good for that too!)

No matter what you do, people are generally reluctant to change. Make sure you got a solid training program in place for those folks. Not only for Drupal, but for producing web content in general. My boss bought all the the Content Managers a copy of the Don't Make Me Think book. I think that combined with the training helped establish some ground rules for content production. Also, have a staging/beta site that these folks can use as a sandbox to try things out and ask each other for input.

I hope this helps you.

I am very interested in human computer interactions and mainly web interaction. Can you please tell me some studies, web sites, papers, links or research groups that are investigating Web pages design metrics similar to this http://www.ccs.neu.edu/home/tarase/TaraseMetrics.pdf.

I started reading a book that might be close to what you are looking for.

Measuring The User Experience - Tom Tullis and Bill Albert

I was hoping - when I purchased the book - that it would provide a simple way to score site usability. After starting it though, it is clear that it is targeted towards teams doing user testing - helping you measure the results of your testing.

If you are looking more towards the "Don't Make Me Think" type books (that one is awesome) you might also try "Designing the Obvious" by Robert Hoekman.

The research papers that Jakob Nielsen's group publishes are also very valuable. These studies can be pretty pricey, but if you compare the costs of actually doing the research, they are relatively inexpensive.

Another pretty comprehensive resource would be at usability.gov. There is a pdf file on that site that contains a large number of usability guidelines based on research.

Jakob Nielsen is an incredible usability expert with many excellent publications in Usability. He has written great books like Designing Web Usability.

The other guy I would really recommend is Steve Krug. He wrote Don't Make Me Think and many other really great books on usability.

The other aspect to think about is User Experience Design is as much about observing and then reacting as it is about design patterns and methodologies. In that vein I have to recommend Observing the User Experience

You could also consider joining a group like the Usability Professionals Association which is devoted to promoting best practices in the field of Usability.

And after all that, how could I forget Boxes and Arrows?

of course, the field of User Experience Design is rather huge and expansive. Think of these as starting points on a long and rewarding journey :)

I'm seeking graphic advice on how to have your interface look better.

So far I've been focusing on usability but its starting to look like a Jakob Nielsen kind of interface.

I'm searching for tutorials on how to pimp up my windows forms application or at least general guidelines on how to do so

edit :

thank you for the info. I was looking for something more oriented toward pure graphic considerations instead of usability documentation.

This question refered me to this site which is very nice. It is the kind of page which says "hey, to look nice your application should have rounded corners". Very useful, lots of different gotcha I'll look for

Don't Make Me Think is a classic and must-read:

http://www.amazon.com/exec/obidos/ASIN/0789723107/ref=nosim/joelonsoftware/

From Amazon.com:

Product Description

People won't use your web site if they can't find their way around it. Whether you call it usability, ease-of-use, or just good design, companies staking their fortunes and their futures on their Web sites are starting to recognize that it's a bottom-line issue. In Don't Make Me Think, usability expert Steve Krug distills his years of experience and observation into clear, practical--and often amusing--common sense advice for the people in the trenches (the designers, programmers, writers, editors, and Webmasters), the people who tell them what to do (project managers, business planners, and marketing people), and even the people who sign the checks.

Krug's clearly explained, easily absorbed principles will help you sleep better at night knowing that all the hard work going into your site is producing something that people will actually want to use.

I've built it now how do I create a half decent design? I need some techniques, resources, examples, books etc. for an information intensive web application.

P.S. - I just bought Web Design for Developers from Pragmatic Programmers and its not very good!

i think it's a rather popular question here:

best-way-to-begin-learning-web-application-design

improve-web-design-skills

For books:

best-books-to-learn-about-design

user-interface-design-books-resources-for-programmers

And if you haven't read it yet, do read Don't make me think and Non designer's design book for good page layout design.

I've got a form like this:

<html> 
    <body> 
        <form onSubmit="alert('Just got submitted');">
            <p>
            Hello: <input class="field" type="text"/><br/>
            Goodbye: <input class="field" type="text"/><br/>
            </p>
        </form>
    </body> 
</html> 

which in one browser submits happily on user pressing enter from one of the fields, and in another browser, doesn't. Oddly, if I remove the second field, it works in both.

My question is really - is it okay to have a form with no explicit submit element? I really like this behaviour.

It's certainly more than possible to have a form with no submit element, especially if you use JavaScript events to submit the form. I highly suggest you use the onkeypress event to detect the "enter" key being pressed rather than depending on the browser to just accept the "enter" key if you make a form with no submits, to make it cross-browser compatible.

However, I think it's bad form to leave out a submit button of some sort. (It doesn't necessarily have to be an input of type "submit", could be "button" or an image you click.) It's just a standard to have forms that people fill out submitt via a button, and you're taking that away, which could confuse many users who are used to a button. It definitely violates the principles of Don't Make Me Think by presenting an alternate form to the norm.

As a web designer should i learn 3d programs too over development skills? curious to see what people say.

Looking at most web sites today, I'd suggest the world needs more great web designers rather then web designers that also happen to also know 3D and development skills.

So, read books from Steve Krug, Alan Cooper, Don Norman (and others) on good design and look at as many good/bad web sites as possible and think about what actually makes them good or bad.

Aim at becoming the best web designer you can be, rather then becoming a generalist who can do many things but none brilliantly.

In my opinion this will enhance your employability rather then reducing it because there are a million bad web-sites for every one intuitive, easy to use, web-site out there. If you become a great web designer you will always be in demand.

I am building an internal, data-heavy website for my company on the Microsoft stack (ASP.NET 2.0/C#/SQL Server). Lately I have been trying to improve the layout and design of this site, partly because I want it to look good for my employers, but mostly because I want to learn about page layout and design.

My question is, what is the first thing I should know about improving the layout and design of pages in a data-intensive (e.g. lots of large grids, validation, minimal navigation, etc.) website. I really have no idea where to begin.

I am creating a form wizard that guides the user through each form element, showing a tooltip describing each element. What I am trying to accomplish is:

  • Keep each form field disabled, excluding the form field the user is currently filling out.
  • When the user wants to continue onto the next field, they need to click on the tooltip for the field they're currently on. Also, the field needs to be non-empty to advance.

I have the tooltip appearing correctly, and it vanishes upon click. What I can't figure out is how to say in JavaScript code: "Has the user entered data into the current field and clicked on the tooltip to advance? Okay, then continue onto the next field until we've reached the submit button. Otherwise, stay here on the current field."

Here is my code:

function prepareForm() {
  var inputs = document.getElementsByTagName("input");
  for (var i = 0; i < inputs.length; i++){
      if (i !== 0){
          inputs[i].disabled = "disabled";
      }
      // Make sure the tooltip tag is present...
      if (inputs[i].parentNode.getElementsByTagName("span")[0]) {
          inputs[i].onfocus = function () {
              this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
          }

          // When the user has entered information and clicked the tooltip, continue onto the next field.
          inputs[i].parentNode.getElementsByTagName("span")[0].onclick = function () {
              this.parentNode.getElementsByTagName("span")[0].style.display = "none";
          }
      }
  }
}
window.onload = prepareForm;  

I've tried entering other logic in the onclick function, but because it gets executed at any time, I don't have access to the inputs array. Any help on how I can accomplish this would be really appreciated. Thanks!

I would not recommend this. You are changing the default behavior of forms... with little or no benefit for the end user.

In addition you are forcing the users to do additional work between fields clicking on non-form field elements.

This fails basic usability and will only confuse users. On a side note, if you haven't read "Don't Make Me Think" by Steve Krug please check it out at your earliest convenience - it is chock full of eye opening details about why "inventing" new UI concepts is often a bad idea.

Update: So I think its only fair that I provide a different recommendation based on the information given about this form being very much a hand-holding exercise.

Thus based on the need to control input field by field, I think the only way to do so in a usable way would be to provide this as a wizard, one field per page. There are some added benefits to this in that if a decision is made in an early step that negates the need for a future step it can be omitted completely.

As a result I envision a form where there is a Previous/Next button at the bottom of each step (where applicable... e.g. step 1 would have no previous). The Next button would start disabled and only enable itself when the user has put input into the field on that page. When each step is shown, the focus should automatically be put into the field to enable quicker entry.

If possible, a progress bar or % complete indicator can be added to give the user a better understanding of how many steps remain.

Pros/Cons to this approach.

Pros:

  • The user does not need to click anywhere to enable a valid transition to the next field
  • No fields are disabled causing user confusion (except the Next button which is expected)
  • The user can focus on the one field that matters at that moment (e.g. phone number) and there is plenty of room for instructions/help
  • If step 1 is asking for say "Gender" and the user selects "Male" then step 6 that asks if the user has ever been pregnant can be skipped/auto-answered
  • If the user wants to go back they can
  • The user can't "accidentally" get to the next field without filling out the previous field
  • The user will be familiar with this style/behavior of wizard, this is fairly typical of many wizards/installers

Cons:

  • User can not see all questions at once
  • User can not enter field values out of order
  • User can not simply tab from field to field thus the overall form will be slower for advanced users vs. a single form

I'll soon be working on a personal website that will include static and dynamic content (starting with static content, with dynamic content added over time using both custom-written components as well as open-source solutions), however I'm fairly new to web design and development, so any advice on things such as directory structure, file names, document structure...anything. Thanks.

Usability is your friend. Steve Krug's Don't Make Me Think! is pretty good, giving examples of conventions to follow etc.

Im onto building a web application with lots of forms, and probably lots of editable, inputable, fancy tabular data.

Putting the technology used aside, im quite confused about how to layout the application. I've seen some using menu on the left, or the top of the page.

Or some use toolbar that contains the same CRUD buttons for every transaction forms.

Or some would use normal buttons inside that form inside the associated form panel.

Some would rather use lots input forms instead of using inputable grid, and they could next / prev the transaction forms just like flipping real papers.

Some would choose grid, and would have several types of grid that could ease the user a lot, like providing previous searches, or the user can even save the search criterias, etc.

I think i just want all these proven and good practices of designing a userfriendly interface in a book.

Does these kinds of books exist ?

Don't make me think is a good place to start, when it comes to designing user friendly UI.

I have this application where the users can change text files and when they forget to save them, a little message pops up reminding them that the changes are not saved and asks them if they want to save the changes or not with two buttons "Yes" and "No". It also has a little checkbox that says "Disable this warning". And as the same says, if the user checks it, the message will never pop up again when the text files have unsaved changes.

A couple of questions:

1) Should the checkbox value (if they checked it) be remembered if the user only selects "Yes", only selects "No" or any of them?

2) Let's assume the user checked the checkbox so is not warned again about unsaved changes. What should be the expected behavior the next time the user forgets to save the changes?

Should I always assume a default action (yes: save changes, no: discard changes) after the user disabled the warning? If so, which action?

Or should I always save the changes or always discard the changes accordingly to the last user action right after the he disabled the warning?

What you're doing is a common UI pattern but IMHO I think it's not a good user experience. Here is an alternative that I think is much better:

  • New files save automatically every minute or so (vary this by how long it takes to save);
  • It saves to a temporary file;
  • If the user saves a file then give it a name and save it to that location;
  • If the program crashes then the temp file is still there. The program should ask what you want to do with it when you start up;
  • Closing the program should have a simple checkbox "Save Now?" (Yes/No). None of this "Are you sure you want to..." rubbish. Not saving should leave the file as a temp file;
  • Getting rid of the temp file requires selecting a Discard action (with confirmation of "Discard Now?");
  • Opening an existing file has the same save every minute functionality except that the saves are to a temporary file. Never modify the original unless the user explicitly saves the file, at which point copy the temp file over the original.
  • Temporary files should be visible on a collapsible pane (or equivalent) including the date of the last edit and preferably a preview to remind the user what it is;
  • There should be no option to disable this behaviour. It's not invasive or intrusive. As Joel says, every time you give a user an option you force them to make a decision. Options are way overused.

To specifically answer your question: you should never discard anything unless the user asks you to.

Controlling Your Environment Makes You Happy is a must-read on usability. Don't Make me Think! is too.

Or should I always save the changes or always discard the changes accordingly to the last user action right after the he disabled the warning?

I believe that should be the expected behavior. It would be nice if you had a hint on the screen of the default action that will take place.

I recommend the book About Face 3: The Essentials of Interaction Design for some really good GUI designing ideas.

I think it's a simple question but a little bit complex question too. ;-)

What are the required fields for a simple user registration form.

I think we don't want to enter all the user details at the first step of the registration, we can set that after the successful registration.

sample form

 First name        :_ _ _ _ _ _ 

 Middle Name       :_ _ _ _ _ _ 

 Last Name         :_ _ _ _ _ _ 

 Organization name :_ _ _ _ _ _

 Email id          :_ _ _ _ _ _ 

 and finaly captcha: 

So any other suggestion?

please give me your thought about this.

I'm a big fan of one of the methods Steve Krug suggests in his book Don't Make Me Think, which is to ask for the minimum now, and for details later. So ask for an email address and a password (which seems to be missing from your example) only.

You'll lower the threshold for the user to become a register member at your site, and it's easier to have your visitor fill out more information once he's "inside" and sees the value of providing you with the extra information.