---
title: "Vibe Coding: Programmiersprachen für Einsteiger"
locale: de
category: knowledge_base
category_name: "Wissensdatenbank"
translation_status: reviewed
license: cc_by
author: "injoys"
source_url: https://injoys.com/en/articles/vibe-coding-programming-language-basics
published_at: 2026-10-29T14:25:12+09:00
---

# Vibe Coding: Programmiersprachen für Einsteiger

> Beim Vibe Coding ist es nützlicher, zu verstehen, wo Code ausgeführt wird und wie Daten verarbeitet werden, als die Namen der Programmiersprachen zu kennen. Sie können sich über Programmiergrundlagen, sprachspezifische Auswahlkriterien und den Prüfumfang bei KI-generiertem Code informieren.

## Key Points

- Webentwicklung beginnt damit, die Aufgaben von HTML, CSS und JavaScript zu unterscheiden.
- TypeScript bietet eine Typprüfung vor der Ausführung, validiert externe Eingaben jedoch nicht automatisch.
- Das Ownership-Konzept von Rust umfasst Regeln für die Speicherverwaltung, schützt aber nicht vor allen Sicherheitsfehlern.
- Mojo ist eine Sprache für Hochleistungsberechnungen auf CPU und GPU.
- Bei KI-generiertem Code muss durch Ausführung und Tests geprüft werden, ob er die Anforderungen erfüllt.

Für Vibe-Coding braucht man Grundlagen, um die Aufgaben der Sprachen und ihre Ausführungsorte zu unterscheiden. Für das Web sind JavaScript und TypeScript der Ausgangspunkt. Für die Datenverarbeitung sollten Sie Python in Betracht ziehen. Rust und Mojo werden für Systementwicklung und Hochleistungsberechnungen eingesetzt.

Die Leistungsangaben beruhen auf der Veröffentlichung von Microsoft vom 11. März 2025.

## Warum Sprachgrundlagen beim Vibe-Coding nötig sind

Vibe-Coding ist eine Entwicklungsmethode, bei der man mit KI Code erstellt und Anfragen in natürlicher Sprache im Mittelpunkt stehen. Anhand der Ausführungsergebnisse des erzeugten Programms passt man die Anfragen an. Auch natürlichsprachliche Anfragen müssen in tatsächlich ausführbaren Code umgesetzt werden.

Sprachgrundlagen helfen dabei, gewünschte Funktionen konkret zu beschreiben. Sie helfen auch, die Stelle zu finden, an der ein Fehler aufgetreten ist. Unterscheiden Sie als Einstieg zunächst die Aufgaben der Sprachen, statt die Syntax aller Sprachen auswendig zu lernen.

- Ausführungsort: Browser, Server, Smartphone, innerhalb des Betriebssystems
- Eingabe: vom Benutzer eingegebene Werte oder von außen empfangene Daten
- Verarbeitung: Aufgaben des Programms wie Berechnungen, Suchen oder Klassifizieren
- Ausgabe: Bildschirmanzeige, Dateierstellung, Datenspeicherung
- Fehlerbedingungen: leere Eingaben, falsche Formate, Verbindungsabbrüche

## Grundbegriffe: zuerst Variablen und Typen verstehen

Variablen und Typen bilden die Grundlage dafür, zu beschreiben, welche Daten ein Programm verarbeitet. Bedingungen und Schleifen bestimmen den Ablauf der Verarbeitung. Funktionen bündeln zusammengehörige Aufgaben und machen sie wiederverwendbar.

| Begriff | Einfache Definition | Beispiel zur Beschreibung einer Funktion |
| --- | --- | --- |
| Variable | Mittel, um einen Wert zu benennen und darauf zuzugreifen | Name, unter dem ein Suchbegriff gespeichert wird |
| Typ | Regeln zur Art eines Werts und zu den erlaubten Operationen | Mengen sind Zahlen, Titel sind Zeichenketten |
| Bedingungsanweisung | Anweisung, die abhängig von einer Bedingung eine auszuführende Aufgabe auswählt | Speichern ablehnen, wenn der Titel leer ist |
| Schleife | Anweisung, die dieselbe Aufgabe auf mehrere Elemente anwendet | Jeden Eintrag einer Liste auf dem Bildschirm anzeigen |
| Funktion | Code, der für eine bestimmte Aufgabe gebündelt ist | Funktion zur Prüfung von Eingaben |
| Datenstruktur | Art, Daten zu organisieren | Geordnete Liste, über Namen auffindbare Werte |
| Objekt | Einheit, die zusammengehörige Zustände und Aktionen bündelt | Titel eines Beitrags und dessen Bearbeitungsfunktion |
| Ausnahmebehandlung | Umgang mit Fehlern, die während der Ausführung auftreten | Fehlermeldung, wenn eine Datei nicht gelesen werden kann |
| API | Vereinbarung zum Austausch von Funktionen oder Daten zwischen Programmen | Suchergebnisse beim Server anfordern |
| Abhängigkeit | Externer Code oder externe Werkzeuge, die ein Programm nutzt | Bibliothek zur Verarbeitung von Datumsangaben |

