Doug over at EdTEchDev has a great set of quotes about programming and learning. I highly recommend the whole collection and think you could go there and read them all. But one of them stuck out when I read it:

That's the thing about people who think they hate computers. What they really hate is lousy programmers.
Larry Niven and Jerry Pournelle Oath of Fealty

Think about that a minute. The computer is just fine. It's doing what it was told but it was told to do the wrong thing or it was told incorrectly. The programmer did it. When we teach programmers do we ever let students blame the computer? Generally we shouldn't. What we need to do is to remind programmers that they are responsible for the user's experience. Is it a good one or a bad one? What could the programmer (I include the program designer in the general category programmer) do differently to make the user's experience better?

If data is lost, if a program is hard to use, pretty much everything that causes users to "hate the computer" is really the fault of the programmer. Now to be completely fair there are people who hate things that are physical attributes of their computers. The location of USB ports, the noise of the fans, and all sorts of things like that. Those are the fault of the hardware designers. Same principle as the programmers just different people to point fingers at. But it's still the people who are at fault not the poor innocent computer.

Wether it is software decision or hardware design the customer - the end user - is the person who has to be kept in mind. Sooner or later they will wake up and go after the person who is at fault.

BTW for discussion here is an interview with Jeff Raikes, President of Microsoft Business Division, that I found via a link on Don Dodge's blog. Don's post is also well worth reading. One of the big points Jeff makes is the need to focus on the customer more than the competition. Customer thinking is something all engineers need to learn early.