The **user interface** is the aggregate of means by which people (_the users_) interact with a particular machine, device, **[[computer program|computer program]]** or other complex tool (_the system_). The user interface provides means of: * Input, allowing the users to control the system * Output, allowing the system to inform the users (also referred to as _feedback_) ## Introduction To work with a system, the users need to be able to control the system and assess the state of the system. For example, when driving an automobile, the driver uses the steering wheel to control the direction of the vehicle, and the accelerator pedal, brake pedal and gearstick to control the speed of the vehicle. The driver perceives the position of the vehicle by looking through the windscreen and exact speed of the vehicle by reading the speedometer. The _user interface of the automobile_ is the whole composed of the instruments the driver can use to accomplish the tasks of driving and maintaining the automobile. ## User interfaces in computing In computer science and human-computer interaction, the _user interface (of a computer program)_ refers to the graphical, textual and auditory information the program presents to the user, and the control sequences (such as keystrokes with the computer keyboard, movements of the computer mouse, and selections with the [[touchscreen|touchscreen]]) the user employs to control the program. ### Types Currently (as of 2005) the following types of user interface are the most common: * **[[Command-line|Command-line]] interfaces**, where the user provides the input by typing a [[command|command]] string with the computer keyboard and the system provide output by printing text on the computer monitor. Used for system administration tasks etc. * **[[Batch|Batch]] interfaces** are non-interactive user interfaces, where the user specifies all the details of the _batch job_ in advance to batch processing, and receives the output when all the processing is done. The computer does not prompt for further input after the processing has started. * **[[Graphical user interface|Graphical user interface]]s** ([[GUI|GUI]]), which accept input via devices such as computer keyboard and mouse and provide articulated [graphical] output on the [computer monitor]. There are at least two different principles widely used in GUI design: object-oriented interfaces and application]] oriented interfaces. * **Web-based user interfaces**, which accept input and provide output by generating web pages which are transported via the Internet and viewed by the user using a [[web browser|web browser]] program. ### History The history of user interfaces can be divided into the following phases according to the dominant type of user interface: * Batch interface, 1945-1968 * Command-line user interface, 1969-1983 * Graphical user interface, 1984 to present — For further information, see the following external link: [[Chapter 2. History: A Brief History of User Interfaces|http://www.catb.org/~esr/writings/taouu/html/ch02.html]] See also: [[Ncurses|Ncurses]] for semi-graphical user interfaces.