Es gibt in der Programmierung mehrere Generationen von Programmiersprachen. Man unterscheidet zur Zeit fünf Generationen von Programmiersprachen.
Die 1. Generation ist die so genannte "Maschinensprache". Ich weiß nicht, wie viel du dich schon mit der Computertechnologie beschäftigt hast, aber ein Computer ist eigentlich strohdoof, denn ein Computer rechnet nur mit "0" oder "1". :-D
Der Computer berechnet im so genannten Binärsystem, kennt also nur zwei Zustände. "0" für keine Spannung, "1" für Spannung.
Deshalb ist die "Maschinensprache" die "interne Sprache" des Computers. Beim Programmieren in Maschinensprache verwendet man also nur die beiden Symbole 0 und 1, die der Computer auch nur kennt. In "Maschinensprachen" zu programmieren beherrschen weltweit heutzutage kaum noch Menschen und ist eigentlich auch nicht mehr üblich. Aber das hat einen historischen Hintergrund, denn das Kind musste ja auch erstmal geboren werden! Also hat man ernsthaft ursprünglich in "0" und "1" programmiert!
Um z.B. zwei Zahlen zu addieren musste man in dieser Form programmieren:
1100 0100 0000 0100
1000 0000 1100 0011 1101 0101
Also diese 0 und 1 sind tatsächlich eine einfache Additon, sagen wir mal 1+1 = 2.
Ich bin mir selber nun mehr sicher, was für eine 0 und 1 Kombination ich da eingegeben habe ;D, wollte aber auch nur ein Beispiel geben.
(Also das 1 + 1 ist nur ein Beispiel. Habe nun keine Lust binär nachzurechnen. :-D)
An Hand dieses Beispiels sieht man auch schon die Problematik dieser Art der Programmierung! Denn es ist sehr zeitaufwändig, zudem unübersichtlich, fehleranfällig und hat man einen Fehler gemacht (und das wird man! :-D), dann ist ebenfalls schwer, den Fehler zu lokalisieren, weil man bei dementsprechend größeren Programmen einen riesgen "Quellcode" von "0" und "1" hätte.
Aber wie ich schon sagte, musste das Kind ja irgendwie geboren werden und die Geburt war, dass man anfing, in "Maschinensprache" zu programmieren, weil man es auch musste. Man musste die Erziehung des Kindes übernehmen. Aber irgendwann war das Kind fit für den Kindergarten bzw. für die Schule, also hat man in Maschinensprache "Assembler" programmiert.
Assembler, so heißen die Programmiersprachen und übrigens auch die fertigen Programme heißen "Assembler", enthielten bereits "Befehle", wie wir es aus modernen Programmiersprachen kennen. Diese Befehle waren sehr einfach, aber jedoch sehr einprägsam bzw. symbolischer und somit verständlicher und weitaus weniger fehleranfälliger, denn die Befehle hatten folgende Form: MOVE, ADDITION, SUBTRACTION usw.
Z.B.
ADDITION 1 BL
ADDITION 1 BL
Das wäre 1 + 1.
Das Problem an Assemblern ist aber auch gewesen, dass diese in Maschinensprache übersetzt werden müssen, dass diese überhaupt ausgeführt werden können. Umgekehrt war eben der Vorteil da, dass Assembler immer und immer erweitert wurden, sodass man nach und nach immer weniger mit der "Maschinensprache" direkt zu tun hatte, denn jeder Assembler-Befehl wird 1:1 umgesetzt, was man vorher manuell machen musste, nämlich das Niederschreiben der richtigen Kombination von "0" und "1". Assembler sind, was die Performance angeht, aber verdammt schnell gewesen. Nachteil war, dass Assembler hardwareabhängig waren, also Architektur des Prozessors.
Nun kommt die 3. Generation ins Spiel. Die 3. Generation kennt "jeder" von uns, der sich schon mit Computertechnologie beschäftigt hat, eine Ausbildung hat, etc. Mit Hilfe von Assemblern wurden irgendwann Programmiersprachen entwickelt, die noch einfacher zu verwenden waren, da es mehr Befehle gab und man dann schon eher sowas wie einen vernünftigen "Quelltext" hatte, der entweder, je nach Programmiersprache, kompiliert oder interpretiert wurde. Vor allem wurden Programmiersprachen der 3. Generation auch dafür entwickelt, die nun andere Zwecke erfüllen sollten, denn jede Programmiersprache hat einen anderen Zweck bzw. Anwendungsbereich (auch heute noch). Mit der 3. Generation hatte man erstmalig Programmiersprachen, die maschinenunabhängig funktionieren konnten!
Beispiele für Programmiersprachen und deren Zwecke / Anwendungsbereiche sind z.B.
COBOL für mathematische Aufgaben, kaufmännische und administrative Aufgaben,
REXX für Großrechner-Systeme,
PL/1 (enthält COBOL-Code und wurde von IBM für Großrechner entwickelt für mathematische Zwecke)
Java (Bedingt Plattformunabhängig, gute Portabilität, Entwicklung von Software auf PDAs, Handhelds, etc.)
Und das beste Beispiel, was "jeder" von uns kennt ist die Programmiersprache "C", die auch zur 3. Generation gehört. Der Zweck von "C" ist das Entwickeln von Programmiersprachen selbst. Mit einer Programmiersprache eine Programmiersprache entwickeln!
Ist aber eben die Geburt eines weiteren Kindes. Sprachen, die z.B. mit "C" entwickelt wurden sind "C++", "C#" und "Java (und auch Android als Framework / Betriebssystem)"
Ein anderer Einsatz von "C" wäre das Programmieren von Treibern und auch Betriebssysteme (z.B. das BIOS).
Übrigens, man nennt die 3. Genration auch "prozedurale Programmierung" (hast vielleicht schon mal gehört) oder auch "strukturierte Programmierung", wobei man auch in "Java", "C#" und auch allen anderen Sprachen "strukturiert" programmieren kann. Aber mit "prozedural" oder "Strukturierte" Programmierung ist die "nicht objektorientierte Programmierung" gemeint, aber dazu komme ich gleich. Prozedural heißt also, dass man die Anweisungen so aufschreibt, wie der Computer auch tatsächlich technisch arbeitet. Man spricht ja immer davon, dass Computer "multitasking-fähig" heutzutage sind. Technisch gesehen stimmt das nicht so ganz (außer bei Mehrprozessorkernen). Ein Computer arbeitet IMMER! genau der Reihenfolge nach (also sequentiell). Deshalb schreibt man bei der prozeduralen Programmierung alle Befehle auch so auf, wie sie in der Reihenfolge ausgeführt werden sollen. (Sprungbefehle sind theoretisch auch möglich, aber egal :-D)
Nun noch ein Beispiel für die Programmiersprache "C".
Summe = 1 + 1; ---> Das sieht doch schon leserfreundlich für den Menschen aus, nur mit dem Unterschied, dass der Mensch es vielleicht so auf Papier bringen würde:
1 + 1 = 2 (Summe)
Mathematisch gesehen ist es egal, auf welcher Seite was steht bei der Berechnung, denn das = Zeichen meint beide Richtungen. Aber in "C" werden die Befehle von rechts nach links gelesen, nicht von links nach rechts, wie es die meisten Menschen / Ländern tun. :-D
Die 4. Generation von "Programmiersprachen" sind die wiederum "nicht prozeduralen" Programmiersprachen :-D.
Z.B. SQL, MySQL, Natural
Streng genommen sind es eher "deskriptive" (beschreibende) Sprachen, also keine "richtigen" Programmiersprachen, sondern der Sinn und Zweck sind eher "Abfragen" zu machen an Hand von "Beschreibungen". SELECT * FROM Datenbank für MYSQL z.B. wäre eine Abfrage einer Datenbank.
Die 4. Generation (ist zwar Ansichtssache und abhängig von der Sprache) verfügt eher über "Befehle" wie man auch mit einem "Menschen" reden würde.
SELECT * FROM Datenbank. "Wähle alles aus der Datenbank "Datenbank" aus".
Nun wird es spannend!
Zu guter Letzt das Abitur des Kindes! Die 5. Generation ist (heutzutage) die meist genutzte Generation überhaupt, was nicht überraschend sein dürfte.
Die 5. Generation sind entweder "wissenschaftliche" oder "künstliche Intelligenz" oder "objektorientierte" Sprachen.
Die Vorteile der 5. Generation sind, dass sie "objektorientiert" sind,
d.h. Programmierer entwickeln "Apps" und greifen dabei auf "Code" zurück, den ein anderer geschrieben hat :-D. (Ist bei den anderen Generationen aber auch der Fall)
Das ist heutzutage Gang und Gebe, also sehr üblich. 50-75 % sind quasi "Fremdcode" und den Rest programmiert man selber, weil es dafür z.B. keine Bibliothek gibt für die jeweilige Anforderung. Also man hat die Möglichkeit der "Wiederverwendbarkeit" von Code. Das hat einen Vorteil, den man früher nicht hatte: Es gibt nämlich Anforderungen in einer App, die so gut wie fast jedes Programm / App hat / nutzt / braucht.
Z.B. Programmieranfänger lernen, wie man eingegebene Daten auf der Tastatur im Programm ausliest. In Java würde man z.B. den Import machen
import java.io.BufferedReader; ---> Das ist im Prinzip ein fertiges "Programm", was man nutzt und importiert und was da alles hinter steckt... (würde man sowas selber programmieren müssen...)
private BufferedReader input;
private String buffer;
input = new BufferedReader (new InputStreamReader (System.in) );
buffer = input.readLine ( );
Diese "Wiederverwendbarkeit" reduziert die Fehleranfälligkeit enorm. Mit den Jahren "veralten" auch Klassen, Methoden, Funktionen einer Programmiersprache.
Aber grundsätzlich gilt: Es gibt Dinge, die man in "jedem" Programm braucht!
Objektorientiert hat auch den Vorteil, dass der Programmiercode an sich reduziert wird. In Java kann man z.B. eine Methode schreiben und diese Methode kann in der eigenem App an mehreren Stellen genutzt werden, wenn erforderlich. Man brauch also die Befehle nicht alle noch mal neuschreiben sondern ruft
die Methode einfach nochmal neu auf.
Z.B.
private void beenden ( )
{
Runtime.getRuntime ( ).exit (0); // Programm beenden
}
Man könnte z.B. eine Menüleiste haben mit dem Menüpunkt "Beenden". Dann wird diese Methode aufgerufen beenden ( );
Es wäre auch denkbar, das Programm durch einen Klick auf einen Button zu beenden. Dann einfach wieder beenden ( ); aufrufen.
So das war's eigentlich.
Ich entschuldige mich für die Rechtschreibfehler. Normalerweise bin ich gut in der Rechtschreibung :-D.