Bei der statischen Typprüfung wird die Verwendung von Typen vor der Ausführung geprüft. Auch dynamisch typisierte Sprachen unterscheiden die Typen von Werten. Dynamische Typisierung bedeutet nicht, dass es keine Datenarten gibt.

## Warum der Wechsel von Maschinensprache zu höheren Programmiersprachen erfolgte

Die Entwicklung der Sprachen hat die Detailarbeit verringert, die Menschen selbst ausdrücken müssen. Maschinensprache ist die Darstellung der Befehle, die ein Prozessor ausführt. Assemblersprache versieht diese Befehle mit menschenlesbaren Symbolen.

Assembler ist eng an den Befehlssatz des Prozessors gebunden. Ein Austausch von Komponenten bedeutet nicht, dass der gesamte Code neu geschrieben werden muss. Beim Wechsel zu einem inkompatiblen Befehlssatz steigt der Anpassungsaufwand.

| Sprache oder Entwicklung | Zu lösendes Problem | Wichtiger Begriff |
| --- | --- | --- |
| Maschinensprache·Assembler | Der Hardware die auszuführenden Aufgaben mitteilen | Direkte Bindung an den Befehlssatz |
| Fortran | Wissenschaftliche Berechnungen ähnlich wie Formeln ausdrücken | Numerische Berechnungen und Compiler |
| COBOL | Geschäftsdaten in einer gut lesbaren Form verarbeiten | Ausdrucksweise mit Schwerpunkt auf Buchführung und Transaktionsverarbeitung |
| Lisp | Berechnungen mit Symbolen und Listen | Frühe KI-Forschung und funktionsorientierte Ausdrucksweise |
| C | Systemsoftware effizient schreiben | Speicherkontrolle und Portabilität |
| SQL | Daten in relationalen Datenbanken verarbeiten | Abfragen, die das gewünschte Ergebnis deklarieren |
| C++ | Große Programme strukturieren und Ressourcen verwalten | Klassen und mehrere Programmierparadigmen |
| Java | Portabilität zwischen Systemen mit unterschiedlichen Ausführungsumgebungen | JVM und Bytecode |

Fortran entstand 1957 bei IBM. Lisp entwickelte sich Ende der 1950er Jahre zusammen mit der KI-Forschung. COBOL ging aus einer gemeinsamen Entwurfsarbeit hervor, die 1959 begann.

C entwickelte sich zusammen mit Unix. Die Sprache trug dazu bei, Software auf andere Rechnertypen zu übertragen. Code, der vom Betriebssystem oder von der Hardware abhängt, muss jedoch gesondert angepasst werden.

Objektorientierung ist eine Methode, zusammengehörige Daten und Verhaltensweisen in Objekten zu organisieren. C++ unterstützt Objektorientierung. Das Konzept der Objektorientierung selbst wurde jedoch nicht durch C++ geschaffen.

## Der Unterschied zwischen Compiler und Interpreter

Ein Compiler ist ein Programm, das Code in eine andere Darstellung umwandelt. Das Ergebnis kann Maschinensprache sein. Es kann auch ein Zwischenformat zur Ausführung sein, etwa Bytecode.

Ein Interpreter interpretiert Code oder eine Zwischendarstellung und führt ihn dabei aus. Konkrete Sprachimplementierungen kombinieren mitunter Kompilierung und Interpretation. Sprachen nur in schnelle kompilierte und langsame interpretierte Sprachen einzuteilen, ist ungenau.

| Begriff zur Ausführung | Aufgabe | Typisches Beispiel |
| --- | --- | --- |
| Vorabkompilierung | Zielcode vor der Ausführung erzeugen | Übliche Erstellung ausführbarer Dateien mit C·Rust |
| Bytecode | Zwischenformat für Befehle, das von einer Ausführungsumgebung verarbeitet wird | Java-Bytecode, CPython-Bytecode |
| Interpreter | Code oder Zwischenbefehle interpretieren und dabei ausführen | Ausführung von Bytecode in CPython |
| JIT-Kompilierung | Benötigten Code während der Ausführung in Maschinensprache umwandeln | Verschiedene JVMs und JavaScript-Engines |
| Laufzeitumgebung | Für die Programmausführung benötigte Funktionen bereitstellen | JVM, Node.js |

