Although this distinction is somewhat arbitrary, and sometimes confusing, for all practical purposes the software can be classified into three types:
System Software: The objective is properly decouple the user and the programmer from the details of the particular computer used, isolating processing specially referred to the internal characteristics: memory, disks, communications ports and devices, printers, screens , keyboards, etc. The system software provided him with appropriate user and developer of high-level interfaces, tools and support utilities that allow maintenance. Includes among others:
Operating Systems
Device Drivers
Diagnostic Tools
Correction and Optimization Tools
Servers
Utilities
Programming Software: This is the set of tools that allow the programmer to develop computer programs using different alternatives and programming languages, in a practical way. Includes among others:
Text Editors
Compilers
Interpreters
Linkers
Scrubbers
Integrated Development Environments (IDE): Grouping the above tools, usually in a visual environment, so that the programmer does not need to enter multiple commands for compiling, interpreting, debugging, etc. Usually equipped with an advanced graphical user interface (GUI).