Friday 24 July 2009

Computer software, or just software is a general term used to describe the role that computer programs, procedures and documentation play in a computer system.
The term includes:
Application software such as
word processors which perform productive tasks for users.Firmware which is software programmed resident to electrically programmable memory devices on board mainboards or other types of integrated hardware carriers.Middleware which controls and co-ordinates distributed systems.
System software such as
operating systems, which interface with hardware to provide the necessary services for application software.Software testing is a domain independent of development and programming. It consists of various methods to test and declare a software product fit before it can be launched for use by either an individual or a group. Many tests on functionality, performance and appearance are conducted by modern testers with various tools such as QTP, Load runner and Black box testing, to edit a checklist of requirements against the developed code. ISTQB is a certification that is in demand for engineers who want to pursue a career in testing.
Testware which is an umbrella term or container term for all utilities and application software that serve in combination for testing a software package but not necessarily may optionally contribute to operational purposes. As such, testware is not a standing configuration but merely a working environment for application software or subsets thereof.
Software includes things such as
websites, programs or video games, that are coded by programming languages like C or C++.
"Software" is sometimes used in a broader context to mean anything which is not hardware but which is used with hardware, such as film, tapes and records.
History of Computer Software
History of computer software and computer languages. It was not until after 1981 that software programs were made eligible for patents by the Supreme Court.
The History of HTML Tim Berners-Lee invented the World Wide Web and HTML or hypertext markup language.
Software Programming - The History of Software ProgrammingGeneral background information on computer languages including basic - pagemaker - java - fortran - ms-dos - visicalc - windows - computer graphics and more.
The Unusual History of Microsoft WindowsIn 1983, the Microsoft Corporation formally announced Microsoft Windows software for IBM computers and they almost named it Interface Manager,
FORTRAN The Early “Turning Point” Chapter Excerpt from "Go To: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Maverick Scientists, & Iconoclasts" by Steve Lohr
Universal Instant Messenger TrillianThe history of Trillian a universal instant messenger software.
Computer and Video Games In 1952, A.S. Douglas wrote his PhD degree at the University of Cambridge on Human-Computer interraction. Douglas created the first graphical computer game - a version of Tic-Tac-Toe.
Ada LovelaceAda Byron Lovelace wrote a scientific paper in 1843 that anticipated the development of computer software artificial intelligence and computer music
Remembering Grace Murray HopperBesides being "the" pioneer computer programmer, the co-inventor of COBOL, the grand lady of software, Amazing Grace, and Grandma COBOL, Grace Murray Hopper will be remembered for one of her now famous sayings, which is "It's easier to ask forgivenes
Aldus Pagemaker The first desktop publishing program was created by Paul Brainard and a company called Aldus.
ASCII ASCII is an acronym for the American Standard Code for Information Interchange.
BASIC BASIC (standing for Beginner's All Purpose Symbolic Instruction Code) was written (invented) in 1963, at Dartmouth College, by mathematicians John George Kemeny and Tom Kurtzas.
The History of Computer ChessDr. Dietrich Prinz wrote the original chess playing program.
The History of HTMLTim Berners-Lee was the primary author of html, assisted by his colleagues at CERN, an international scientific organization based in Geneva, Switzerland.
Java Java is a programming language and environment invented by James Gosling in 1994.
JavaScript Introduced in 1995, JavaScript an object oriented web scripting language has become an international standard allowing web developers the ability to write Dynamic HTML that works on multiple browsers.
Lingo Programming John Thompson invented lingo programming used in Macromedia Director and Shockwave.
The History of the MS-DOS Operating Systems The "Microsoft Disk Operating System" or MS-DOS was based on QDOS, the "Quick and Dirty Operating System" written by Tim Paterson of Seattle Computer Products,
The First Spreadsheet "Any product that pays for itself in two weeks is a surefire winner." - Dan Bricklin on VisiCalc
The First Word Processor Released in 1979 by Micropro International Inc., WordStar was the first commercially successful word processing software program produced for microcomputers and the best selling software program of the early eighties.
Philip Emeagwali and SupercomputersInterview with Philip Emeagwali about writing softwar for supercomputers.
Overview
Computer software is often regarded as anything but hardware, meaning that the "hard" are the parts that are tangible while the "soft" part is the intangible objects inside the computer. Software encompasses an extremely wide array of products and technologies developed using different techniques like prograrmming languages, scripting languages or even microcode or a FPGA state. The types of software include web pages developed by technologies like HTML, PHP, Perl, JSP, ASP.NET, XML, and desktop applications like OpenOffice, Microsoft Word developed by technologies like C, C++, Java,or C#. Software usually runs on an underlying software operating systems such as the Linux or Microsoft Windows. Software also includes video games and the logic systems of modern consumer devices such as automobiles, televisions, and toasters.

Relationship to computer hardware
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, software consists of a machine language 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. 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. 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 of software
A layer structure showing where Operating System is located on generally used software systems on desktops
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
System software helps run the computer hardware and computer system. It includes combination of the following:
device drivers
operating systems
servers
utilities
windowing systems
The purpose of systems software is to unburden the applications programmer from the details of the particular computer complex being used, including such accessory devices as communications, printers, readers, displays and keyboards, and also to partition the computer's resources such as memory and processor time in a safe and stable manner.

Programming softwareProgramming 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:
compilers
debuggers
interpreters
linkers
text editors
An Integrated development environment (IDE) is a single application that attempts to manage all these functions.


ArchitectureSoftware architecture
Users often see things differently than programmers. People who use modern general purpose computers (as opposed to embedded systems, analog computers and supercomputers) 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 usually 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: End-user development tailors systems to meet 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 default application packages, many users may not be aware of the distinction between the original packages, and what has been added by co-workers.
Documentation
Main article: Software documentation
Most software has software documentation so that the end user can understand the program, what it does, and how to use it. Without a clear documentation, software can be hard to use--especially if it is a very specialized and relatively complex software like the Photoshop or AutoCAD.
Developer documentation may also exist, either with the code as comments and/or as separate files, detailing how the programs works and can be modified.

Library
Main article: Software library
An executable is almost always not sufficiently complete for direct execution. Software libraries include collections of functions and functionality that may be embedded in other applications. Operating systems include many standard Software libraries, and applications are often distributed with their own libraries.

Standard
Main article: Software standard
Since software can be designed using many different programming languages and in many different operating systems and operating environments, software standard is needed so that different software can understand and exchange information between each other. For instance, an email sent from a Microsoft Outlook should be readable from Yahoo! Mail and vice versa.
Execution
Main article: Execution (computing)
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.

Quality and reliability
Main articles: Software quality, Software testing, and Software reliability
Software quality is very important, especially for commercial and system software like Microsoft Office, Microsoft Windows and Linux. If software is faulty (buggy), it can delete a person's work, crash the computer and do other unexpected things. Faults and errors are called "bugs." Many bugs are discovered and eliminated (debugged) through software testing. However, software testing rarely – if ever – eliminates every bug; some programmers say that "every program has at least one more bug" (Lubarsky's Law). All major software companies, such as Microsoft, Novell and Sun Microsystems, have their own software testing departments with the specific goal of just testing. Software can be tested through unit testing, regression testing and other methods, which are done manually, or most commonly, automatically, since the amount of code to be tested can be quite large. For instance, NASA has extremely rigorous software testing procedures for its Space Shuttle and other programs because faulty software can crash the whole program and make the vehicle not functional, at great expense.
License
Main article: Software license
The software's 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 license, granting the recipient the rights to modify and redistribute the software. Software can also be in the form of freeware or shareware. See also License Management.