CPython ist eine weit verbreitete Python-Implementierung. Sie kompiliert Quellcode zu Bytecode und führt diesen aus. Python ausschließlich als eine Sprache zu beschreiben, die jedes Mal den Quellcode Zeile für Zeile übersetzt, ist falsch.

Die JVM von Java ist eine Umgebung zur Ausführung von Bytecode. Diese Struktur hilft dabei, Code auf unterschiedlichen Betriebssystemen auszuführen. Die tatsächliche Kompatibilität hängt auch von der JVM-Version und externen Bibliotheken ab.

## Wie unterscheiden sich die Oberfläche und der Server im Web?

Das Frontend ist für die Oberfläche und die Interaktionen zuständig, mit denen Benutzer in Kontakt kommen. Das Backend verarbeitet Anfragen auf dem Server. Die Datenbank speichert die benötigten Daten und ermöglicht deren Abfrage.

HTML ist eine Auszeichnungssprache zur Darstellung der Dokumentstruktur. CSS legt das Aussehen und die Anordnung auf dem Bildschirm fest. JavaScript setzt Bedingungsprüfungen und die Verarbeitung von Benutzeraktionen um.

| Name | Kategorie | Hauptaufgabe |
| --- | --- | --- |
| HTML | Auszeichnungssprache | Dokumentstruktur wie Überschriften, Absätze und Eingabefelder |
| CSS | Stylesheet-Sprache | Farben, Abstände, Anordnung auf dem Bildschirm |
| JavaScript | Programmiersprache | Interaktionen im Browser und Verarbeitung auf dem Server |
| TypeScript | Sprache, die JavaScript um ein Typsystem ergänzt | Fehlerprüfung vor der Ausführung und Codeverwaltung |
| React | Bibliothek für Benutzeroberflächen | Oberflächen aus wiederverwendbaren Komponenten erstellen |
| Node.js | JavaScript-Laufzeitumgebung | JavaScript außerhalb des Browsers ausführen |
| Next.js | Auf React basierendes Framework | Seitenstruktur und Serverfunktionen von Web-Apps |
| PHP | Programmiersprache | Dynamische Webantworten auf dem Server erzeugen |
| SQL | Datenbanksprache | Daten abfragen, hinzufügen, ändern und löschen |

React, Node.js und Next.js sind unterschiedliche Arten von Werkzeugen. Eine Bibliothek ist eine Codesammlung, aus der man benötigte Funktionen nutzt. Ein Framework gibt auch vor, wie eine Anwendung aufgebaut wird. Eine Laufzeitumgebung ist die Umgebung, in der Code ausgeführt wird.

## Sprachen nach Einsatzzweck vergleichen

Wählen Sie eine Sprache anhand des gewünschten Ergebnisses und der vorhandenen Ausführungsumgebung. Die folgende Tabelle zeigt typische Ausgangspunkte für die Auswahl. Eine Sprache ist nicht auf die in der Tabelle genannten Aufgaben beschränkt.

| Gewünschtes Ergebnis | Zuerst zu prüfende Sprache | Vor der Auswahl zu klären |
| --- | --- | --- |
| Web-App zur Nutzung im Browser | JavaScript·TypeScript | HTML·CSS-Grundlagen und Werkzeuge für die Oberflächengestaltung |
| Dateien organisieren·Arbeitsabläufe automatisieren | Python | Format der Eingabedateien und Bereitstellungsumgebung |
| Datenanalyse·Nutzung von KI-Modellen | Python | Benötigte Analyse- und Modellbibliotheken |
| Netzwerkserver·Betriebswerkzeuge | Go | Struktur der nebenläufigen Verarbeitung und Anbindung vorhandener Systeme |
| JVM-basierte Geschäftssysteme | Java·Kotlin | Kompatibilität mit vorhandenem Code und Bibliotheken |
| Apps mit Schwerpunkt auf iOS | Swift | Entwicklungswerkzeuge von Apple und Plattformfunktionen |
| Apps mit Schwerpunkt auf Android | Kotlin | Android-Entwicklungswerkzeuge und Struktur der vorhandenen App |
| Systeme, die Speicherkontrolle erfordern | C·C++·Rust | Leistungsanforderungen und Möglichkeiten zur Sicherheitsprüfung |
| Optimierung von CPU·GPU-Berechnungen | Mojo | Unterstützte Hardware und benötigte Berechnungsfunktionen |
| Verarbeitung relationaler Daten | SQL | Syntaxunterschiede zwischen Datenbankprodukten |

