Saturday, 26 July 2014

Bird Eye View of Programming Languages - Then and Now

You start browsing over the classification and evolution of programming languages and .....wait!

 Fig 0:  The Various Programming Languages (Image Reference: )

There is so much to take in! How do I perceive them all? 

Here is what I did. Read them all, looked upon the time line and put them in buckets and arranged them in order. Though the order is not perfectly in flow, matches the most. However, the programming languages have greatly changed over time and classification has found versatile differentiation. The progress is so rapid that this article may need several updates in near 05 years. However this article gives the bird eye view and explains how we can put them all together.

Fig 1: Bird Eye View

It all begins with Von Neumann architecture consisting of ALU, memory, input, output and the initiation of programming. Programming began in 1940's. The classification began with machine, assembly and higher level languages.

The Birth Era

Fig 2: Birth Era (Image Reference: )

It was the beginning of programming and classification looked:
  •     Machine Level Languages
  •     Assembly Level Languages
  •     High Level Languages

A machine level language is a binary program which a machine understands. Definitely not human friendly. We dont use it anymore. Why would some one remember and code in 0's and 1's?

Assembly level language is a low level programming language. An assembly instruction consists of an op-code mnemonic along with a list of data, arguments or parameters. There is a very strong correspondence between the language and the architecture's machine code instructions.

To make programming more user friendly came Higher level languages. They are programming languages with strong abstraction from the details of the computer. Makes the process of developing a program simpler and more understandable relative to a lower-level language. Its all we are used to now.


Compiler Era


 Fig 3: Compiler Era (Image Reference: )

Next improvement happened over models of execution in around 1950's for the higher level languages. We hence have classification as interpreted, compiled and translated languages.

Interpreted languages are read and then executed directly, with no compilation stage.

Compiled languages are transformed into an executable form before running. Either they get converted to machine code or intermediate representation which may be further optimized.

Translated or Trans-compiled languages are those where a language may be translated into a lower-level programming language for which native code compilers are already widely available.


The Paradigm Era

 Fig 4: Paradigm Era (Image Reference: )

With advancements in programming came paradigm era in 1970's. There are four major classifications: Imperative, Functional, Logical and Object oriented. It is because we wanted to structure our program and pick the best suited for environment.

Imperative observes incremental change of the program state as a function of time. Execution of computational steps are in an order governed by control structures. It is nothing but procedural programming. Ex: Fortran, Algol, Pascal, Basic, C etc.

Functional originates from mathematics. It is formal way of expressing a language. Here time plays a minor role. Evaluation and using the resulting value is a highlighted concern. Ex: Haskel, Scheme etc.

Logical refers to languages built on axioms, inference rules, queries or more aptly artificial intelligence. Ex: Prolog, Datalog etc.

Yet another paradigm is Object oriented. It models the human interaction with real world phenomenon. It employs the concept of objects to send messages between objects to simulate the temporal evolution of a set of real world phenomena. Ex: C++, Java etc.


Productivity Era


Fig 5: Productivity Era (Image Reference:

From late 90's and 2000, the "Era of Productivity" began. Programming languages started turning out to be specific to every domain. Each domain demanded a constraint and to fulfill came a new set of language. Application size and complexity increased over time and started with various classifications like web, system, software, application, scripting etc.

It started with optimizing one problem with specific language and today we are confused on which one to pick to solve the problem. A Web language is used for creating and editing web pages (HTML, XML, JavaScript) and Software languages for creating executable programs (C, C++, Java). System languages are more concerned with managing a system resources and Application languages for building an application to solve a problem.

Scripting languages are used for wiring together systems and applications at a very high level. They are almost always extremely expressive (they do a lot with very little code) and usually dynamic (the compiler does little, the run-time system does almost everything). 

There hasn't remained today any major classifying criteria for the existing languages to put under a category.

Well, what I can say is, its all a "HYBRID".


Please Leave your Feedback / Suggestions