I'm reading the very excellent The Design of Everyday Things by Donald Norman. In it, he describes a common problem:
The reason [that nobody reported a problem with the system] was simple: when the system stopped working or did something strange, the secretaries dutifully reported it as a problem. But when they made the "return" versus "enter" error, they blamed themselves. After all, they had been told what to do. They had simply erred.
A common response to many technical problems (though not so common on SOFlow, thankfully), is to simply say, "RTFM" (warning: explicit). I'm sure there are cases when this really is the best response.
But take a problem like printf
, where there is mass confusion. (See this question; in particular this response and my counter.)
- The obvious parallel from
printf
to the written number is that "10.2f" means a float with 10 digits, then a decimal, and finally 2 more digits. - The correct interpretation, however, is that the width is 10 (including decimal) and there are two digits after.
Clearly we can't redesign all of printf
now -- too much would break. But in the next version -- let's call it aprintf
, can't we make the usage match the expectation?
I think there is a danger in saying, "it's the user's fault for not reading the spec," when the spec is poorly designed.
Nota bene: I'm not saying that the design of printf
is the wrong one; maybe there are really good reasons why it must be that way. But users can't be expected to foresee those reasons, so the design is counterintuitive.
In summary: blaming the user gets us designers and programmers off the hook, but it doesn't make anyone's life easier in the long run.