Computer software (or simply software) is the programs and procedures that enable a computer to perform a specific task, as opposed to the physical components of the system (hardware). This includes application software such as a word processor, which enables a user to perform a task, and system software such as an operating system, which enables other software to run properly, by interfacing with hardware and with other software.
The term "software" was first used in this sense by John W. Tukey in 1957. In computer science and software engineering, computer software is all information processed by computer systems, programs and data. The concept of reading different sequences of instructions into the memory of a device to control computations was invented by Charles Babbage as part of his difference engine. The theory that is the basis for most modern software was first proposed by Alan Turing in his 1935 essay Computable numbers with an application to the Entscheidungsproblem. [Hally, Mike (2005:79). Electronic brains/Stories from the dawn of the computer age. British Broadcasting Corporation and Granta Books, London. ISBN 1-86-207663-4.]
Relationship to hardware
Computer software is so called in contrast to
computer hardware, which encompasses the physical interconnections and devices required to store and execute (or run) the software. In computers, software is loaded into
RAM and executed in the
central processing unit. At the lowest level, software consists of a
machine language specific to an individual processor. A machine language consists of groups of binary values signifying processor instructions (
object code), which change the state of the computer from its preceding state. Software is an ordered sequence of instructions for changing the state of the computer hardware in a particular sequence. It is generally written in
high-level programming languages that are easier and more efficient for humans to use (closer to
natural language) than machine language. High-level languages are
compiled or
interpreted into machine language object code. Software may also be written in an
assembly language, essentially, a mnemonic representation of a machine language using a natural language alphabet. Assembly language must be assembled into object code via an
assembler.
Relationship to data
Software has historically been considered an intermediary between electronic hardware and
data, which later the
hardware processes according to the sequence of instructions defined by the software. As computational math becomes increasingly complex, the distinction between software and data becomes less precise. Data has generally been considered as either the output or input of executed software. However, data is not the only possible output or input. For example, (system) configuration information may also be considered input, although not
necessarily considered data (and certainly not applications data). The output of a particular piece of executed software may be the input for another executed piece of software. Therefore, software may be considered an interface between hardware, data, and/or (other) software.
System, programming and application software
Practical computer systems divide software into three major classes:
system software,
programming software and
application software, although the distinction is somewhat 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 use, 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 humans 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 (from a-bombs to zymurgy) now uses some form of application software. It is used to automate all sorts of functions. Many examples may be found at the Business Software Directory.
Software program and library
A
software program may not be sufficiently complete for execution by a
computer. In particular, it may require additional software from a
software library in order to be complete. Such a library may include software components used by
stand-alone programs, but which cannot be executed on their own. Thus, programs may include standard routines that are common to many programs, extracted from these libraries. Libraries may also
include 'stand-alone' programs which are activated by some
computer event and/or perform some function (e.g., of computer 'housekeeping') but do not return data to their activating program. Programs may be called by other programs and/or may call other programs.
Three layers of software
Users often see things differently than programmers. People who use modern general purpose computers (as opposed to
embedded systems,
analog computers,
supercomputers, etc.) usually see three layers of software performing a variety of tasks: platform, application, and user software.
- Platform software : Platform includes the basic input-output system (often described as firmware rather than software), device drivers, an operating system, and typically a graphical user interface which, in total, allow a user to interact with the computer and its peripherals (associated equipment). Platform software often comes bundled with the computer, and users may not realize that it exists or that they have a choice to use different platform software.
- Application software : Application software or Applications are what most people think of when they think of software. Typical examples include office suites and video games. Application software is often purchased separately from computer hardware. Sometimes applications are bundled with the computer, but that does not change the fact that they run as independent applications. Applications are almost always independent programs from the operating system, though they are often tailored for specific platforms. Most users think of compilers, databases, and other "system software" as applications.
- User-written software : User software tailors systems to meet the users specific needs. User software include spreadsheet templates, word processor macros, scientific simulations, graphics and animation scripts. Even email filters are a kind of user software. Users create this software themselves and often overlook how important it is. Depending on how competently the user-written software has been integrated into purchased application packages, many users may not be aware of the distinction between the purchased packages, and what has been added by fellow co-workers.
See also: Software architecture.
Software creation
Software operation
Computer software has to be "loaded" into the
computer's storage (also known as
memory and
RAM).
Once the software is loaded, the computer is able to operate the software. Computers operate by executing the computer program. This involves passing instructions from the application software, through the system software, to the hardware which ultimately receives the instruction as machine code. Each instruction causes the computer to carry out an operation -- moving data, carrying out a computation, or altering the control flow of instructions.
Data movement is typically from one place in memory to another. Sometimes it involves moving data between memory and registers which enable high-speed data access in the CPU. Moving data, especially large amounts of it, can be costly. So, this is sometimes avoided by using "pointers" to data instead. Computations include simple operations such as incrementing the value of a variable data element. More complex computations may involve many operations and data elements together.
Instructions may be performed sequentially, conditionally, or iteratively. Sequential instructions are those operations that are performed one after another. Conditional instructions are performed such that different sets of instructions execute depending on the value(s) of some data. In some languages this is know as an "if" statement. Iterative instructions are perfomed repetitively and may depend on some data value. This is sometimes called a "loop." Often, one instruction may "call" another set of instructions that are defined in some other program or module. When more than one computer processor is used, instructions may be executed simultaneously.
A simple example of the way software operates is what happens when a user selects an entry such as "Copy" from a menu. In this case, a conditional instruction is executed to copy text from data in a document to a clipboard data area. If a different menu entry such as "Paste" is chosen, the software executes the instructions to copy the text in the clipboard data area to a place in the document.
Depending on the application, even the example above could become complicated. The field of software engineering endeavors to manage the complexity of how software operates. This is especially true for software that operates in the context of a large or powerful computer system.
Kinds of software by operation: computer program as executable, source code or script, configuration.
Software quality and reliability
Software reliability considers the errors, faults, and failures related to the creation and operation of software.
See Software auditing, Software quality, Software testing, and Software reliability.
Software patents
The issue of
software patents is very controversial, since while
patents protect the ideas of "
inventors", they are widely believed to hinder
software development. See
Hacker ethic.
See also
Footnotes
Software
برمجيات | Sagteware | Софтуер | Softver | Programari | Software | Computerprogram | Software | Tarkvara | Programa informático | Programaro | Software | نرمافزار | Logiciel | Programa informático | 컴퓨터 소프트웨어 | सोफ्टवेर | Softver | Perangkat lunak | Software | תוכנה | Nivîsbarî | Programmatūra | Programinė įranga | Szoftver | Software | Software | ソフトウェア | Dataprogram | Oprogramowanie | Software | Software | Программное обеспечение | Softvér | Software | Software | Programska oprema | Programvara | Software | Sanaq programı | ซอฟต์แวร์ | Phần mềm | Програмне забезпечення | 软件