PatentsMain articles: Software patent and Software patent debate
Software can be patented; however, software patents can be controversial in the software industry with many people holding different views about it. The controversy over software patents is that a specific algorithm or technique that the software has cannot be duplicated by others and is considered an intellectual property and copyright infringement depending on the severity. Some people believe that software patent hinder software development, while others argue that software patents provide an important incentive to spur software innovation.

Design and implementation
Main articles: Software development, Computer programming, and Software engineering
Design and implementation of software varies depending on the complexity of the software. For instance, design and creation of Microsoft Word software will take much longer time than designing and developing Microsoft Notepad because of the difference in functionalities in each one.
Software is usually designed and created (coded/written/programmed) in integrated development environments (IDE) like emacs, xemacs, Microsoft Visual Studio and Eclipse that can simplify the process and compile the program. As noted in different section, software is usually created on top of existing software and the application programming interface (API) that the underlying software provides like GTK+, JavaBeans or Swing. Libraries (APIs) are categorized for different purposes. For instance, JavaBeans library is used for designing enterprise applications, Windows Forms library is used for designing graphical user interface (GUI) applications like Microsoft Word, and Windows Communication Foundation is used for designing web services. Underlying computer programming concepts like quicksort, hashtable, array, and binary tree can be useful to creating software. When a program is designed, it relies on the API. For instance, if a user is designing a Microsoft Windows desktop application, he/she might use the .NET Windows Forms library to design the desktop application and call its APIs like Form1.Close() and Form1.Show() to close or open the application and write the additional operations him/herself that it need to have. Without these APIs, the programmer needs to write these APIs him/herself. Companies like Sun Microsystems, Novell, and Microsoft provide their own APIs so that many applications are written using their software libraries that usually have numerous APIs in them.
Software has special economic characteristics that make its design, creation, and distribution different from most other economic goods.
A title of a person who creates software is called a programmer, software engineer, software developer, and code monkey that all essentially have a same meaning.

