Die Welt der Programmiersprachen
Programmiersprachen sind wie Werkzeuge in einer Werkzeugkiste – für jede Aufgabe gibt es das passende Werkzeug. Man kann sich mit ihnen unterhalten, sie nutzen, um knifflige Probleme zu lösen, und sogar, um Neues zu kreieren, das es vorher noch nicht gab. Es gibt eine Menge unterschiedlicher Programmiersprachen, alle mit ihren eigenen Vor- und Nachteilen und bestimmten Situationen, in denen sie besonders gut passen. Egal, ob es um das Bauen einer Webseite geht, um komplexe wissenschaftliche Berechnungen, um das Programmieren eines Betriebssystems oder einfach nur um das Automatisieren von alltäglichen Aufgaben – für jede Herausforderung gibt es eine passende Programmiersprache. Hier wird ein kleiner Einblick in die spannende Welt der Programmiersprachen und ihre vielfältigen Anwendungsbereiche gegeben.
Geschichte und Entwicklung von Programmiersprachen
Die Geschichte der Programmiersprachen ist ein faszinierendes Gebiet. Programmiersprachen haben sich über die Jahre hinweg stark weiterentwickelt und viele heutige Sprachen wurden stark von älteren Sprachen beeinflusst.
- Ganz am Anfang: Am Anfang gab es nur Maschinensprache. Das ist so, als würde man mit dem Computer in seiner eigenen, binären Sprache sprechen. Da Maschinensprache allerdings sehr kompliziert und beinahe unmöglich für den Menschen zu lesen war, wurde bald Assembler entwickelt. Assembler war immer noch ziemlich nah am Computer, aber schon ein bisschen einfacher für Menschen zu verstehen.
- Die erste Hochsprache: Dann kam Fortran, die erste sogenannte Hochsprache. Fortan wurde in den 1950er Jahren von IBM entwickelt und war vor allem für Operationen wie wissenschaftliche Berechnungen gedacht.
- COBOL und ALGOL: Später, in den 1950ern und 60ern, kamen COBOL und ALGOL dazu. COBOL war besonders für Geschäftsanwendungen, ALGOL eher für wissenschaftliche Berechnungen. ALGOL hat viele spätere Sprachen beeinflusst, zum Beispiel Pascal, C, Java und JavaScript.
- LISP: Ende der 1950er Jahre kam LISP dazu, die erste Sprache, die auf funktionale Programmierung setzte.
- C und seine Kinder: In den 1970ern hat Bell Labs die Sprache C entwickelt, und die war richtig wichtig. Daraus sind später C++, C# und Objective-C entstanden, und die werden heute in ganz verschiedenen Bereichen genutzt, vom Betriebssystem bis zum Videospiel.
- Java und das Internet: In den 1990ern hat Sun Microsystems Java entwickelt, und das war sozusagen der Startschuss für das Internet, wie wir es heute kennen. Weil man mit Java Software schreiben konnte, die auf fast allen Computern läuft, wurde es zur ersten Wahl für viele Webanwendungen.
- Die neuen Sprachen: In den letzten Jahren sind noch ganz viele neue Sprachen dazu gekommen, wie Python, Ruby, Swift, Go und Rust. Jede dieser Sprachen hat ihre eigenen Besonderheiten und ist für bestimmte Aufgaben besonders gut geeignet.
Auf dieser Website findest du eine Grafik, die Dir eine detaillierte Darstellung der Evolution von Programmiersprachen bietet.
Hardwarenahe Sprachen (Niedrigsprachen)
Hardwarenahe oder Niedrig-Level-Sprachen ermöglichen eine direkte Kommunikation mit der Hardware eines Computers. Sie sind eng mit dem Maschinencode verbunden und werden oft in Bereichen verwendet, in denen direkter Hardwarezugriff oder hohe Effizienz erforderlich ist. Es gibt zwei Haupttypen von Niedrig-Level-Sprachen: Maschinencode und Assemblersprache.
Maschinencode
Maschinencode ist die niedrigste Ebene der Programmiersprachen und wird direkt von der Hardware eines Computers verstanden. Jede Anweisung in Maschinencode entspricht genau einer Operation, die der Computer ausführen kann. Maschinencode wird in Binärform dargestellt und ist daher für Menschen sehr schwer zu lesen und zu schreiben.
Beispiel eines Maschinencodes (in Binär und Hexadezimal):
- Binär: 10111000 00000101
- Hexadezimal: B8 05
Diese Maschinencode-Anweisung würde z.B. den Wert 5 in das ‚eax‘ Register laden. Mit dieser Zahl könnte dann beispielsweise weiter gerechnet werden.
Assembler
Assemblersprache ist ein Schritt über dem Maschinencode und verwendet symbolische Repräsentationen für Maschinencode-Anweisungen. Jede Anweisung in Assemblersprache entspricht genau einer Anweisung in Maschinencode. Das macht den Code lesbarer und schreibbarer für Menschen, ohne die direkte Kontrolle über die Hardware zu verlieren.
Ein Assembler-Programm (genannt Assembler) wird verwendet, um Assemblersprache in Maschinencode zu übersetzen.
Beispiel eines Assembler-Codes:
- mov eax, 5
Diese Assembler-Anweisung würde ebenfalls den Wert 5 in das ‚eax‘ Register laden. Der Vorteil ist, dass die Anweisung in Assemblersprache für Menschen verständlicher ist.

