The Five Generations of Software
First Generation Languages (1GL)
The earliest computers were based on vacuum tube technology and hardware design was in its infancy. The only way to program these computers was to enter the machine language instructions directly into the hardware. Writing programs for these early computers had many limitations:
Second Generation Languages (2GL)
Some improvements were made during the 1950s with the development of assembly languages. Early software pioneers, such as Grace Hopper, realized that they could write programs in a type of programming short-hand and then have the computer translate this short-hand notation into machine code. The advantages of Assembly Languages included:
Third Generation Languages (3GL)
By the late 50s and early 60s, the computer industry was in full production. Many large and medium businesses as well as most universities and government departments were installing computers. Along with this boom came a crucial period often called the Software Crisis. While advances had been made in writing software such as assemblers, every computer system still required custom written software. There simply were not enough programmers and time to do it all. The solution: develop a faster way of writing and debugging software.
Leading thinkers such as Alick Glennie and Grace Hopper realize that they could extend the concept of the Assembler even further. The result was a series of computer programs (compilers) that translated high-level programming languages into machine code.
These high-level or 3GLs are characterized by their use of English-like commands in place of the obscure codes of Assembly languages. Each line of code in a 3GL often corresponds to many lines of machine code. These are often called procedural languages because the programmer must develop a clear logic to carry out each procedure within the program. Since 3GLs are portable or machine independent, international standards have often been developed. This has greatly simplified the training and preparation that software engineers need.
Some of the most significant 3GLs are:
Fourth Generation Languages (4GL)
The examples of 3GLs given above are all procedural languages because the programmer must list each instruction and indicate the order that these steps are to be executed through the use of logical control structures (Sequence-Selection-Iteration). Fourth Generation Languages are non-procedural languages. This means that the programmer does not specify a step-by-step method for executing a given problem. Instead, the inputs and required outputs are given and it is left up to the language to determine the step-by-step details.
The major disadvantage of 4GLS is that the resulting programs may not use the computer's processing power efficiently. Consequently more powerful computers are needed to run this type of program. The most significant advantage, however, is that 4GL programs are much easier to write. They contain a minimum of syntax rules and even people not trained as programmers can write applications.
One of the more common forms of 4GLs are query languages. These are frequently used to retrieve information from databases. An example of a query is "display all clients with date-of-birth before 1931". Other types of 4GL are report generators and application generators.
Firth Generation Languages (5GL)
Not commonly listed in the generations of software are the Fifth Generation programming languages. Connected closely with Artificial Intelligence research and expert systems, there are few commercially available 5GLs.
LISP is one of the oldest programming languages still in use but it has been updated with 5GL programming methodology. The result is that most expert systems are coded in LISP. PROLOG is another 5GL that was developed in France in 1972. It has been expanded and improved over the last few decades and is used in Artificial Intelligence research.