Software development has a very rich history we rarely actually look into it. It’s very interesting and I should say very important to know the history of what we are doing and how and why it all came into being. What we have today with us is actually not the best, but there were many factors responsible for making it what it is.
It all began with the realization that logic can be represented by numbers also and not necessarily needed language. Initially there were punch cards where in you punch the information that’s fed into the machine which interprets those punches. But as the usages started growing and hardware improving programming languages came into picture. And there will be a programmer who will program it in Assembly Language and then it will be fed to a punching machine that will create punch cards for it and a deck of punch cards is your program… ready to run!!! This essentially happened after the invention of editors and until then computers was only a processing machine. The programming languages have a factor of human readability in them, which was what made them stand apart from those holes in the punch cards.
Thus the very first programming language to come into picture was Assembly Language. A program written in assembly language consists of a series of processor instructions and meta-statements, comments and data. These programs can be typed and saved using editors and while executing them they directly translate into machine language of 0 and 1. Most of us have read it in our academics, but it was only after I got to know the context in which it evolved that I am really finding the language with those GOTOs, MOV interesting. I wonder if it’s still being used anywhere, may be some really smart programmers are still coding in it to get best out of a great high end multiprocessor machine :)
For most other programmers it’s practically not feasible to write good code in Assembly Language and this was soon realized. It took years and then appeared on screen high level languages. These were basically designed to be a more human friendly abstraction over the Assembly Language. Programmers can code in something more easily understandable for them and then computer which translate it into Assembly Language for itself and take care of its business. Later came into picture mainly 2 new programming languages:
- COBOL Both these languages were essentially imperative languages consisting of statements and GOTOs to control flow. FOTRAN was fast in processing and more suited for scientific purposes. COBOL was made more human readable basically designed for business purposes. Another major breakthrough achieved in invention of ALGOL. This language brought the concept of structured programming and blocks scope and saved us from ugly GOTOs. It took about a decade or 2 to get rid of GOTOs, GOTOS pointing to various places in the program actually complicate it and programs really cannot scale with these GOTOs.
But the trouble with these languages was that they were too complicated and specialized. FOTRAN was specialized for scientific programs and COBOL for business programs and ALGOL specialized for algorithmic programming. Thus need was felt for a simplified language that can sufficiently fulfil all these needs and more. Many languages like CPL, BCPL, LISP, and Pascal came into picture but none was largely successful.
Then came the first greatly successful language that’s Dennis Ritchie’s C. C is a structured, imperative programming language, it was basically developed for System Software but it was then largely used for all types of software requirements. C had much influence on all the programming languages that came afterwards.
During the same time deriving its roots from ALGOL Object Oriented Programming languages Simula and SmallTalk came into picture. SmallTalk a wonderful Object Oriented language was developed mainly for games programming. Though great language it was not very successful since programmers did not much liked its syntax. Although not very successful its Object Oriented concepts SmallTalk had significant influence on languages that appeared later.
After 1980s no new major programming language paradigm came into picture but what happened was essentially consolidation of what was already there. C and SmallTalk inspired development of many new languages like Objective C, C++, JAVA, C#, Ruby, Eiffel.
As internet age started JAVA and other scripting languages had widespread acceptance coz of its platform independence and use in browsers.
In the mean time also evolved the concepts of functional programming and actor model. Actor model was slight shift from Object Oriented Programming wherein everything is an actor which communicates by sending messages. It was realised that this actor model is really not new; the concept is already in used in event driven applications. These concepts ripe in development of language like Scheme. This later went to have great influence on many languages today.
Evolution of software paradigms all happened in stages. And each shift in the paradigm took years. Though we may call our software community as most fast moving one, but our history definitely not so good.
Platform is now set and new languages like Scala, Haskell and DSLs are appearing on screen. The programming community is also much more large, open and dynamic than ever before. Its era of internet and personal computers every new concept and idea get audience and community of people using it. It’s important that we know the language we are really coding in and keep exploring the newer ones…..Happy Programming!!!