Continuing with my education, there's another thing i've noticed about interfaces and their design and/or evaluation:
In using a device, there are always 4 actors, though some barriers might get blurry when it comes down to really simple programming:
1 - A user with an internal model of the goal, actions and preferences that the users wishes to bring into being. The user feels a need to change the data on the device. How and why depend mostly on the abstraction or the metaphor that the user has created for the usage of the device
2 - A physical interface that is handled by the user to manipulate the software interface. This is the input/output layer where actual communication with the device takes place.
3 - A software interface that translates specific actions with the physical interface into predetermined actions that can be understood by the software model.
4 - The software model, which is the full functioning of the software at the lowest level.
To elaborate : Most interfaces hide the inner workings of the software. A user could press play on a mediaplayer and is blissfully unaware of the fact that a filestream is opened, sound hardware is initialised and data is sent to the audio interface. Just like most users do not need to completely understand a car to drive it, the car itself will need to know.
I suspect that a lot of trouble with interfaces stems from a large gap between the complexity of the software model and the mind model of a user.