Programmiersprachen
Damit Computer und Computer-Hardware funktionieren können, brauchen sie Software, die zunächst von Programmierern programmiert
werden muss. Programmiersprachen bilden demnach die Grundlage des Rechnerbetriebs. Allerdings versteht ein Computer keine
menschliche Sprache, sondern nur Operationscodes und
Adressformen in binärer Form. Kurz gefasst: Ein Computer versteht nur 0 und 1. Programmiersprachen sind demnach künstliche, mehr oder
weniger abstrakte Formulierungen, die ein Computer verstehen kann (Mertens u.a., 2001, S. 25)

Eine Programmiersprache ist eine formale, künstliche Sprache zur Formulierung von Programmen. (Stahlknecht & Hasenkamp, 2005, S. 283).
Nach dem Zeitpunkt ihrer Entstehung und ihrer Benutzer- bzw. Anwendernähe werden Programmiersprachen meistens in Generationen unterteilt. Dabei gilt für die Zuordnung einer Programmiersprache zu einer Generation:
- Je einfacher eine Programmiersprache aus Sicht eines
Anwenders zu benutzen ist, desto höher ist die zugeordnete Generation und
- je weiter die Programmiersprache vom
Maschinencode abstrahiert, desto höher ist die zugeordnete Generation.
Daraus ergibt sich folgende Einteilung:
- 1. Generation: Maschinensprachen
- 2. Generation: Assemblersprachen
- 3. Generation: Höhere Sprachen
- 4. Generation: Fourth Generation Languages
Mit jeder höheren Generation steigt der Abstraktionsgrad der Programmiersprache von dem Computer, der den Befehls- und Anweisungscode ausführen muss. Gleichzeitig nimmt auch die Mächtigkeit der Anweisungen (Anzahl der Maschineninstruktionen), die durch eine Anweisung einer höheren Programmiersprache ausgeführt werden, zu (Rautenstrauch & Schulze, 2003, S. 74).

Maschinensprachen (Sprachen der 1. Generation)
Eine Maschinensprache besteht nur aus Binärcode (0 und 1) und stellt die interne Sprache eines bestimmten Prozessors (CPU) dar. Maschinensprachen sind nicht
portierbar. Pro Anweisung der Maschinensprache wird genau eine Anweisung auf Prozessorebene durchgeführt (Stahlknecht & Hasenkamp, 2005,
S. 284. Rautenstrauch & Schulze, 2003, S. 74).
Assemblersprachen (Sprachen der 2. Generation)
Assemblersprachen (auch maschinenorientierte Sprachen genannt) gelten ebenfalls nur für einen bestimmten Rechnertyp und sind
nicht portierbar. Sie bieten aber einige Erleichterungen für den Programmierer, da die Anweisungen durch mnemotechnische Bezeichnungen (z.B.
ADD für Addition oder SUB für Subtraktion) dargestellt werden. Die Instruktionen werden als Kommandofolgen in
Makros zusammengefasst. Assemblersprachen werden bei der Entwicklung von Betriebssystemen oder zeitkritischen Anwendungen eingesetzt
(Stahlknecht & Hasenkamp, 2005, 285).
Höhere Programmiersprachen (Sprachen der 3. Generation)
Höhere Programmiersprachen enthalten Anweisungen und Anweisungsfolgen (Algorithmen) mit einem wesentlich weiteren Funktionsumfang
als die Sprachen der niedrigeren Generationen. Sie sind vergleichsweise leicht erlernbar, da Befehlsnamen und Syntax der menschlichen Sprache angenähert sind. Höhere Programmiersprachen sind rechnerunabhängig und können auf verschiedenen
Rechnertypen eingesetzt werden (Portabilität). Im Gegensatz zu den Sprachen der 1. und 2. Generation können sie allerdings
die Hardware weniger direkt ansprechen und daher auch schlechter nutzen und erfordern darüber hinaus längere Programmlaufzeiten.
Höhere Programmiersprachen werden für die Entwicklung von Betriebs- und Anwendungsprogrammen verwendet (Stahlknecht & Hasenkamp,
2005, S. 285. Rautenstrauch & Schulze, 2003, S. 75).
Fourth Generation Languages (Sprachen der 4. Generation)
Für die Programmiersprachen bis zur dritten Generation ist die Zuordnung und Beschreibung der Eigenschaften mehr oder weniger eindeutig und unbestritten. Ab der 4. Generation (4GLs = Fourth Generation Languages) gibt es für Programmiersprachen keine einheitlichen Definitionen mehr. (Rautenstrauch & Schulze, 2003, S. 75) führen hierzu aus: „Unter dem vorher festgelegten Kriterium ‚Benutzernähe’ sind 4 GLs Programmiersprachen, die Sprachkonstrukte oder Werkzeuge zur Verfügung stellen, mit denen relativ komplexe Abläufe mit wenigen Instruktionen codiert werden können.“
Ab der 5. Generation gibt es keinerlei eindeutige Definitionen mehr.