We start out with the first and second generation languages during the period of 1950-60, which to many experienced programmers will say are machine and assembly languages. Programming language history really began with the work of Charles Babbage in the early nineteenth century who developed automated calculation for mathematical functions. Further developments in early 1950 brought us machine language without interpreters and compilers to translate languages. Micro-code is an example of the first generation language residing in the CPU written for doing multiplication or division. Computers then were programmed in binary notation that was very prone to errors. A simple algorithm resulted in lengthy code. This was then improved to mnemonic codes to represent operations.
Symbolic assembly codes came next in the mid 1950's, the second generation of programming language like AUTOCODER, SAP and SPS. Symbolic addresses allowed programmers to represent memory locations, variables and instructions with names. Programmers now had the flexibility not to change the addresses for new locations of variables whenever they are modified. This kind of programming is still considered fast and to program in machine language required high knowledge of the CPU and machine's instruction set. This also meant high hardware dependency and lack of portability. Assembly or machine code could not run on different machines. Example, code written for the Intel® Processor family would look very different for code written for the Motorola 68X00 series. To convert would mean changing a whole length of code.
Throughout the early 1960's till 1980 saw the emergence of the third generation programming languages. Languages like ALGOL 58, 60 and 68, COBOL, FORTRAN IV, ADA and C are examples of this and were considered as high level languages. Most of this languages had compilers and the advantage of this was speed. Independence was another factor as these languages were machine independent and could run on different machines. The advantages of high level languages include the support for ideas of abstraction so that programmers can concentrate on finding the solution to the problem rapidly, rather than on low-level details of data representation. The comparative ease of use and learning, improved portability and simplified debugging, modifications and maintenance led to reliability and lower software costs.
These languages were mostly created following von Neumann constructs which had sequential procedural operations and code executed using branches and loops. Although the syntax between these languages were different but they shared similar constructs and were more readable by programmers and users compared to assembly languages. Some languages were improved over time and some were influenced by previous languages, taking the desired features thought to be good and discarding unwanted ones. New features were also added to the desired features to make the language more powerful.
COBOL (COmmon Business-Oriented Language), a business data processing language is an example of a language constantly improving over the decades. It started out with a language called FLOWMATIC in 1955 and this language influenced the birth of COBOL-60 in 1959. Over the years, improvements were done to this language and COBOL 61, 65, 68, 70 were developed, being recognised as a standard in 1961. Now the new COBOL 97 has included new features like Object Oriented Programming to keep up with current languages. One good possible reason for this is the fact that existing code is important and to totally develop a new language from start would be a lengthy process. This also was the rationalisation behind the developments of C and C++.
Then, there were languages that evolved from other languages like LISP1 developed in 1959 for artificial intelligence work, evolving into the 1.5 version and had strong influences languages like MATHLAB, LPL and PL/I. Language like BALM had the combined influence of ALGOL-60 and LISP 1.5. These third generation languages are less processor dependent than lower level languages. An advantage in languages like C++ is that it gives the programmers a lot of control over how things are done in creating applications. This control however calls for more in depth knowledge of how the operating system and computer works. Many of the real programmers now still prefer to use these languages despite the fact the programmer having to devote a substantial professional effort to the leaning of a new complicated syntax which sometimes have little relation to human-language syntax even if it is in English.
Third generation languages often followed procedural code, meaning the language performs functions defined in specific procedures on how something is done. In comparison, most fourth generation languages are nonprocedural. A disadvantage with fourth generation languages was they were slow compared to compiled languages and they also lacked control. Powerful languages of the future will combine procedural code and nonprocedural statements together with the flexibility of interactive screen applications, a powerful way of developing application. Languages specifying what is accomplished but not how, not concerned with the detailed procedures needed to achieve its target like in graphic packages, applications and report generators. The need for this kind of languages is in line with minimum work and skill concept, point and click, programmers who are end users of software applications designed using third generation languages unseen by the commercial users. Programmers whose primary interests are programming and computing use third generation languages and programmers who use the computers and programs to solve problems from other applications are the main users of the fourth generation languages.
Features evident in fourth generation languages quite clearly are that it must be user friendly, portable and independent of operating systems, usable by non-programmers, having intelligent default options about what the user wants and allowing the user to obtain results fasts using minimum requirement code generated with bug-free code from high-level expressions (employing a data-base and dictionary management which makes applications easy and quick to change), which was not possible using COBOL or PL/I. Standardisation however, in early stages of evolution can inhibit creativity in developing powerful languages for the future. Examples of this generation of languages are IBM's ADRS2, APL, CSP and AS, Power Builder, Access.
The 1990's saw the developments of fifth generation languages like PROLOG, referring to systems used in the field of artificial intelligence, fuzzy logic and neural networks. This means computers can in the future have the ability to think for themselves and draw their own inferences using programmed information in large databases. Complex processes like understanding speech would appear to be trivial using these fast inferences and would make the software seem highly intelligent. In fact, these databases programmed in a specialised area of study would show a significant expertise greater than humans. Also, improvements in the fourth generation languages now carried features where users did not need any programming knowledge. Little or no coding and computer aided design with graphics provides an easy to use product that can generate new applications.
What does the next generation of languages hold for us? The sixth generation? That is pretty uncertain at the moment. With fast processors, like in fifth generation computers, able to have multiple processors operating in parallel to solve problems simultaneously will probably ignite a whole new type of language being designed. The current trend of the Internet and the World Wide Web could cultivate a whole new breed of radical programmers for the future, now exploring new boundaries with languages like HTML and Java. What happens next is entirely dependent on the future needs of the whole computer and communications industry. Microsoft simply says, "Where do you want to go today?"