This is my view of the highlights of
software development and is no
attempt to be a complete reference, nor an attempt to be fair to all
the people that have contributed to software development over the
years. A bit more thorough reading is available on Wikipedia for Programming
The earliest computers were programmed
in their native "machine
language". This consisted of mechanical plugs in holes, recabling the
computer, electromechanical switches, punched card readers or similar.
There is reason to believe there were
some kind of documentation on
how to solve the problem, decomposed into pseudo-operations, further
decomposed into some mnemonic code that was more or less a one-to-one
mapping to machine language instructions. Using symbols for jump
targets (labels) and for data memory locations (variables) the Assembly
language evolved. It was of course specific to the computer you were
programming, and hand-translated into machine language (you wouldn't
waste expensive computer time for such trivial tasks).
Anyway, Assembly language was the
first attempt to write
an accurate human-readable representation of what the
computer was intended to do. Earliest documentation I've found is this from
1949. There was of course Konrad Zuse's Plankalkül
published 1948, but I don't know whether it was really used as a
revolutionary in the sense that it was compiled into machine code by
the computer, thus reducing the amount of typing for the programmers by
a factor of 20 (roughly). It was machine independent (portable
between different types of computers), highly optimizing and introduced
decomposition by the use of subroutines. First compiler appeared 1957.
My guess is that it reduced the number
of programming errors by at
least a factor of 20 too. Or possibly it allowed the programmers to
write much larger programs before they became too buggy to maintain...
was inspired by the theoretical Lambda Calculus. It added abstractions
to high level languages such as data structures (lists, that could
contain other lists as elements), first class functions (functions as
data type) allowing for anonymous functions (lambda expressions) and
higher order functions. Lisp allowed for recursive functions. It also
required automated garbage collection of the heap. First compiler came
around 1960, with a full compiler written in Lisp ready 1962. Software
written in Lisp was very slow but Lisp's expressiveness made it very
popular among programmers stdying artificial intelligence.
was developed 1959-60 to provide a language for administrative
programming. It was very verbose but made an effort to make programs
human-readable even for non-programmers as well as
born around 1958 and first implemented 1960. It has influenced
virtually all languages designed since. It was the first language to be
specified by a formal notation, Backus-Naur
It invented the nested block structure with local variables and
functions providing information hiding, and lexical scoping defining
visibility by source code structure rather than execution order. There
was a major revision into Algol-68 but this language specification was
so complex so overy few compilers were implemented and few programmers
learned this version of the language.
Short for Beginners
All-purpose Symbolic Instruction Code,
not very inventive in itself but made programming more publicly
available as the language was interpreted and could be used
interactively. The original from 1964 has evolved into various versions
and is still one of the most popular languages for application
development, much thanks to Microsoft Visual Basic.
was an extension to Algol and introduced object oriented programming
with classes, inheritance, reference types and objects.
programming languge is not very inventive but was very appealing to
programmers due to its portablity between platforms - from
8-bit embedded computers to mainframes and supercomputers virtually all
computers have a C compiler. Also the Unix operating system was more or
less entirely written in C, or rather developed i parallel with C
around 1972. Many consider it to be not a high-level language but a
mid-level language due to weak typing and (usually) predictable
translation into assembly language.
Though not as revolutionary as the
invention of object-orientation, Smalltalk
is a beautiful language entirely built on object orientation and
message passing invocation. Implemented initially around 1972 at Pal
Alto Research Center (PARC) the first public release was Smalltalk-80.
Apart from the language itself the Smalltalk environment implemented a
GUI (Graphical User Inteface) with WIMP (Windows, Icons, Menus and
Pointing device) thus being the origin of current GUIs.
In addition to this, the Smalltalk
team introduced the
Model-View-Controler (MVC) programming model, the first design pattern
for interactive applications and one of the first design patterns
(though the term Pattern wasn't introduced until around 1987).
is a logic
programming language, i.e. a declarative programming language where the
programmer declares a set of facts and rules and then specifies what
the program should determine rather than how
to solve the problem as in imperative programming languages. It was
invented 1972 and is still in use though not very widespread.
Language is also a declarative language that is used to
specify operations on relational databases (RDBMS).
RDBMS is to date the most common structured database and virtually all
RDBMSes use SQL, so it is one of the most wide-spread languages and has
been around since 1978. Recent developments of Object-relational
mappers allow programmers to write database operations in other
languages (e.g. see LINQ)
that are translated into SQL for data access.
There are thousands of programming
languages developed to date, both
generic (Java, Python, C#, ML, ...) and special purpose (Lex, Yacc,
Flash, ...). I hope this page covers most ideas implemented as
programming languages though I know many prefer languages not
mentioned here. Some may find it intriguing that a new fiield of
science/engineering still has a history.
Of course there is a lot more to
software development than
programming languages - principles like structured programming,
software architecture, design patterns, configuration management,
collaboration (agile/scrum, open source, ...) project cost estimates