A computer program is a file or collection of files that instruct a computer what to do. Just like a program at a play or concert, a computer program at the most basic level is a list of events. The computer iterates through the list and performs functions based upon the instructions in the program. Computer programs are rarely used in a stand-alone fashion: most programs used in home and business settings read input from data files or store their output, thus constituting one component of a software system. Even the simplest of calculator programs with no persistent memory or user-configurable settings make use of shared code libraries, thus they are not true stand-alone programs. A computer program is one type of software, other types of software include configuration files that store user preferences, linked or shared libraries, and user files which contain data.
Computer programs are either written in machine language, which is directly readable by the computer's CPU yet difficult for humans to understand, or in a high-level programming language which is similar to human languages, but must be converted to machine language in order to run. The task of converting the high-level languages to machine language is usually done by a compiler (another program), which is written in an intermediate-level language that was likely considered a high-level language at the time it was written. Thus as new, more powerful programming languages are developed they can be used to develop newer, yet more powerful languages. This constant reinvention cycle, aided by rapid improvements in computer hardware, helps fuel the software industries' accelerated development and release schedule. Usually, computer programs that are acquired by the end user are already converted into machine language and the code that created it cannot be examined or altered. Programs that distribute the source code with the intention that others will read it and improve upon it are usually referred to as open-source software.
The first computer program was written in the early 1840's by Ada Lovelace as an amendment to a translation of the description of the unbuilt Analytical Engine. This early program describes an algorithm for computing Bernoulli numbers: a tedious, repetitive task that is easy to compute in an automated fashion. While simple in theory, this pioneer application of the algorithm established many core principals for computer programing still used today. The concepts of program flow, decision making, turing completeness, and necessity of valid input were all developed in Ada's notes. Additionally, this program preceded the construction of computers actually capable of running it by almost one hundred years.
Programming Science Software Technology Terminology Questions