Most people experience computers as 'end-users' of packaged programs. Unfortunately the writers of these programs can't know the details of the job you are trying to do. Trying to meet the needs of diverse users, they bloat their programs with hundreds of features most people never use. Life (and programs) would be much simpler if each user could add the functions he/she wanted. Providing this capability in a program is not trivial. The programs must be designed to accept user- written components in appropriate places. There must be a way to store and manage them. Most important, since most users do not have the time or inclination to learn the tools and skills of a professional programmer, reasonable compromises are required. Because of wide differences among the users and their purposes, there is no one method of end-user programming. Ideally there is a smooth progression from simple but limited metaphors, to more complex and powerful techniques as the user-programmer advances. What is the following passage all about?