Die Einsatzmöglichkeiten von Python hängen auch mit seinem Bibliotheksökosystem zusammen. NumPy verwendet für eine höhere Geschwindigkeit kompilierten Code. Nicht jede in Python geschriebene Berechnung wird ausschließlich mit Python-Code ausgeführt.

Go berücksichtigt die Unterstützung von Nebenläufigkeit bereits im Sprachentwurf. Nebenläufigkeit bezeichnet das Konzept, mehrere Aufgaben so zu organisieren, dass sie gemeinsam voranschreiten. Parallelität bedeutet, dass mehrere Aufgaben tatsächlich gleichzeitig ausgeführt werden. Nebenläufiger Code macht Berechnungen nicht automatisch schneller.

## Die Unterschiede zwischen TypeScript, Rust und Mojo

TypeScript, Rust und Mojo lösen unterschiedliche Probleme. TypeScript hilft bei der Typprüfung von JavaScript-Code. Rust setzt strenge Regeln für die Speicherverwaltung. Mojo zielt auf Hochleistungsberechnungen und die Nutzung der Hardware ab.

| Vergleichskriterium | TypeScript | Rust | Mojo |
| --- | --- | --- | --- |
| Zentrales Anliegen | Typprüfung und Codeverwaltung | Speichersicherheit und Systemkontrolle | Hochleistungsberechnungen auf CPU·GPU |
| Typische Verwendung | Web-Apps·Serveranwendungen | Systemwerkzeuge·leistungsorientierte Komponenten | KI-Infrastruktur·Berechnungskernel |
| Zuerst zu verstehende Konzepte | JavaScript und Datentypen | Besitz·Ausleihen·Lebensdauer |
| Gesondert zu prüfende Aspekte | Externe Eingaben und Geschäftsregeln | unsafe-Code und Logikfehler | Python-Anbindung und Hardwareunterstützung |

### Die Typprüfung von TypeScript

TypeScript ergänzt JavaScript um eine statische Typprüfung. Sie hilft, Code mit fehlerhafter Typverwendung vor der Ausführung zu finden. Durch Typinferenz werden einige Typdeklarationen automatisch abgeleitet.

Sie müssen nicht bei jeder Variablen den Typ ausdrücklich angeben. Typannotationen werden bei der üblichen Umwandlung in JavaScript entfernt. Typdeklarationen allein erzeugen keine Eingabeprüfung zur Laufzeit.

### Besitz und Speichersicherheit in Rust

Besitz bezeichnet die Regeln dafür, wer den Speicher eines Werts verwaltet. Ausleihen ist eine Möglichkeit, auf einen Wert zu verweisen, ohne den Besitz zu übertragen. Der Compiler prüft die zugehörigen Regeln, um Speicherfehler zu verhindern.

Die Sicherheitsgarantien von Rust setzen eine korrekte Implementierung voraus. Bei unsafe-Code trägt der Verfasser die Verantwortung für bestimmte Sicherheitsbedingungen. Fehler in Berechnungsformeln oder Zugriffsberechtigungen verhindert die Sprache nicht automatisch.

### Das Verhältnis von Mojo und Python

Mojo ist eine eigenständige Sprache mit einer Python ähnlichen Syntax. Sie unterstützt das Schreiben von Hochleistungscode für CPU und GPU. Außerdem bietet sie Interoperabilitätsfunktionen zur Anbindung von Python-Code.

Gehen Sie nicht davon aus, dass vorhandener Python-Code unverändert übernommen werden kann. Prüfen Sie die benötigten Funktionen in der Dokumentation der Mojo-Version, die Sie installieren möchten. Für die GPU-Nutzung müssen auch die Voraussetzungen für unterstützte Geräte und Treiber erfüllt sein.

## Häufige Fehler bei der Beschreibung von Sprachen

Bei kurzen Sprachvorstellungen fehlen leicht die jeweiligen Voraussetzungen. Auch historische Fakten und heutige Funktionen müssen auseinandergehalten werden. Die folgenden Missverständnisse können die Sprachwahl beeinträchtigen.

