Programming language generations are a way to classify computer programming languages according to their overall distance from the actual machine code that is generated and, in some ways, their ease of use by a programmer. There are three generally accepted programming language generations and a few whose definitions are not clearly agreed on. A first-generation computer programming language is straight machine code with no abstraction. Second-generation languages are abstracted machine code, such as assembly language, that are tied to a specific system architecture but are human readable and need to be compiled. Third-generation languages are the most common form, including standard languages such as C and Java®, while languages that are fourth-generation or up have varied definitions.
When programming language generations were first created to describe languages, the term mostly was used to indicate third-generation languages. This means first- and second-generation languages were only classified as such to highlight the capabilities of third-generation languages. The fourth and fifth programming language generations were largely used as terms in relation to marketing for languages that were in development. In marketing and some academic areas, higher-numbered language generations are used in a non-standard way to indicate that one language is newer or has more features than another.
The first of the programming language generations indicates machine code. This means writing a program as a sequence of bytes or, in extreme cases, bits that can be directly executed by a computer. In most cases, this refers to a system that accepts input through hard-coded switches or other physical mechanisms.
Second-generation programming languages are considered to be assembly-style languages. These are languages that are written with human-readable code and commands that still are tied to specific system architectures but present an easier development environment and some abstraction. Assembly languages never stopped being used, as of 2011, and are not only extremely powerful but also can be used as inline statements in higher-level programming languages, making false the notion that the generation of a language equates to its speed or power.
Third-generation programming languages decoupled the code from the processor to an even larger extent, allowing for the development of code that used more readable statements. In addition, compilers were developed that could turn a single line of code into multiple assembly statements across multiple platforms and, eventually, into dozens or more machine code instructions. Nearly all computer languages that can compile native binary executables and libraries are considered third-generation languages.
In general, a fourth-generation language is viewed as a language meant to use some type of programming language that is very natural to the user. It also can be defined as a language that uses visual elements to build the final program. A third definition is a programming language that is built for a specific purpose, such as a database programming language or a rapid application development (RAD) language.
A loose definition of a fifth-generation computer language is one that allows a programmer to present the computer with a problem that it then attempts to solve. Most languages that are listed as being a fifth-generation language are mostly academic in nature. Other programming language generations, such as sixth and seventh, have been used by commercial language developers for marketing purposes.