Software" redirects here. For other uses, see
Software (disambiguation).
Computer software, or just
software, is a collection of
computer programs and related
data that provide the instructions for telling a
computer what to do and how to do it. In other words, software is a conceptual entity which is a set of computer programs, procedures, and associated documentation concerned with the operation of a data processing system. We can also say software refers to one or more computer programs and data held in the storage of the computer for some purposes. In other words software is a set of
programs, procedures, algorithms and its
documentation. Program
software performs the
function of the
program it implements, either by directly providing
instructions to the computer hardware or by serving as input to another piece of software. The
term was coined to contrast to the old term
hardware (meaning physical devices). In contrast to hardware, software is intangible, meaning it "cannot be touched".
[1] Software is also sometimes used in a more narrow sense, meaning
application software only. Sometimes the term includes data that has not traditionally been associated with computers, such as film, tapes, and records.
[2]
[edit] History
The first theory about software was proposed by
Alan Turing in his 1935 essay
Computable numbers with an application to the Entscheidungsproblem (Decision problem).
[3] The term "software" was first used in print by
John W. Tukey in 1958.
[4] Colloquially, the term is often used to mean application software. In computer science and
software engineering, software is all
information processed by
computer system, programs and
data.
[4] The academic fields studying software are
computer science and
software engineering.
The history of computer software is most often traced back to the first
software bug in 1946
[citation needed]. As more and more programs enter the realm of firmware, and the hardware itself becomes smaller, cheaper and faster as predicted by
Moore's law, elements of computing first considered to be software, join the ranks of hardware. Most hardware companies today have more software programmers on the payroll than hardware designers
[citation needed], since software tools have automated many tasks of
Printed circuit board engineers. Just like the
Auto industry, the
Software industry has grown from a few visionaries operating out of their garage with
prototypes.
Steve Jobs and
Bill Gates were the
Henry Ford and
Louis Chevrolet of their times
[citation needed], who capitalized on ideas already commonly known before they started in the business. In the case of
Software development, this moment is generally agreed to be the publication in the 1980s of the specifications for the
IBM Personal Computer published by
IBM employee
Philip Don Estridge. Today his move would be seen as a type of
crowd-sourcing.
Until that time, software was
bundled with the hardware by
Original equipment manufacturers (OEMs) such as
Data General,
Digital Equipment and IBM
[citation needed]. When a customer bought a
minicomputer, at that time the smallest computer on the market, the computer did not come with
Pre-installed software, but needed to be installed by engineers employed by the OEM. Computer hardware companies not only bundled their software, they also placed demands on the location of the hardware in a refrigerated space called a
computer room. Most companies had their software on the books for 0 dollars, unable to claim it as an asset (this is similar to financing of popular music in those days). When Data General introduced the
Data General Nova, a company called Digidyne wanted to use its
RDOS operating system on its own
hardware clone. Data General refused to
license their software (which was hard to do, since it was on the books as a free asset), and claimed their "bundling rights". The
Supreme Court set a precedent called Digidyne v. Data General in 1985. The Supreme Court let a 9th circuit decision stand, and Data General was eventually forced into licensing the Operating System software because it was ruled that restricting the license to only DG hardware was an illegal
tying arrangement.
[5] Soon after, IBM 'published' its
DOS source for free,
[citation needed] and
Microsoft was born. Unable to sustain the loss from lawyer's fees, Data General ended up being taken over by
EMC Corporation. The Supreme Court decision made it possible to value software, and also purchase
Software patents. The move by IBM was almost a protest at the time. Few in the industry believed that anyone would profit from it other than IBM (through free publicity). Microsoft and
Apple were able to thus cash in on 'soft' products. It is hard to imagine today that people once felt that software was worthless without a machine. There are many successful companies today that sell only software products, though there are still many common software licensing problems due to the complexity of designs and poor documentation, leading to
patent trolls.
With open software specifications and the possibility of software licensing, new opportunities arose for software tools that then became the
de facto standard, such as DOS for operating systems, but also various proprietary word processing and
spreadsheet programs. In a similar growth pattern, proprietary development methods became standard
Software development methodology.
[edit] Overview
Software includes all the various forms and roles that digitally stored
data may have and play in a computer (or similar system), regardless of whether the data is used as
code for a CPU, or other
interpreter, or whether it represents other kinds of
information. Software thus encompasses a wide array of products that may be developed using different techniques such as ordinary
programming languages,
scripting languages,
microcode, or an
FPGA configuration.
The types of software include
web pages developed in languages and frameworks like
HTML,
PHP,
Perl,
JSP,
ASP.NET,
XML, and
desktop applications like
OpenOffice.org,
Microsoft Word developed in languages like
C,
C++,
Objective-C,
Java,
C#, or
Smalltalk.
Application software usually runs on an underlying software
operating systems such as
Linux or
Microsoft Windows. Software (or
firmware) is also used in
video games and for the configurable parts of the
logic systems of
automobiles,
televisions, and other
consumer electronics.
Computer software is so called to distinguish it from
computer hardware, which encompasses the physical interconnections and devices required to store and execute (or run) the software. At the lowest level, executable code consists of machine language instructions specific to an individual processor. A machine language consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state. Programs are an ordered sequence of instructions for changing the state of the computer in a particular sequence. It is usually 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.
[edit] Types of software
Practical
computer systems divide
software systems into three major classes
[citation needed]:
system software,
programming software and
application software, although the distinction is arbitrary, and often blurred.
[edit] System software
System software provides the basic functions for computer usage and helps run the
computer hardware and system. It includes a combination of the following:
System software is responsible for managing a variety of independent hardware components, so that they can work together harmoniously. Its purpose is to unburden the
application software programmer from the often complex details of the particular computer being used, including such accessories as
communications devices, printers, device readers, displays and keyboards, and also to partition the computer's resources such as memory and processor time in a safe and stable manner.
[edit] Programming software
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:
An
Integrated development environment (IDE) is a single application that attempts to manage all these functions.
[edit] Application software
Application software is developed to aid in any task that benefits from computation. It is a broad category, and encompasses
software of many kinds, including the
internet browser being used to display this page. This category includes: