I just remembered this quote from an recruitment info session put on by Microsoft. And I think the speaker was right on the money. It's the application developers' job to make sure ther's way for the user to screw up. There should be no such thing as "User Error". So keep that in mind on the next project you're working on.
I'm not saying this is easy to do, in fact, it is probably the most difficult part of a software product designed for non-techies. There's a lot of interesting ideas on usability in software. The key is being able to get into the minds of users. I'm sure we all can think of times when using a piece of software caused some grief. But I won't name any of them here :)
Also, remember that the vast majority of the people on this earth are not fluent in C++/Java. So asking them "Do you wish to debug?" (ala Internet Explorer) or telling them "Error 0xFF32898" is pretty useless. Make software for normal people. Remember, Windows 3.1 sold more copies in a matter of months than *nix did in its entire existence because Windows 3.1 was designed for the masses.