Practical computer systems divide software into
three major classes: system software, programming
software and application software, although the
distinction is arbitrary, and often blurred.
System software helps run the computer hardware
and computer system. It includes operating systems,
device drivers, diagnostic tools, servers, windowing
systems, utilities and more. The purpose of
systems software is to insulate the applications
programmer as much as possible from the details
of the particular computer complex being used,
especially memory and other hardware features,
and such accessory devices as communications,
printers, readers, displays, keyboards, etc.
Programming software usually provides tools
to assist a programmer in writing computer programs
and software using different programming languages
in a more convenient way. The tools include
text editors, compilers, interpreters, linkers,
debuggers, and so on. An Integrated development
environment (IDE) merges those tools into a
software bundle, and a programmer may not need
to type multiple commands for compiling, interpreter,
debugging, tracing, and etc., because the IDE
usually has an advanced graphical user interface,
or GUI.
Application software allows end users to accomplish
one or more specific (non-computer related)
tasks. Typical applications include industrial
automation, business software, educational software,
medical software, databases, and computer games.
Businesses are probably the biggest users of
application software, but almost every field
of human activity now uses some form of application
software. It is used to automate all sorts of
functions.