| Häufige Aussage | Korrekte Einordnung |
| --- | --- |
| JavaScript ist die Webversion von Java | Es sind unterschiedliche Sprachen |
| HTML und CSS erschienen beide 1991 | Die W3C-Empfehlung für CSS1 stammt vom 17. Dezember 1996 |
| Kotlin wurde von Google entwickelt | Entwickler ist JetBrains, Google unterstützt die Sprache auf Android |
| C-Code läuft nach erneuter Kompilierung überall | Betriebssystem- und hardwareabhängige Teile müssen möglicherweise angepasst werden |
| Python steht derzeit auf Platz 1 der Beliebtheitsskala | Eine Beurteilung erfordert Angaben zur erhebenden Organisation, zum Zeitpunkt und zur Auswertungsmethode |
| Rust löst alle Sicherheitsprobleme | Speichersicherheit und die Prüfung von Zugriffsberechtigungen sind unterschiedliche Fragen |
| Mojo beschleunigt alle Python-Aufgaben | Messungen je nach Aufgabe, Implementierung und Hardware sind nötig |
| Der Begriff bug entstand bei dem Vorfall mit einem Insekt | Der Vorfall machte einen bereits verwendeten Begriff weithin bekannt |

Der berühmte dokumentierte Insektenfund ereignete sich 1947 beim Harvard Mark II. Smithsonian erklärt, dass dieser Vorfall zur Popularisierung des zugehörigen Begriffs beitrug. Ihn als Vorfall beim ENIAC oder als erstmalige Entstehung des Begriffs darzustellen, ist ungenau.

## Wie sollte man Leistungsangaben lesen?

Leistungsangaben müssen auf die gemessene Aufgabe begrenzt interpretiert werden. Kompilierungszeit und Ausführungsgeschwindigkeit der fertigen App sind unterschiedliche Kennzahlen. Wenn ein Entwicklungswerkzeug schneller wird, wird eine Webseite dadurch nicht im gleichen Verhältnis schneller.

Microsoft kündigte die Umstellung der TypeScript-Werkzeuge auf eine native Implementierung an. Die Veröffentlichung vom 11. März 2025 enthält Messwerte für einzelne Projekte. Die folgende Tabelle zeigt das dort genannte Beispiel der VS Code-Codebasis.

| Messgegenstand | Bisherige Implementierung | Native Implementierung | Veröffentlichter Geschwindigkeitsgewinn |
| --- | --- | --- | --- |
| TypeScript-Kompilierung der VS Code-Codebasis | 77.8 Sekunden | 7.5 Sekunden | Faktor 10.4 |

Unter den veröffentlichten Bedingungen sank die Verarbeitungszeit auf **7.5 Sekunden**. Die Differenz ergibt eine Einsparung von 70.3 Sekunden pro Durchlauf. Das bedeutet nicht, dass alle Projekte dasselbe Ergebnis erzielen.

Wenden Sie dieselben Grundsätze auch beim Geschwindigkeitsvergleich zwischen Python und C an. Sie müssen prüfen, ob dieselben Eingaben und Algorithmen verwendet wurden. Auch Compileroptionen und verwendete Bibliotheken gehören zu den Vergleichsbedingungen. Zahlen ohne Angaben zur Ausführungsumgebung eignen sich kaum als allgemeine Geschwindigkeitsfaktoren.

## Typprüfung und Validierung externer Eingaben

Auch nach bestandener Typprüfung muss der Inhalt externer Daten gesondert geprüft werden. Bei der Überprüfung von KI-generiertem Code wird dieser Unterschied häufig übersehen. Typdeklarationen beschreiben die Form der Werte, die das Programm erwartet.

Stellen Sie sich eine Web-App vor, in der eine Mengenangabe als Zahlentyp deklariert ist. Eine externe API könnte tatsächlich eine Zeichenkette senden. Weder die Angabe eines Typnamens noch eine Typzusicherung validiert den Wert. Dafür ist Code nötig, der die Daten während der Ausführung prüft.

| Prüfschritt | Prüfgegenstand | Nach bestandener Prüfung verbleibende Frage |
| --- | --- | --- |
| Typprüfung | Verwendung von Typen innerhalb des Codes | Welche Werte tatsächlich von außen eingehen |
| Eingabevalidierung | Datenformat und zulässiger Wertebereich | Ob die Aktion dem Benutzer erlaubt ist |
| Berechtigungsprüfung | Zugriffsberechtigungen des Anfragenden | Ob das Ergebnis den Geschäftsregeln entspricht |
| Funktionstest | Tatsächliche Ergebnisse für erwartete Eingaben | Nicht getestete Bedingungen |

