On which machine was the first programming language developed? The first programming language was machine code, the native
language of the machine. Every machine type has its own version of
machine code but we can trace the earliest example of machine code
back to the days of the semi-automatic weaving loom invented by
Basile Bouchon in 1725.
Strictly-speaking, machine code is not a programming language.
Programming languages are human languages, a means of producing
machine code through symbolic abstractions that are much easier for
humans to interpret than native machine code. It should also be
noted that programming languages are never developed on a machine,
the language is purely abstract and designed according to a
specified proposals. The only thing that is actually developed on
the machine is the implementation of the machine code program that
physically converts the symbolic instruction code into the
machine's own native machine code. Before we had any programming
languages, all programs had to be written in the machine's own
native machine code. Once we had one programming language, we could
use it to create translators for other languages and indeed for
other machines besides the one on which it executed.
Note that it's difficult to know precisely when programming
languages were first used because there were many language pioneers
working simultaneously, often sharing ideas and evolving designs to
the point that it is difficult to determine at what point a
language is "fit for human consumption", so to speak. To make
matters worse, many early programming languages were proposed but
never designed, while others were designed but never
implemented.
Assembly language is the next step up from machine code. Like
machine code, every machine type has its own version of assembly
language, and is therefore a low-level language. Unlike machine
code, code written in assembly language has to be translated into
native machine code before it can be executed because machine code
is the one and only language "understood" by the machine.
Converting from assembly language to machine code is as tedious and
as error prone as writing the machine code itself, however the
actual conversion process is trivial enough that we can easily
write a small machine code program (known as an assembler) to
perform the conversion for us. The earliest known usage of an
assembly language dates from 1949 on the EDSAC computer at
Cambridge University, where the assembler (known as Initial Orders)
was implemented in read-only memory. The inventors were Maurice
Wilkes and W. Renwick.
High-level languages are more abstract than assembly languages
and are generally more portable (not machine dependent). The first
high-level programming language was probably Autocode in 1952 on
the Mark I computer at the University of Manchester, or Short Code
in the same year on the UNIVAC 1. Short Code was based upon an
earlier implementation known as Brief Code in 1949 for the BINAC
computer, but it was never tested or debugged. Autocode used a
compiler program to convert the high-level symbolic code into
machine code whereas Short Code used an interpretation program. The
difference between the two is that the native machine code produced
by a compiler can be stored and executed without any further
translation whereas code written in an interpreted language has to
be converted by the interpreter program every time it is executed.
As a result, compiled programs perform better than interpreted
programs.
Modern-day Java is an example of a programming language that is
both compiled and interpreted. Unlike a traditional compiler, the
Java compiler produces byte code which can then be interpreted to
produce native machine code. The reason for this multi-conversion
is that the same byte code can be executed upon any machine with a
Java virtual machine implementation. That is, the byte code is the
native language of the virtual machine and is much quicker to
interpret than the higher-level source code would be. It also
ensures that the intellectual property -- the source code itself --
is not revealed to the user.
It is worth noting that Plankalkül was designed from 1943 to
1945 for the Z3 and therefore predates assembly language as well as
Autocode and Short Code. However it was not actually implemented
until 1998, more than 50 years after it was designed!
|