First-Generation Programming Languages Second-Generation Programming Languages
First-Generation Programming Languages Second-Generation Programming Languages
First-Generation Programming Languages Second-Generation Programming Languages
Slightly later, programs could be written in machine language, where the programmer writes
each instruction in a numeric form the hardware can execute directly. For example, the
instruction to add the value in two memory location might consist of 3 numbers: an "opcode"
that selects the "add" operation, and two memory locations. The programs, in decimal or binary
form, were read in from punched cards, paper tape, magnetic tape or toggled in on switches on
the front panel of the computer. Machine languages were later termed first-generation
programming languages (1GL).
The next step was the development of the so-called second-generation programming languages
(2GL) or assembly languages, which were still closely tied to the instruction set architecture of
the specific computer. These served to make the program much more human-readable and
relieved the programmer of tedious and error-prone address calculations.
John Mauchly's Short Code, proposed in 1949, was one of the first high-level languages ever
developed for an electronic computer.[27] Unlike machine code, Short Code statements
represented mathematical expressions in understandable form. However, the program had to be
translated into machine code every time it ran, making the process much slower than running the
equivalent machine code.
At the University of Manchester, Alick Glennie developed Autocode in the early 1950s. As a
programming language, it used a compiler to automatically convert the language into machine
code. The first code and compiler was developed in 1952 for the Mark 1 computer at the
University of Manchester and is considered to be the first compiled high-level programming
language.[28][29]
The second autocode was developed for the Mark 1 by R. A. Brooker in 1954 and was called the
"Mark 1 Autocode". Brooker also developed an autocode for the Ferranti Mercury in the 1950s
in conjunction with the University of Manchester. The version for the EDSAC 2 was devised by
D. F. Hartley of University of Cambridge Mathematical Laboratory in 1961. Known as EDSAC
2 Autocode, it was a straight development from Mercury Autocode adapted for local
circumstances and was noted for its object code optimisation and source-language diagnostics
which were advanced for the time. A contemporary but separate thread of development, Atlas
Autocode was developed for the University of Manchester Atlas 1 machine.
In 1954, FORTRAN was invented at IBM by John Backus. It was the first widely used high-
level general purpose programming language to have a functional implementation, as opposed to
just a design on paper.[30][31] It is still a popular language for high-performance computing[32] and
is used for programs that benchmark and rank the world's fastest supercomputers.[33]
Another early programming language was devised by Grace Hopper in the US, called FLOW-
MATIC. It was developed for the UNIVAC I at Remington Rand during the period from 1955
until 1959. Hopper found that business data processing customers were uncomfortable with
mathematical notation, and in early 1955, she and her team wrote a specification for an English
programming language and implemented a prototype.[34] The FLOW-MATIC compiler became
publicly available in early 1958 and was substantially complete in 1959.[35] FLOW-MATIC was
a major influence in the design of COBOL, since only it and its direct descendant AIMACO
were in actual use at the time.[36]
Refinement
The increased use of high-level languages introduced a requirement for low-level programming
languages or system programming languages. These languages, to varying degrees, provide
facilities between assembly languages and high-level languages. They can be used to perform
tasks that require direct access to hardware facilities but still provide higher-level control
structures and error-checking.
The period from the 1960s to the late 1970s brought the development of the major language
paradigms now in use:
Each of these languages spawned descendants, and most modern programming languages count
at least one of them in their ancestry.
The 1960s and 1970s also saw considerable debate over the merits of structured programming,
and whether programming languages should be designed to support it.[39] Edsger Dijkstra, in a
famous 1968 letter published in the Communications of the ACM, argued that Goto statements
should be eliminated from all "higher level" programming languages.[40]