Industry and organizationsMain article: Software industry
Software has its own niche industry that is called the software industry made up of different entities and peoples that produce software, and as a result there are many software companies and programmers in the world. Because software is increasingly used in many different areas like in finance, searching, mathematics, space exploration, gaming and mining and such, software companies and people usually specialize in certain areas. For instance, Electronic Arts primarily creates video games.
Also selling software can be quite a profitable industry. For instance, Bill Gates, the founder of Microsoft is the second richest man in the world in 2008 largely by selling the Microsoft Windows and Microsoft Office software programs. The same goes for Larry Ellison, largely through his Oracle database software.
There are also many non-profit software organizations like the Free Software Foundation, GNU Project, Mozilla Foundation. Also there are many software standard organizations like the W3C, IETF and others that try to come up with a software standard so that many software can work and interoperate with each other like through standards such as XML, HTML, HTTP or FTP.
Some of the well known software companies include Microsoft, Apple, IBM, Oracle, Novell, SAP and HP.

Free Software Movement
Main article: Free software movement

This section may contain original research or unverified claims. Please improve the article by adding references. See the talk page for details. (July 2008)
There is more than one approach to creating, licensing, and distributing software. For instance, the free software (or open source) community produces software under licensing that makes it free for inspection of its code, modification of its code, and distribution. While the software released under an open source license (such as General Public License, or GPL for short) can be sold for money, the distribution cannot be restricted in the same way as software with copyright and patent restrictions (used by corporations to require licensing fees).
While some advocates of free software use slogans such as "information wants to be free," hinting that it is easy to copy digital data and that the licenses (enforced through laws) are unnatural restrictions, other creators and users of open source software recognize it to be one model among many for software creation, licensing, and distribution. And the laws themselves are put into place for the ostensible purpose of increasing creative output, by allowing the creators to control and profit most effectively from their intellectual property.

Types of software

A layer structure showing where Operating System is located on generally used software systems on desktops
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
System software helps run the computer hardware and computer system. It includes combination of the following:
device drivers
operating systems
servers
utilities
windowing systems
The purpose of systems software is to unburden the applications programmer from the details of the particular computer complex being used, including such accessory devices as communications, printers, readers, displays and keyboards, and also to partition the computer's resources such as memory and processor time in a safe and stable manner.
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:
compilers
debuggers
interpreters
linkers
text editors
An Integrated development environment (IDE) is a single application that attempts to manage all these functions.

Application software
Application software allows end users to accomplish one or more specific (not directly computer development related) tasks. Typical applications include:
industrial automation
business software
computer games
telecommunications (i.e., the internet and everything that flows on it)
databases
educational software
medical software
military software tecture
See also: Software architecture
Users often see things differently than programmers. People who use modern general purpose computers (as opposed to embedded systems, analog computers and supercomputers) 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 usually 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: End-user development tailors systems to meet 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 default application packages, many users may not be aware of the distinction between the original packages, and what has been added by co-workers.