Diese Tabelle ist ein Prüfschema, das die Grenzen von Typentfernung und Speichersicherheit berücksichtigt. Sie trennt die Garantien der Sprache von den Prüfungen, die der Dienst selbst vornehmen muss. Bitten Sie die KI für jede Stufe gesondert um die entsprechende Prüfung.

## So beschreiben Sie der KI eine Funktion

Geben Sie bei einer Funktionsanfrage sowohl die Eingaben als auch das erwartete Ergebnis an. Wenn Sie nur den Programmnamen festlegen, fehlen leicht die Bedingungen für das Verhalten. Teilen Sie bei einem bestehenden Projekt auch die verwendete Sprache und Version mit.

1. Geben Sie die vorgesehene Umgebung an.
2. Beschreiben Sie die Form der zu verarbeitenden Eingaben.
3. Legen Sie das Ergebnis für gültige Eingaben fest.
4. Legen Sie fest, wie leere Werte und fehlerhafte Eingaben behandelt werden sollen.
5. Bitten Sie zugleich um eine Begründung der Änderungen und um eine Prüfmethode.

Das folgende Prompt-Beispiel gliedert die Anforderungen. Passen Sie die tatsächlichen Dateiinhalte an Ihr Projekt an. Das erzeugte Ergebnis müssen Sie selbst ausführen und überprüfen.

```text
Prüfen Sie zuerst die Sprache und die Ausführungsumgebung des vorhandenen Projekts.
Lesen Sie Zeilen mit einem Titel aus einer CSV-Datei und zeigen Sie sie als Liste an.
Zeigen Sie eine Fehlermeldung an, wenn erforderliche Spalten fehlen.
Weisen Sie gesondert auf Zeilen mit leerem Titel hin.
Trennen Sie den Code zur Validierung externer Eingaben vom Code für die Bildschirmanzeige.
Prüfen Sie zuerst, ob sich die Umsetzung mit den vorhandenen Abhängigkeiten realisieren lässt.
Erklären Sie die Änderungen und die Testmethode.
```

Geben Sie bei einem Fehler auch die Bedingungen an, unter denen er sich reproduzieren lässt. Fehlermeldungen enthalten Hinweise, mit denen sich die Fehlerstelle eingrenzen lässt. Auch die Copilot-Dokumentation von GitHub fordert eine Überprüfung des erzeugten Codes. Bevor Sie Code übernehmen, müssen Sie dessen Ausführungsergebnisse prüfen.

## Kriterien für den Einstieg und die Auswahl von Schulungen

Beim Einstieg können Sie sich auf die Aufgaben beschränken, die Sie umsetzen möchten. Verbinden Sie bei der Webentwicklung zunächst die Struktur der Oberfläche mit ihrem Verhalten. Bei der Automatisierung empfiehlt es sich, zuerst die Dateieingabe und das Speichern der Ergebnisse zu prüfen.

1. Wählen Sie eine Sprache, die zum gewünschten Ergebnis passt.
2. Lernen Sie Variablen, Typen, Bedingungen, Schleifen und Funktionen kennen.
3. Schreiben Sie eine kleine Funktion und vergleichen Sie die Ausführungsergebnisse.
4. Geben Sie fehlerhafte Eingaben ein und prüfen Sie das Verhalten im Fehlerfall.
5. Erklären Sie mit eigenen Worten, warum Sie den Code geändert haben.

Prüfen Sie bei Schulungen neben der gezeigten Ergebnisoberfläche auch die vermittelten Prüfschritte. Achten Sie darauf, ob es Übungen zum Reproduzieren und Beheben von Fehlern gibt. Prüfen Sie außerdem, ob die verwendeten Versionen und die Ausführungsumgebung angegeben sind.

- Codeerklärung: Erläuterung der Eingaben und Ausgaben einer erzeugten Funktion
- Fehlerbehandlung: Übungen zum Lesen von Fehlermeldungen und zum Eingrenzen der Ursache
- Datenvalidierung: Beispiele zum Umgang mit externen Eingaben und Fehlerbedingungen
- Reproduzierbarkeit: Anleitungen für eine erneute Ausführung in derselben Umgebung

Die Definitionen der Sprachen finden Sie in der offiziellen Dokumentation der jeweiligen Projekte. Das TypeScript Handbook erläutert die Typentfernung. Das offizielle Rust-Buch erklärt Besitz und unsafe getrennt voneinander. Im Mojo Manual können Sie die Sprachfunktionen und den Umfang der Python-Anbindung nachlesen.

## FAQ

