Programmiersprachen einordnen
Vom Bitmuster bis zur Hochsprache: Sprachen unterscheiden sich darin, wie nah sie an der Maschine sind, wie sie übersetzt werden, wie streng sie Typen prüfen und in welchem Stil man in ihnen denkt.
3.1.1 Wie Sprachen entstanden
Maschinensprache besteht aus Bitfolgen. Assembler ersetzt sie durch Kürzel (Mnemonics) — ein Befehl entspricht einem Maschinenbefehl, prozessorabhängig. Hochsprachen brauchen einen Übersetzer.
Python 1991 · Java/JS/PHP 1995 · C# 2000
Go 2009 · Rust 1.0 2015
3.1.2 Compiler und Interpreter
Der Compiler übersetzt vorab den ganzen Quelltext: Fehler vor dem Start, schnell, plattformabhängig. Der Interpreter übersetzt während des Laufs Anweisung für Anweisung: sofort testbar, langsamer, Fehler erst beim Erreichen der Zeile.
Interpreter: Python, PHP, JavaScript
3.1.3 Statische und dynamische Typen
Statisch: Der Typ der Variable steht vor dem Lauf fest, der Compiler prüft (auch mit var, let, :=). Dynamisch: Der Typ gehört zum Wert und wird zur Laufzeit geprüft.
"5" + 3 → "53" · "5" * 3 → 15PHP
"5" + 3 → 8 · Python → TypeError3.1.4 Programmierparadigmen
Imperativ: Befehlsfolge, der Zustand ändert sich (prozedural: in Prozeduren gegliedert). Objektorientiert: Klassen, Objekte, Attribute, Methoden. Deklarativ: WAS statt WIE (SQL, HTML). Funktional: Funktionen ohne Seiteneffekte.
filter · map · reduceMultiparadigmen: Python, JavaScript, C#
javac in Bytecode übersetzt, den die JVM ausführt; C# wird in CIL übersetzt, das .NET ausführt. In beiden Fällen übersetzt ein JIT-Compiler häufig genutzte Teile während des Laufs in Maschinencode. So läuft dieselbe Datei auf verschiedenen Systemen.Statisch heißt nicht „Typ hinschreiben“
Auch var n = 5; in Java oder n := 5 in Go ist statisch typisiert: Der Compiler leitet den Typ int ab (Typinferenz), und er bleibt fest. Umgekehrt hat in Python jeder Wert einen Typ — geprüft wird nur später.
Sprachen und ihre Einsatzgebiete
Jede Sprache hat ihre Stärken: C# für Spiele und Anwendungen, Rust und Go für sichere, schnelle Programme, PHP für Webseiten auf dem Server und SQL für Abfragen an Datenbanken.
3.2.1 C#: Spiele und Anwendungen
Microsoft 2000, objektorientiert, statisch typisiert, Java-ähnlich; läuft auf .NET (CIL + JIT). In Unity erbt ein Skript von MonoBehaviour: Start() läuft einmal, Update() in jedem Frame.
Console.WriteLine("Hallo");transform.Translate(tempo * Time.deltaTime, 0, 0);3.2.2 Rust und Go: sicher, schnell
Rust: kompiliert, schnell wie C, jeder Wert hat genau einen Besitzer; let b = a; verschiebt einen String, &a leiht ihn; der Borrow Checker prüft beim Kompilieren, kein Garbage Collector. Go (Google 2009): kompiliert, wenige Sprachelemente, Garbage Collector.
let s = String::from("Hallo");Go:
x := 5 · go f() · Channels3.2.3 PHP: Webseiten auf dem Server
Rasmus Lerdorf 1995; serverseitig, interpretiert, dynamisch typisiert. Der Server führt PHP aus und schickt nur HTML — der Browser sieht keinen PHP-Code. JavaScript läuft dagegen clientseitig im Browser.
<?php echo "Hallo $name"; ?>Verkettung:
"Hallo " . $name · $_GET · $_POST3.2.4 SQL: Daten abfragen
Eine Tabelle besteht aus Datensätzen (Zeilen) und Attributen (Spalten). SQL ist deklarativ; das Ergebnis einer Abfrage ist wieder eine Tabelle. Text steht in einfachen Anführungszeichen.
= <> < > <= >= · AND · ORCOUNT(*) · AVG · MIN · MAXSELECT * liefert alle Spalten, ORDER BY … ASC sortiert aufsteigend, DESC absteigend. Beispiel: SELECT titel FROM buecher WHERE genre = 'Krimi' ORDER BY jahr DESC;Verschieben, leihen, kopieren
In Rust gehört ein String nach let b = a; nur noch b; wer danach a benutzt, bekommt einen Compilerfehler. Mit &a wird nur geliehen, a bleibt Besitzer. Einfache Zahlen wie i32 werden kopiert — beide Variablen bleiben gültig.
Die passende Sprache wählen
Ein Algorithmus ist unabhängig von der Sprache. Was sich ändert, ist die Syntax — und die Frage, welche Sprache zu Plattform, Aufgabe und Team passt.
3.3.1 Ein Problem in vielen Sprachen
Blöcke: Einrückung in Python, { } in der C-Familie. Programmrahmen: Java class + main, Go package main + func main, Rust fn main. Variablen und Ausgabe unterscheiden sich in jeder Sprache.
int n = 5; · n = 5 · $n = 5; · n := 5 · let n = 5;print · System.out.println · echo · fmt.Println · println!3.3.2 Welche Sprache wofür?
Kriterien: Plattform und Einsatzgebiet, Geschwindigkeit, Sicherheit, Bibliotheken und Community, Vorwissen. Entwicklungszeit gegen Laufzeit abwägen. Große Projekte nutzen mehrere Sprachen (HTML/CSS + JavaScript + PHP + SQL).
Unity → C# · Datenbank → SQL · Mikrocontroller → C/C++
Datenanalyse/KI → Python
3.3.3 Eine neue Sprache lernen
Konzepte (Variable, Typ, Verzweigung, Schleife, Funktion, Liste) bleiben, neu sind Syntax und Besonderheiten ($ in PHP, := in Go, Ownership in Rust). Hallo-Welt zuerst, Vergleichstabelle, offizielle Doku, Playgrounds, bekannte Aufgaben neu lösen.
Fehlermeldung lesen: Zeile + Art
7 / 2 ist nicht überall 3,5
Python liefert 3.5 (ganzzahlig: 7 // 2 = 3), JavaScript und PHP ebenfalls 3.5. In Java, C#, Go und Rust ist 7 / 2 mit ganzen Zahlen eine Ganzzahldivision: 3. Wer ein Programm überträgt, muss solche Feinheiten mit Testfällen prüfen.
Die Regeln, an denen die Punkte hängen
In der Klassenarbeit gehen die meisten Punkte nicht an schweren Ideen verloren, sondern an kleinen Unterschieden zwischen den Sprachen. Diese drei Regeln fangen fast alles davon ab.
Regel 1: Erst den Typ, dann den Operator
Bevor du eine Ausgabe vorhersagst, notiere zu jedem Wert, ob er Zahl oder Text ist. Dann entscheide je nach Sprache: + verkettet in JavaScript und Java bei Text, rechnet in PHP immer (Verkettung dort mit .) und führt in Python zum TypeError. / mit zwei int-Werten ist in Java, C#, Go und Rust ganzzahlig.
Regel 2: SQL in der richtigen Reihenfolge lesen
Werte eine Abfrage so aus wie die Datenbank: erst FROM, dann WHERE (bei AND müssen beide Bedingungen gelten, bei OR eine), dann ORDER BY, zuletzt SELECT bzw. COUNT/AVG. Markiere die passenden Zeilen in der Tabelle, bevor du zählst.
Regel 3: Begründen heißt Kriterien nennen
Bei „Welche Sprache ist geeignet?“ gibt es Punkte für Kriterien, nicht für Lieblingssprachen: Plattform, Geschwindigkeit, Sicherheit, Bibliotheken, Vorwissen, Entwicklungszeit. Und immer beide Seiten: Was spricht dafür, was dagegen — und was überwiegt?
