When showing a first-timer how to use a computer, it is all too easy (especially for those with years of computer experience) to assume that the user knows something that they do not, even if it's something as basic as how to use a mouse or what the spacebar is. These things soon become second nature, but this demonstrates how these assumptions can cause (sometimes quite hilarious) problems.
Equally annoying is the assumption that you don't know how to do these simple things when you do. Consult the on-line help or manual for any major Windows program (even Windows itself) and it will tell you how to do things which were almost certainly completely obvious for you unless you are an absolute beginner. The slightly more in-depth information you needed (which should still be documented) is nowhere to be found.
Of course, the computer could ask at every stage "Is this too basic/too advanced" so that it could tune its messages to be of maximum benefit to the user, but said user would quickly get bored of answering these questions all the time, especially if in a hurry. The answer I have come up with is the concept of the User-level. This is a simple scale, from say, 0 to 10, on how experienced a user is. Someone of user-level 0 has probably heard the word "computer" before but has no idea what one is, but computer should never hold anything back from a level 10 user - it should always give the most detailed information no matter how confusing it may be.
The user-level is partly a level of skill but mostly a level of confidence, or a way of measuring how scared a user is by computers.
The system needs to be implemented at many different levels. The first place is in the computer shop. Picture this scenario: A customer enters, looking to buy a computer. The first thing the sales assistant should ask (unless it's obvious - never ask a question if the answer is obvious) is "Have you ever used a computer before?" If the answer is "yes" then the sales assistant can go on to determine if (a) the customer knows what a user level is, (b) if he has one and (c) what it is. Hopefully the concept of user-level will eventually become sufficiently standardised that anyone who has used a computer before knows what their user-level is.
After making the sale, the customer walks out of the shop with a large cardboard box and basic instructions (ideally in the form of a video cassette, if the customer (or user, as we shall call him from now on) has a VCR). These instructions will tell him absolutely everything he needs to know to get as far as turning the computer on.
The first time the computer is switched on it will go into a mode which I will call "default power-on state". In this mode, the computer gives the instructions, describing what the various parts of the computer do, demonstrating (and testing) the user on the use of the keyboard and mouse, concepts such as files and applications, what the internet is, how to use the world-wide-web and email and so on. If there is more than one person learning to use the computer, it keeps track of everyone's user-level separately (how the computer knows who is using it is a bit tricky if no-one can so much as enter their names, but if there is any doubt it can always go back to the default power-on state (which the user can skip easily enough).
Since the computer keeps track of exactly what each user knows, it can always provide the most concise and useful answer to any question it ought to know the answer to. It could even use artificial-intelligence techniques to keep track of the user's learning style so it knows how fast to progress and how many times it needs to repeat everything before it sinks in.
Of course, this should always be easy to override, and the best way to do this would be a context sensitive, user-level sensitive "panic button". Pressing it once brings up the context-sensitive help for whatever application the user is using and their user level. Pressing it again explains things in simpler terms. Repeated pressing of the panic button will return the computer to the default power-on state (although doesn't abandon any work in progress). As soon as the user's panic attack is over and they find themselves in familiar territory, they can start progressing forward again. At any point they should be able to ask "what does that mean" of any technical term and receive a sensible answer.
Some users may wish to have the more personal touch of a human tutor guiding them through at least the first steps. This is easily allowed for by having an option to manually set the user level (which is what the shop assistant would do before selling a computer to someone who had used a computer before).
If the user tries to do something out of his depth, he should be told in a friendly but firm manner. For example, a command prompt might be banned for all users with user level 5 or less, so upon attempting to do this a dialog box would flash up:
This function is only available to level 6 or greater users. Do you wish to
(a) Cancel (you didn't mean to do that)
(b) Learn what this function is for and upgrade your user-level accordingly or
(c) Set your user-level to 6 and jump right in at the deep end?
An important part of this user-friendly system is the concept of reliability. It's all very well having a computer that can keep track of its user's ability, but it also has to be able to keep track of itself, and that means no unexpected behaviour. In the event of hardware failure the machine should be able to diagnose itself and call for expert help if necessary (in extreme cases, when it doesn't work at all, it will be fairly obvious that it doesn't and that it needs taking back to the shop). It should have a built-in uninterruptable power supply which integrates closely with the operating system to save any unsaved work in the event of a power cut.
This is the main reason why this machine will probably use an open-source operating system such as Linux. As computers get more complicated, it has been proven time and time again that the best way to get truly reliable software is to let every programmer in sight loose on the source code so that all the bugs get ironed out quickly. Even the huge teams of programmers at Microsoft can't find and extinguish bugs as quickly as a world full of programmers. There are all sorts of possibilities for automatic maintainance - users with low-user level wouldn't even need to be told when their computer goes online to collect the latest set of bug fixes (although new features which might confuse should be explained first).
Another reason for using Linux is the level 10 rule - "Nothing should ever be held back from a level 10 user". Taking that rule to its extreme, the source code to any of the applications on the user's hard disk should not be held back.
Hopefully the combination of reliable applications and a computer system designed from first principles to be as easy as possible to use for beginners and advanced users alike will eliminate the need in the future for such things as technical support, and Computer Stupidities will become a thing of the past.
Once we have a world of computer-literates, people who understand what computers can and cannot do and are not afraid of them, and we have computers and software that are powerful and reliable enough, then we can start to implement the systems that will really change our lives for the better.