“Why a Babel of computer languages?”
The history of programming languages is very interesting. The following post discusses the evolution of programming and why there have been paradigm shifts in languages over time.
Electronic computers were introduced in the late 1930’s.
When the Von Neumann Architecture was introduced computers were able to store instructions. The computers were programmed with a language. The first of these languages was machine code and following that was assembly code, these were both very low level languages that needed to be developed using binary (0’s and 1’s). In assembly language the code is written with mnemonic codes that would represent the basic machine-language instructions of a computer.
The instructions can be interpreted by an assembler to produce a computer program in machine language; the assembler was the main difference between machine code and assembly code. These languages at the time were used by highly intelligent scientists and mathematicians; however this was due to change.
The 1950’s and 1960’s saw the development of programming languages.
These would move away from first and second level languages. The first of these languages was to be developed by John Backus. It was called FORTRAN which was and still is classed as a high-level language. The language was seen as a turning point in programming languages. The compiler technology the software equivalent to the transistor.
The advantage to this language is that it opened up programming to a wider audience, allowing the translation of algebraic symbols through the compiler. As it was easier to use than assembly code it would reduce the amount of programming time needed, allowing for faster development. FORTRAN was procedural, the key point for procedural programming is identification and articulation of the process or steps that must be followed. This made the language imperative and the steps were to become known as procedures and involved basic elements:
• looping
• conditional statements
• logical constructs
• functions
1958 saw the introduction of LISP (LISt Processing language).
A language that started the functional paradigm, even though it is actually a multi-paradigm language. LISP would start the development of many declarative and functional languages. It is still commonly used in AI (Artificial Intelligence). Functional languages are based on lambda calculus. They are designed to reflect the way that people think mathematically. They would also avoid side effects. For example if you pass a value into a function it will not be changed and the function will not cause other changes somewhere else.
A declarative language will also describe what computation should be performed and not how to compute it, an example of some of these languages are PROLOG, HTML, CSS, SQL and OWL. PROLOG is actually a logic programming paradigm which is relational, whereas the rest are domain specific.
In contrast to LISP, another imperative language was being developed called Algol-60.
This language is key to many of the modern languages used today. It introduced many of the data structures used today and also used a predefined syntax, allowing programmers to code in a structured way. The language was also procedural and according to Guzdial procedural programming was the dominant form of programming in the 1960’s and 1970’s, however this soon became a problem as programs became larger and more complex. If many programmers were working on the same program, procedural programming started to break down.
The problems were conflicts with procedures.
The programs would be written to modify data in a way other people did not expect. Different functions would be written with the same names, so when it came to integrating the code with large programs conflicts would arise. These conflicts needed to be solved, thus a new paradigm for programming was needed.
The concepts for object oriented language were thought of in 1961 by Ole-Johan Dahl and Kristen Nygaard, who were based in the Norwegian Computing Centre. The idea was to develop a language that could be used for both system description (for people) and for system prescription (as a computer program through a compiler). The first of these languages was called Simula 1, which was fully developed by 1965.
Quickly following Simula 1 was Simula 67.
Which introduced most of the key concepts of object-oriented programming: objects, classes, subclasses, inheritance, encapsulation and polymorphism. Object-oriented is noun-oriented programming, for example if someone was building an object-oriented program the nouns in the given problem need to be identified – what are the people and things that are part of the problem and its solution. Compared to procedural programming being about verbs: tell the computer to do this, tell the computer to do that.
The features of Simula were highly influential on modern programming paradigm, in 1972 a pure object oriented language was created using many of the concepts from Simula this was called SmallTalk. The language was created by Alan Kay and according to Lount on the SmallTalk website.
“Remember that Alan coined the phrase “Object-Oriented”.
The development of the object oriented paradigm led to the development of many other object oriented languages, two of these are C++ and Java.
Modern languages contain elements of procedural, Object Orientated, functional and sometimes multiple paradigms. There are many other languages that could be included in this paper; however one believes that most of the modern languages are an extension of the historical ones. Over time there has been various paradigm shifts within programming, this is not to make language more powerful but to make it easier for both humans and machines to translate. According to a paper written by Sammet (1972) “There are really two major reasons for a language to be considered significant: one is that it is economically practical and hence very useful, and the other is that it is technically new.”
One believes that with the evolution of computer technology, it is only natural that programming languages evolve. Newer languages may contain more functions that can be translated by a machine complier or be slightly easier or complex for a programmer to use, one fundamental element still stands, a program is a set of instructions. A machine does not understand the meaning it just translates and follows the evolution of languages will hopefully lead to a bridged gap between natural language and computer language.