Welcome
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. 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 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 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.
The term "software" was first used in this sense by John W. Tukey in 1958.[3] In
computer science and software engineering, computer software is all computer
programs. 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.
Types
Practical computer systems divide software systems 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 as 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, interpreting, 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.
Program and library
A 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 work 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 calling program. Libraries may be called by one
to many other programs; programs may call zero to many other programs.
Three layers
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 firmware, 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. On a PC you will usually have the ability
to change the 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,
and scripts for graphics and animations. 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.
Operation
Computer software has to be "loaded" into the computer's storage (such as a hard
drive, memory, or RAM). Once the software has loaded, the computer is able to
execute the software. 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 known as an "if" statement. Iterative instructions are performed
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' area residing in
memory, perhaps to an intermediate storage area known as a 'clipboard' data area.
If a different menu entry such as "Paste" is chosen, the software may execute
the instructions to copy the text from the clipboard data area to a specific
location in the same or another document in memory.
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.
Currently, almost the only limitations on the use of computer software in
applications is the ingenuity of the designer/programmer. Consequently, large
areas of activities (such as playing grand master level chess) formerly assumed
to be incapable of software simulation are now routinely programmed. The only
area that has so far proved reasonably secure from software simulation is the
realm of human art-especially, pleasing music and literature.
Kinds of software by operation: computer program as executable, source code or
script, configuration.
License
Software license gives the user the right to use the software in the licensed
environment, some software comes with the license when purchased off the shelf,
or an OEM license when bundled with hardware. Other software comes with a free
software licence, granting the recipient the rights to modify and redistribute
the software. Software can also be in the form of freeware or shareware.
Patents
The issue of software patents is controversial. Some believe that they hinder
software development, while others argue that software patents provide an
important incentive to spur software innovation.
Ethics and rights for software users
Being a new part of society, the idea of what rights users of software should
have is not very developed. Some, such as the free software community, believe
that software users should be free to modify and redistribute the software they
use. They argue that these rights are necessary so that each individual can
control their computer, and so that everyone can cooperate, if they choose, to
work together as a community and control the direction that software progresses
in. Others believe that software authors should have the power to say what
rights the user will get.
Software companies
Examples of large software companies are: Microsoft, IBM, Oracle,APPLE, SAP and
HP.