In diesem Beispiel wird eine einfache Rechnung (5+3-2) dargestellt. Der Wert 5 wird in das Register (Das ‚eax‘-Register ist ein bestimmter Speicherbereich innerhalb des Prozessors, der für verschiedene Rechenoperationen genutzt wird) geladen, dann wird 3 addiert und schließlich 2 subtrahiert. Die resultierende Zahl (6) bleibt im ‚eax‘-Register. Diese Art von Operationen ist typisch für die Arbeitsweise eines Prozessors auf niedrigster Ebene.
Verwendung von Niedrig-Level-Sprachen
Obwohl Niedrig-Level-Sprachen schwieriger zu lesen und zu schreiben sind als Hochsprachen, haben sie ihre Vorteile. Sie ermöglichen eine direkte Kontrolle über die Hardware und können effizienter sein, da es keinen Übersetzungsprozess gibt. Sie werden oft in kritischen Systemen oder in eingebetteten Systemen verwendet, wo Effizienz entscheidend ist.
Dennoch sind Niedrig-Level-Sprachen nicht so verbreitet wie Hochsprachen, da die Entwicklung in Hochsprachen schneller und einfacher ist und weniger spezifisches Hardwarewissen erfordert. Hochsprachen bieten auch bessere Möglichkeiten für Wiederverwendung und Wartung von Code.
Hardwareferne Sprachen (Hochsprachen)
Im Gegensatz zu Niedrig-Level-Sprachen, die näher an der Maschine und daher schwer zu lesen sind, sind Hochsprachen viel einfacher für Menschen zu verstehen. Sie verwenden Syntax und Konzepte, die näher an der menschlichen Sprache liegen, und ermöglichen es den Entwicklern, komplexe Konzepte und Algorithmen auf einer hohen Abstraktionsebene auszudrücken.
Um jedoch von der Hardware verstanden zu werden, muss Hochsprachencode in Maschinensprache übersetzt werden. Dieser Prozess wird als Kompilierung bezeichnet. Ein Kompilierer ist ein Programm, das Hochsprachencode nimmt und ihn in Maschinencode übersetzt, der dann vom Computer ausgeführt werden kann.
In der folgenden Grafik wird dir ein kleines Programm gezeigt. Das Programm macht folgendes:
public class Main {: Das ist wie das „Etikett“ für den Code, es heißt „Main“. Der gesamte Code, der zwischen den Klammern{}steht, gehört zur „Main“-Gruppe.public static void main(String[] args) {: Hier beginnt der eigentliche Teil, den der Computer ausführt. Es ist wie der Startknopf für das Programm. Alles, was zwischen diesen Klammern{}steht, wird vom Computer ausgeführt, sobald der Startknopf gedrückt wird. ‚String[] args‘ ist ein Fachbegriff, den wir jetzt nicht weiter vertiefen müssen. Es dient dazu, zusätzliche Informationen an das Programm zu übergeben, wenn es gestartet wird, aber in diesem Fall verwenden wir es nicht.System.out.println("Hello world!");: Das ist die Anweisung, die das Programm ausführt. Es sagt dem Computer, er soll „Hello world!“ auf den Bildschirm schreiben. Das Semikolon;am Ende zeigt an, dass die Anweisung beendet ist.- Die letzten beiden
}: Sie sagen dem Computer, dass hier das Ende von „Main“ und vom Programm ist. Jede geöffnete{muss ein entsprechendes}haben.
Beim Ausführen des Programms wird dieses zunächst in den von der Hardware verständlichen Maschinencode übersetzt. Bitte beachte, dass das Zielprogramm nur als Beispiel dienen soll. In der Realität ist der Binärcode, der aus der Kompilierung von Hochsprachen resultiert, viel komplexer und schwieriger zu lesen, da er niedriglevelige Maschineninstruktionen und -adressen enthält. Es ist auch spezifisch für die Architektur des Systems, auf dem der Code läuft.

Nachdem das Programm übersetzt wurde, wird der Code ausgeführt. Das Ergebnis ist in diesem Fall eine einfache Konsolenausgabe. Diese sieht in etwa so aus:

Die Hochsprachen können noch weiter unterteilt werden. Es gibt unter anderem:
- Imperative Sprachen – durch die Verwendung von Befehlen wird dem Computer gesagt, was er zu tun hat. Beispiele sind: C, C++, Fortan und Pascal
- Funktionale Sprachen – im Gegensatz zu Befehlen werden hier Funktionen verwendet. Beispiele sind: Lisp, Haskell und ML
- Logiksprachen – diese werden oft in der künstlichen Intelligenz verwendet. Beispiele sind: Prolog und Mercury
- Objektorientierte Sprachen – um die Softwareentwicklung zu organisieren und abstrahieren werden Klassen und Objekte verwendet. Beispiele sind: Java, Python, C# und Ruby
- Skriptsprachen – interpretierte Sprachen, die für schnelle Skriptausführung verwendet werden. Beispiele sind: JavaScript, Perl und PHP
Gebrauch und Anwendungsbereiche von Programmiersprachen
Ähnlich wie beim Handwerk, wo jedes Projekt eine bestimmte Technik erfordert, gilt in der Welt der Programmiersprachen: Jede hat ihre besonderen Stärken und Anwendungsbereiche. Kennen wir diese, können wir unsere Projekte effizient und zielgerichtet umsetzen. Hier findest Du ein paar dieser Anwendungsbereiche:
Webentwicklung
Um eine Webseite zu gestalten, braucht man verschiedene „Werkzeuge“. HTML (HyperText Markup Language) dient dazu, die Struktur einer Webseite festzulegen oder in anderen Worten – HTML dient als „Bauplan“ der Website und bestimmt, wo welches Element positioniert wird. CSS (Cascading Style Sheets) ist für die Gestaltung und das Layout zuständig ist – es sorgt also dafür, dass Du eine ansprechende Website vorfindest. JavaScript kommt zum Einsatz, wenn es um Interaktivität auf der Seite geht.
Für die serverseitige Programmierung werden oft Sprachen wie PHP, Python oder JavaScript (mittels Node.js) verwendet. Python hat den Vorteil, dass es auch in anderen Bereichen wie Datenanalyse und maschinellem Lernen weit verbreitet ist. PHP ist auf Webservern sehr häufig vorinstalliert und ermöglicht somit schnelle und einfache Webentwicklung.
Es ist bemerkenswert, dass in den frühen Tagen des Webs Java eine dominierende Rolle in der Webentwicklung spielte, insbesondere wegen seiner Plattformunabhängigkeit. Mittlerweile hat sich das aber geändert und Sprachen wie JavaScript, PHP und Python sind in diesem Bereich populärer geworden. Java wird jedoch immer noch in einer Vielzahl von anderen Anwendungen eingesetzt, insbesondere in großen Unternehmensanwendungen und in Android-App-Entwicklung. Wenn Du mehr über Webentwicklung erfahren möchtest, könnte Dich dieser Lernbeitrag interessieren.
Wissenschaftliche Berechnungen
Für wissenschaftliche Berechnungen und Datenanalyse werden häufig Sprachen wie Python, R und MATLAB genutzt. Python bietet mit verschiedenen Bibliotheken starke Werkzeuge für numerische Berechnungen und Datenanalyse. R ist speziell für statistische Berechnungen und Grafiken entwickelt worden. MATLAB wird oft in Ingenieurwissenschaften und Mathematik genutzt.
Systemsprachen
Systemsprachen sind dazu da, um Betriebssysteme, Datenbanken oder große Anwendungssysteme zu schreiben. Hier kommen häufig Sprachen wie C, C++ oder Rust zum Einsatz. C und C++ sind sehr leistungsstark und erlauben eine direkte Hardwarekontrolle. Rust ist eine neuere Systemsprache, die besonders auf Sicherheit und Geschwindigkeit ausgelegt ist.
Skriptsprachen
Skriptsprachen wie Python, Ruby oder Perl werden oft für kleinere Aufgaben oder Automatisierungsskripte eingesetzt. Python ist bekannt für seine Einfachheit und Lesbarkeit, was es ideal für Einsteiger macht. Ruby wird oft im Webentwicklungsbereich mit dem Ruby on Rails Framework verwendet. Perl war eine der ersten Skriptsprachen und wird oft für Textmanipulationen genutzt.
Programmiersprachen – Teste Dein Wissen
Du hast die vorangegangenen Unterbeiträge ausführlich studiert und möchtest Dein Wissen nun testen?
Hier findest Du ein paar Fragen zu den Inhalten.