### Muss ich alle Programmiersprachen lernen, bevor ich mit Vibe-Coding beginne?
Sie müssen nicht alle Sprachen lernen. Wählen Sie zuerst eine Sprache, die zu dem passt, was Sie erstellen möchten. Wenn Sie Variablen, Typen und Funktionen verstehen und wissen, wo der Code ausgeführt wird, können Sie Ihre Anfragen präziser formulieren.

### Womit sollte ich in der Webentwicklung anfangen: JavaScript oder Python?
Wenn Sie das Verhalten von Webseiten im Browser gestalten möchten, ist JavaScript der Ausgangspunkt. Lernen Sie dabei auch die Aufgaben von HTML und CSS kennen. Python kommt als Ausgangspunkt für die Automatisierung von Dateioperationen und die Datenverarbeitung infrage.

### Brauche ich keine JavaScript-Kenntnisse, wenn ich TypeScript verwende?
Um das Laufzeitverhalten von TypeScript zu verstehen, benötigen Sie Grundlagen in JavaScript. TypeScript ergänzt JavaScript um ein Typsystem. Unterscheiden Sie zwischen der Typprüfung und der tatsächlichen Ausführung.

### Muss ich in TypeScript für jede Variable einen Typ angeben?
Wo Typinferenz möglich ist, müssen Sie den Typ nicht selbst angeben. Das Werkzeug ermittelt den Typ anhand des zugewiesenen Werts und des Kontexts. Entscheiden Sie anhand der Aufgabe des Codes, ob eine explizite Typangabe nötig ist.

### Sind React und Node.js auch Programmiersprachen?
React ist eine Bibliothek für Benutzeroberflächen. Node.js ist eine Laufzeitumgebung für JavaScript. Next.js wird als Framework auf Basis von React eingeordnet.

### Wird Python-Quellcode Zeile für Zeile übersetzt und ausgeführt?
Die gängige Implementierung CPython kompiliert den Quellcode zu Bytecode. Anschließend wird der Bytecode ausgeführt. Die bloße Aussage, der Quellcode werde Zeile für Zeile übersetzt, beschreibt diesen Ablauf nur unzureichend.

### Ist bei der Verwendung von Rust keine Sicherheitsprüfung nötig?
Die Speichersicherheit von Rust bedeutet nicht, dass der gesamte Dienst sicher ist. Zugriffsrechte und Geschäftsregeln müssen gesondert geprüft werden. Auch die Sicherheitsbedingungen für unsafe-Code müssen geprüft werden.

### Ist Mojo eine neue Version von Python?
Mojo ist eine eigenständige Sprache mit einer Python-ähnlichen Syntax. Sie bietet Funktionen zur Anbindung an Python. Prüfen Sie die Kompatibilität mit bestehendem Code in der offiziellen Dokumentation der Version, die Sie verwenden möchten.

### Brauche ich unbedingt eine GPU, um Mojo zu verwenden?
Mit Mojo lässt sich auch Code für CPUs schreiben. Eine GPU ist nicht für jedes Programm Voraussetzung. Wenn Sie GPU-Funktionen nutzen, prüfen Sie, welche Geräte und Treiber unterstützt werden.

### Bedeutet Nebenläufigkeit in Go dasselbe wie Parallelverarbeitung?
Nebenläufigkeit ist ein Konzept, bei dem mehrere Aufgaben so organisiert werden, dass sie nebeneinander bearbeitet werden. Parallelität bezeichnet den Zustand, in dem mehrere Aufgaben tatsächlich gleichzeitig ausgeführt werden. Nebenläufigkeit allein garantiert keine höhere Ausführungsgeschwindigkeit.

### Wurde Kotlin von Google entwickelt?
Kotlin wird von JetBrains entwickelt. Google unterstützt Kotlin für die Android-Entwicklung. Man muss unterscheiden, wer die Sprache entwickelt hat und wer sie auf einer Plattform unterstützt.

### Wird auch die App im gleichen Verhältnis schneller, wenn der TypeScript-Compiler schneller wird?
Die Kompilierzeit und die Laufzeit der App sind unterschiedliche Kennzahlen. Die Leistungsbeispiele von Microsoft beziehen sich auf die Verarbeitungszeit der Entwicklungswerkzeuge. Die Reaktionsgeschwindigkeit der App muss separat gemessen werden.

### Ist von KI erzeugter Code fertig, wenn er die Typprüfung besteht?
Allein anhand der Typprüfung lässt sich nicht beurteilen, ob eine Funktion vollständig implementiert ist. Sie müssen externe Eingaben und Zugriffsberechtigungen prüfen. Testen Sie, ob unter normalen Bedingungen und im Fehlerfall die erwarteten Ergebnisse erzielt werden.

