Programmiersprachen und Paradigmen: Compiler, Interpreter, prozedural und objektorientiert
https://bildung.social/@oerinformatik/
https://oer-informatik.de/programmiersprachen
Programmiersprache, Compiler, Interpreter, Skriptsprache, Syntaxfehler, Programmierparadigma, strukturierte Programmierung, prozedurale Programmierung, objektorientierte Programmierung, Auswahlkriterien, Prüfungsvorbereitung
tl/dr; (ca. 8 min Lesezeit): Welche Programmiersprache passt zu einer Aufgabe? Der Artikel erklärt, wie Compiler und Interpreter aus Quelltext ein laufendes Programm machen, welche Werkzeuge zu einer Programmierumgebung gehören und welche Fehlerarten es gibt. Danach geht es um Skriptsprachen im Client und auf dem Server, um die wichtigsten Programmierparadigmen – strukturiert, prozedural, objektorientiert und deklarativ – und um Kriterien, mit denen Du eine Programmiersprache begründet auswählst, mit einem Vergleich von Python, Java, C++, C# und JavaScript [AI-Assisted]. (Zuletzt geändert am 28.10.2026)
Schon fit in diesem Thema? Nutze die Kann-Liste und die Leitfragen unter dem Artikel als Checkliste, ob Du die relevanten Kompetenzen bereits hast.
Als Grundlagen kann ich nach Durchlesen des Artikels…
… den Unterschied zwischen Compiler- und Interpretersprachen erläutern und die Arbeitsweise eines Compilers beschreiben.
… den Werkzeugen einer Programmierumgebung (Editor, Compiler, Linker, Interpreter, Debugger) ihre Aufgaben zuordnen.
… Syntax-, Laufzeit- und Logikfehler unterscheiden und bestimmen, welche Fehler ein Compiler meldet.
… Merkmale von Skriptsprachen bestimmen und erklären, warum HTML keine Programmiersprache ist.
… Merkmale der strukturierten Programmierung bestimmen und zwei Vorteile objektorientierter gegenüber prozeduraler Programmierung nennen.
… ein Kriterium für die Auswahl einer Programmiersprache nennen und begründen.
Darüber hinaus kann ich als Kernwissen für alle Fachrichtungen…
… Auswahlkriterien für eine Programmiersprache erläutern und je zwei Vorteile von Python und von C++ oder Java nennen.
… beschreiben, wie der objektorientierte Ansatz in einem Programm umgesetzt wird (Klassen, Kapselung, Vererbung).
… je einen Vorteil von Skript- und Compilersprachen für eine Aufgabe erläutern und client- und serverseitige Skriptsprachen unterscheiden.
… die Mischform aus Bytecode und virtueller Maschine erläutern.
Die Mindmap zeigt die Themen des Artikels im Überblick:
Was eine Programmiersprache ausmacht
Eine Programmiersprache ist eine formale Sprache, mit der Du einem Computer Abläufe beschreibst: Daten einlesen, verarbeiten, Entscheidungen treffen, Schritte wiederholen und Ergebnisse ausgeben. Sie hat eine genau festgelegte Syntax (welche Zeichenfolgen erlaubt sind) und Semantik (was sie bedeuten). Programmiersprachen sind Turing-vollständig: Sie können grundsätzlich jede berechenbare Aufgabe lösen, weil sie Variablen, Verzweigungen und Wiederholungen kennen.
Nicht jede Computersprache ist eine Programmiersprache:
| Sprachart | Zweck | Beispiele |
|---|---|---|
| Programmiersprache | Abläufe und Berechnungen beschreiben | Python, Java, C++, C#, JavaScript, PHP |
| Auszeichnungssprache | Struktur und Bedeutung von Inhalten beschreiben, keine Abläufe | HTML, XML, Markdown |
| Abfragesprache | Daten deklarativ abfragen und ändern | SQL |
| Datenformat | Daten austauschen | JSON, CSV |
HTML ist keine Programmiersprache: Mit HTML legst Du fest, dass ein Text eine Überschrift, ein Absatz oder ein Link ist. Es gibt keine Variablen, keine Verzweigungen und keine Schleifen; HTML kann nichts berechnen und nicht auf Eingaben reagieren. Dafür wird es mit JavaScript (im Browser) oder einer serverseitigen Sprache kombiniert.
Vom Quelltext zum laufenden Programm
Der Prozessor versteht nur Maschinencode. Der für Menschen lesbare Quelltext muss deshalb übersetzt werden, und dafür gibt es zwei Grundprinzipien:
| Compiler | Interpreter | |
|---|---|---|
| Arbeitsweise | übersetzt den gesamten Quelltext vor der Ausführung in Maschinencode und speichert ihn als ausführbare Datei | liest den Quelltext zur Laufzeit Anweisung für Anweisung, übersetzt und führt sie sofort aus |
| Ausführung | schnell, weil bereits übersetzt | langsamer, weil bei jeder Ausführung neu übersetzt wird |
| Fehler | Syntaxfehler werden vor dem Start für das ganze Programm gemeldet | Fehler fallen erst auf, wenn die betroffene Zeile ausgeführt wird |
| Weitergabe | ausführbare Datei ohne Quelltext; je Betriebssystem und Prozessor eine eigene Fassung | Quelltext und Interpreter werden benötigt; läuft überall, wo es den Interpreter gibt |
| Änderungen | nach jeder Änderung neu kompilieren | sofort testbar, interaktives Arbeiten möglich |
| typische Sprachen | C, C++, Rust, Go | Python, JavaScript, PHP, PowerShell, Bash |
Dazwischen gibt es eine Mischform: Java und C# werden in einen plattformunabhängigen Bytecode übersetzt, den eine virtuelle Maschine (JVM bzw. .NET-Laufzeit) ausführt und dabei häufig benötigte Teile just in time in Maschinencode übersetzt. So läuft dasselbe Programm auf jedem System mit passender Laufzeitumgebung und ist trotzdem schnell. Auch Python, das meist als interpretierte Sprache gilt, kennt diesen Zwischenschritt: Intern übersetzt CPython (der Standard-Interpreter) den Quelltext zunächst in Bytecode (.pyc) und führt diesen dann aus. Mehr dazu und zu Bibliotheken, Versionsverwaltung und CI/CD findest Du im Artikel Werkzeuge der Softwareentwicklung.
Die Programmierumgebung
Zu einer Programmierumgebung gehören mehrere Werkzeuge, die eine integrierte Entwicklungsumgebung (IDE, z. B. Visual Studio Code, IntelliJ IDEA, Eclipse) unter einer Oberfläche zusammenfasst:
| Werkzeug | Aufgabe |
|---|---|
| Editor | Quelltext schreiben, mit Syntaxhervorhebung und Autovervollständigung |
| Compiler | Quelltext in Maschinen- oder Bytecode übersetzen und Syntaxfehler melden |
| Linker | übersetzte Programmteile und Bibliotheken zu einem ausführbaren Programm verbinden |
| Interpreter | Quelltext direkt ausführen |
| Debugger | Programm schrittweise ausführen, an Haltepunkten anhalten und Variablenwerte untersuchen, um Fehler zu finden |
Fehlerarten
| Fehlerart | Was passiert? | Wer bemerkt ihn? | Beispiel |
|---|---|---|---|
| Syntaxfehler | der Quelltext verletzt die Regeln der Sprache | Compiler bzw. Interpreter vor der Ausführung, oft schon der Editor | fehlende Klammer, falsch geschriebenes Schlüsselwort |
| Laufzeitfehler | das Programm ist syntaktisch korrekt, bricht aber während der Ausführung ab | erst beim Ausführen | Division durch null, Datei nicht vorhanden, Zugriff auf einen Index außerhalb des Arrays |
| Logikfehler (semantischer Fehler) | das Programm läuft, liefert aber ein falsches Ergebnis | nur durch Tests und Vergleich mit dem erwarteten Ergebnis | < statt <= in einer Bedingung, falsche Formel |
Merke: Ein Compiler meldet Syntaxfehler (und einige Typfehler). Logikfehler findet er nie, denn er weiß nicht, was das Programm tun soll.
Die Grafik zeigt die Werkzeugkette einer Compilersprache und an welcher Stelle welche Fehlerart auffällt:
Skriptsprachen
Skriptsprachen sind Programmiersprachen, die meist von einem Interpreter ausgeführt werden und mit wenig Aufwand kleine bis mittlere Aufgaben lösen: Abläufe automatisieren, Systeme administrieren, Webseiten dynamisch machen, Daten auswerten. Typisch sind dynamische Typisierung und kurze, schnell änderbare Programme. Sie sind weder auf die Kommandozeile noch auf das Web beschränkt und brauchen keine IDE.
Im Web unterscheidet man nach dem Ort der Ausführung:
| clientseitig | serverseitig | |
|---|---|---|
| ausgeführt | im Browser der Nutzer*innen | auf dem Webserver, der das Ergebnis (meist HTML oder JSON) an den Browser schickt |
| Sprachen | JavaScript (bzw. TypeScript, übersetzt nach JavaScript) | PHP, Python, Java, C#, JavaScript mit Node.js |
| geeignet für | Interaktion ohne Neuladen, Eingabeprüfung als Komfort, Animationen | Zugriff auf Datenbanken, Berechnungen mit verbindlichem Ergebnis (Preise), Anmeldung, geschützte Geschäftslogik |
Vorteile serverseitiger Ausführung: Der Quelltext und die Geschäftslogik bleiben verborgen und können nicht manipuliert werden; Datenbanken und Zugangsdaten müssen nicht offengelegt werden; das Ergebnis ist unabhängig vom Browser und von der Leistung des Endgeräts. Was im Browser geprüft wird, muss auf dem Server noch einmal geprüft werden, denn clientseitiger Code lässt sich verändern.
Programmierparadigmen
Ein Programmierparadigma ist ein grundlegender Denkstil, wie ein Programm aufgebaut wird. Viele heutige Sprachen unterstützen mehrere Paradigmen (Python, C++, C#, JavaScript).
| Paradigma | Grundidee | Beispiele |
|---|---|---|
| imperativ – unstrukturiert | Folge von Befehlen mit Sprüngen (goto) |
frühes BASIC, Assembler |
| strukturiert | nur drei Kontrollstrukturen: Sequenz, Verzweigung, Wiederholung; jeder Strukturblock hat genau einen Eingang und einen Ausgang | Grundlage aller modernen imperativen Sprachen |
| prozedural | Programm wird in Prozeduren bzw. Funktionen zerlegt, die Daten als Parameter erhalten | C, Pascal, Python |
| objektorientiert | Programm besteht aus Objekten, die Daten (Attribute) und Verhalten (Methoden) bündeln; Baupläne sind Klassen | Java, C#, C++, Python |
| deklarativ (funktional, logisch, Abfragen) | beschreibt, was das Ergebnis sein soll, nicht wie es berechnet wird | SQL, Haskell, Prolog, Teile von Python und JavaScript |
Die Paradigmen lassen sich in zwei Familien ordnen: Imperative Programme beschreiben den Rechenweg, deklarative das gewünschte Ergebnis. Prozedurale und objektorientierte Programmierung bauen auf der strukturierten Programmierung auf.
Strukturierte Programmierung führt zu übersichtlichen, änderungsfreundlichen Programmen, die sich gut dokumentieren und als Struktogramm oder Pseudocode darstellen lassen. Sie macht das Programm nicht automatisch schneller und ist auch keine Besonderheit objektorientierter Sprachen.
Der Unterschied zwischen prozeduralem und objektorientiertem Stil am Beispiel eines Kontos in Python:
# prozedural: Daten und Funktionen sind getrennt
def einzahlen(konto, betrag):
konto["saldo"] += betrag
konto = {"inhaber": "Ada", "saldo": 0}
einzahlen(konto, 50)
# objektorientiert: Daten und Methoden bilden ein Objekt
class Konto:
def __init__(self, inhaber):
self.inhaber = inhaber
self.__saldo = 0 # gekapselt: von außen nicht direkt änderbar
def einzahlen(self, betrag):
if betrag <= 0:
raise ValueError("Betrag muss positiv sein")
self.__saldo += betrag
konto = Konto("Ada")
konto.einzahlen(50)Vorteile der objektorientierten Programmierung gegenüber der prozeduralen:
Abbild der Wirklichkeit: Klassen wie
Kunde,BestellungoderSensorentsprechen den Dingen des Anwendungsbereichs; das Programm ist leichter zu verstehen.Kapselung: Daten sind nur über Methoden änderbar, die Regeln prüfen (im Beispiel: keine negativen Einzahlungen). Das verhindert Fehler und schützt die Daten.
Wiederverwendbarkeit: Klassen lassen sich in anderen Projekten nutzen und über Vererbung erweitern, ohne den Code zu kopieren.
Wartbarkeit: Änderungen bleiben auf eine Klasse begrenzt; über Polymorphie lassen sich neue Varianten ergänzen, ohne bestehenden Code zu ändern.
Arbeitsteilung: Teams können an verschiedenen Klassen mit festen Schnittstellen arbeiten.
Für kleine Skripte ist der prozedurale Stil dagegen oft kürzer und schneller geschrieben.
Eine Programmiersprache auswählen
Welche Sprache passt, hängt von der Aufgabe und vom Umfeld ab. Typische Auswahlkriterien:
| Kriterium | Frage dahinter |
|---|---|
| Anwendungsbereich und Zielplattform | Web, Mobil-App, Desktop, Server, Mikrocontroller, Datenanalyse? Für Android etwa Kotlin oder Java, für Browser JavaScript |
| Leistung und Ressourcen | Muss das Programm sehr schnell sein oder mit wenig Speicher und Akku auskommen? Dann eher eine Compilersprache |
| Know-how im Team | Welche Sprachen beherrschen die Entwickler*innen? Wie hoch wäre der Einarbeitungsaufwand? |
| Bibliotheken und Frameworks | Gibt es fertige, gepflegte Lösungen für die Aufgabe (z. B. für KI, Webservices, Hardwarezugriff)? |
| Portabilität | Soll dasselbe Programm auf verschiedenen Betriebssystemen und Prozessoren laufen? |
| Wartbarkeit und Lesbarkeit | Wie gut können andere den Code später verstehen und ändern? |
| Zukunftssicherheit | Wird die Sprache weiterentwickelt, gibt es eine große Gemeinschaft und Fachkräfte am Arbeitsmarkt? |
| Firmenvorgaben und vorhandene Systeme | Gibt es Standards im Unternehmen, muss an bestehende Software angebunden werden? |
| Sicherheit | Schützt die Sprache vor typischen Fehlern wie Speicherzugriffen außerhalb eines Bereichs? |
| Kosten und Lizenzen | Fallen Kosten für Compiler, Laufzeitumgebung oder Werkzeuge an? |
Wenn Du ein Kriterium begründen sollst, verbinde es mit der Situation: „Weil das Team bereits Erfahrung mit Java hat, entfällt die Einarbeitung, und das Projekt kann früher starten.“
Ein Vergleich häufig eingesetzter Sprachen:
| Sprache | Ausführung | Stärken | Schwächen |
|---|---|---|---|
| Python | Interpreter | leicht erlernbar, gut lesbar, wenig Code; riesige Bibliotheken für Datenanalyse, KI, Automatisierung und Web; plattformübergreifend; interaktiv nutzbar | langsamer als kompilierte Sprachen; Typfehler oft erst zur Laufzeit; für Mobil-Apps kaum genutzt |
| Java | Bytecode auf JVM | plattformunabhängig, robust durch statische Typisierung, sehr verbreitet in Unternehmenssoftware und Android | mehr Code für einfache Aufgaben; Laufzeitumgebung nötig |
| C++ | Compiler | sehr schnell, direkte Kontrolle über Speicher und Hardware, Multithreading; für Spiele, Embedded, Hochleistung | komplex, fehleranfällig bei Speicherverwaltung, je Plattform neu kompilieren |
| C# | Bytecode auf .NET | modern, gute Werkzeuge, Windows- und Webanwendungen, Spiele (Unity) | stärker an das .NET-Ökosystem gebunden |
| JavaScript | Interpreter bzw. JIT im Browser oder Node.js | einzige Sprache, die alle Browser direkt ausführen; auch serverseitig nutzbar | dynamische Typisierung führt leicht zu Fehlern (deshalb oft TypeScript) |
Fazit
Compiler übersetzen vorab und liefern schnelle Programme, Interpreter führen direkt aus und erlauben schnelle Änderungen; Bytecode verbindet beides. Paradigmen geben die Denkweise vor: strukturiert und prozedural für klare Abläufe, objektorientiert für große, langlebige Programme mit vielen zusammenwirkenden Teilen. Welche Sprache am Ende passt, entscheidest Du nicht nach Vorliebe, sondern nach begründeten Kriterien wie Einsatzbereich, Leistung, Know-how und Bibliotheken.
Leitfragen
- Worin unterscheiden sich Compiler- und Interpretersprachen?
Ein Compiler übersetzt den gesamten Quelltext vor der Ausführung in Maschinencode und speichert ihn als ausführbare Datei; ein Interpreter übersetzt und führt den Quelltext zur Laufzeit Anweisung für Anweisung aus. Kompilierte Programme laufen schneller, interpretierte sind sofort testbar und portabel. Siehe Abschnitt „Vom Quelltext zum laufenden Programm“.
- Welche Aufgaben haben Editor, Compiler, Linker und Debugger?
Editor: Quelltext schreiben; Compiler: übersetzen und Syntaxfehler melden; Linker: Programmteile und Bibliotheken zu einem ausführbaren Programm verbinden; Debugger: Programm schrittweise ausführen und Variablen untersuchen. Siehe Abschnitt „Programmierumgebung“.
- Welche Fehlerarten gibt es, und welche meldet ein Compiler?
Syntaxfehler (Regeln der Sprache verletzt, meldet der Compiler), Laufzeitfehler (Abbruch während der Ausführung) und Logikfehler (falsches Ergebnis, nur durch Tests zu finden). Siehe Abschnitt „Fehlerarten“.
- Was kennzeichnet Skriptsprachen, und warum gehört eine Preisberechnung auf den Server?
Skriptsprachen werden meist interpretiert und dienen zur schnellen Lösung und Automatisierung von Aufgaben. Clientseitiger Code läuft im Browser und lässt sich verändern; serverseitig berechnete Preise sind verbindlich, und Geschäftslogik und Datenbankzugriff bleiben geschützt. Siehe Abschnitt „Skriptsprachen“.
- Was ist strukturierte Programmierung, und welche Vorteile hat objektorientierte gegenüber prozeduraler Programmierung?
Strukturierte Programmierung nutzt nur Sequenz, Verzweigung und Wiederholung; jeder Strukturblock hat einen Eingang und einen Ausgang. Objektorientierung bildet die Wirklichkeit in Klassen ab, kapselt Daten, erleichtert Wiederverwendung (Vererbung), Wartung und Arbeitsteilung. Siehe Abschnitt „Programmierparadigmen“.
- Nach welchen Kriterien wählst Du eine Programmiersprache aus?
Anwendungsbereich und Plattform, Leistung, Know-how im Team, verfügbare Bibliotheken, Portabilität, Wartbarkeit, Zukunftssicherheit, Firmenvorgaben, Sicherheit sowie Kosten und Lizenzen – jeweils mit Bezug zur Situation begründet. Siehe Abschnitt „Eine Programmiersprache auswählen“.
Links und weitere Informationen
Werkzeuge der Softwareentwicklung: Compiler, Bibliotheken, Versionsverwaltung, CI/CD und Open Source
zur Vertiefung: TIOBE-Index: Verbreitung von Programmiersprachen
Hinweis zur Nachnutzung als Open Educational Resource (OER)
Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Programmiersprachen und Paradigmen: Compiler, Interpreter, prozedural und objektorientiert” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/programmiersprachen veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/programmierung/programmiergrundlagen. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 28.10.2026.
[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]