### Nach welchen Kriterien wählt man eine Schulung zum Vibe-Coding aus?
Prüfen Sie, ob es praktische Übungen gibt, in denen der generierte Code erklärt und geändert wird. Sie können auch darauf achten, ob die Reproduktion von Fehlern und die Validierung von Eingaben behandelt werden. Bei Kursen, in denen die verwendete Version und die Ausführungsumgebung angegeben sind, lassen sich die Bedingungen für die Reproduktion leicht überprüfen.

## Sources

- [Offizielle TypeScript-Dokumentation: TypeScript for JavaScript Programmers](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)
- [TypeScript Handbook: The Basics, Typprüfung und Entfernung von Typinformationen](https://www.typescriptlang.org/docs/handbook/2/basic-types)
- [The Rust Programming Language: What Is Ownership?](https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html)
- [The Rust Programming Language: Unsafe Rust](https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html)
- [Mojo Manual: Sprachüberblick und Python-Anbindung](https://docs.modular.com/mojo/manual/)
- [Mojo System Requirements: Voraussetzungen für die CPU- und GPU-Unterstützung](https://docs.modular.com/mojo/requirements/)
- [Offizielles Python-Glossar: Bytecode und Konzepte zur Ausführung](https://docs.python.org/3/glossary.html)
- [NumPy 2.0 Manual: Building from source](https://numpy.org/doc/2.0/building/index.html)
- [MDN: What is JavaScript?](https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript)
- [Offizielle Node.js-Dokumentation: Introduction to Node.js](https://nodejs.org/learn/getting-started/introduction-to-nodejs)
- [Offizielle React-Dokumentation: Bibliothek für Benutzeroberflächen](https://react.dev/)
- [Offizielle Next.js-Dokumentation](https://nextjs.org/docs)
- [PHP Manual: Introduction](https://www.php.net/manual/en/introduction.php)
- [Offizielle Go-FAQ: Entwurfsziele und Ausführungseigenschaften](https://go.dev/doc/faq)
- [Offizieller Go-Blog: Concurrency is not parallelism](https://go.dev/blog/waza-talk)
- [Offizielle Kotlin-FAQ: Entwickler und Zielplattformen](https://kotlinlang.org/docs/faq.html)
- [Android Developers: Kotlin and Android](https://developer.android.com/kotlin)
- [Swift.org: About Swift](https://www.swift.org/about/)
- [Oracle Java Tutorials: About the Java Technology](https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html)
- [IBM History: Fortran](https://www.ibm.com/history/fortran)
- [John McCarthy: LISP prehistory](https://www-formal.stanford.edu/jmc/history/lisp/node2.html)
- [Howard Bromberg: The COBOL Conclusion, Datamation März 1967](https://bitsavers.computerhistory.org/magazines/Datamation/196703.pdf)
- [Dennis Ritchie: The Development of the C Language](https://www.nokia.com/bell-labs/about/dennis-m-ritchie/chist.html)
- [Bjarne Stroustrup FAQ: C++ und Objektorientierung](https://www.stroustrup.com/bs_faq.html)
- [IBM: What Is Structured Query Language?](https://www.ibm.com/think/topics/structured-query-language)
- [W3C: Veröffentlichungsgeschichte von Cascading Style Sheets, Level 1](https://www.w3.org/standards/history/CSS1/)
- [Smithsonian National Museum of American History: Logbuch mit Computer-Bug](https://americanhistory.si.edu/collections/object/nmah_334663)
- [Microsoft: Ein 10x schnelleres TypeScript, 11. März 2025](https://devblogs.microsoft.com/typescript/typescript-native-port/)
- [GitHub Docs: Grenzen der Inline-Vorschläge von Copilot und Verantwortung für deren Überprüfung](https://docs.github.com/en/copilot/responsible-use/inline-suggestions)

## Images

![Ein Mann mittleren Alters nutzt im Kurs einen Laptop, während eine Frau neben ihm auf ein Smartphone zeigt.](https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjEsInB1ciI6ImJsb2JfaWQifX0=--aa435b9d954b7e3cf19dca343a0d0fc5333fe68f/ai-73cc4d9e.webp)
![Eine Frau prüft einen geöffneten Server mit CPU-Kühlkörpern und GPU-Karte im Serverraum.](https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjcsInB1ciI6ImJsb2JfaWQifX0=--0a47db349b5b04ebfcd192a40d156aec0886d68c/ai-3af1935f.webp)