{"content_id":"zkrgx4ojs2","slug":"vibe-coding-programming-language-basics","locale":"de","schema_type":"TechArticle","category":"knowledge_base","category_name":"Wissensdatenbank","title":"Vibe Coding: Programmiersprachen für Einsteiger","summary":"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.","sponsorship_disclosure":null,"affiliate_disclosure":null,"commerce_disclosure":null,"author":{"name":"injoys","url":"https://injoys.com/ko/about"},"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."],"content_markdown":"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.\n\nDie Leistungsangaben beruhen auf der Veröffentlichung von Microsoft vom 11. März 2025.\n\n## Warum Sprachgrundlagen beim Vibe-Coding nötig sind\n\nVibe-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.\n\nSprachgrundlagen 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.\n\n- Ausführungsort: Browser, Server, Smartphone, innerhalb des Betriebssystems\n- Eingabe: vom Benutzer eingegebene Werte oder von außen empfangene Daten\n- Verarbeitung: Aufgaben des Programms wie Berechnungen, Suchen oder Klassifizieren\n- Ausgabe: Bildschirmanzeige, Dateierstellung, Datenspeicherung\n- Fehlerbedingungen: leere Eingaben, falsche Formate, Verbindungsabbrüche\n\n## Grundbegriffe: zuerst Variablen und Typen verstehen\n\nVariablen 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.\n\n| Begriff | Einfache Definition | Beispiel zur Beschreibung einer Funktion |\n| --- | --- | --- |\n| Variable | Mittel, um einen Wert zu benennen und darauf zuzugreifen | Name, unter dem ein Suchbegriff gespeichert wird |\n| Typ | Regeln zur Art eines Werts und zu den erlaubten Operationen | Mengen sind Zahlen, Titel sind Zeichenketten |\n| Bedingungsanweisung | Anweisung, die abhängig von einer Bedingung eine auszuführende Aufgabe auswählt | Speichern ablehnen, wenn der Titel leer ist |\n| Schleife | Anweisung, die dieselbe Aufgabe auf mehrere Elemente anwendet | Jeden Eintrag einer Liste auf dem Bildschirm anzeigen |\n| Funktion | Code, der für eine bestimmte Aufgabe gebündelt ist | Funktion zur Prüfung von Eingaben |\n| Datenstruktur | Art, Daten zu organisieren | Geordnete Liste, über Namen auffindbare Werte |\n| Objekt | Einheit, die zusammengehörige Zustände und Aktionen bündelt | Titel eines Beitrags und dessen Bearbeitungsfunktion |\n| Ausnahmebehandlung | Umgang mit Fehlern, die während der Ausführung auftreten | Fehlermeldung, wenn eine Datei nicht gelesen werden kann |\n| API | Vereinbarung zum Austausch von Funktionen oder Daten zwischen Programmen | Suchergebnisse beim Server anfordern |\n| Abhängigkeit | Externer Code oder externe Werkzeuge, die ein Programm nutzt | Bibliothek zur Verarbeitung von Datumsangaben |\n\nBei 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.\n\n## Warum der Wechsel von Maschinensprache zu höheren Programmiersprachen erfolgte\n\nDie 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.\n\nAssembler 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.\n\n| Sprache oder Entwicklung | Zu lösendes Problem | Wichtiger Begriff |\n| --- | --- | --- |\n| Maschinensprache·Assembler | Der Hardware die auszuführenden Aufgaben mitteilen | Direkte Bindung an den Befehlssatz |\n| Fortran | Wissenschaftliche Berechnungen ähnlich wie Formeln ausdrücken | Numerische Berechnungen und Compiler |\n| COBOL | Geschäftsdaten in einer gut lesbaren Form verarbeiten | Ausdrucksweise mit Schwerpunkt auf Buchführung und Transaktionsverarbeitung |\n| Lisp | Berechnungen mit Symbolen und Listen | Frühe KI-Forschung und funktionsorientierte Ausdrucksweise |\n| C | Systemsoftware effizient schreiben | Speicherkontrolle und Portabilität |\n| SQL | Daten in relationalen Datenbanken verarbeiten | Abfragen, die das gewünschte Ergebnis deklarieren |\n| C++ | Große Programme strukturieren und Ressourcen verwalten | Klassen und mehrere Programmierparadigmen |\n| Java | Portabilität zwischen Systemen mit unterschiedlichen Ausführungsumgebungen | JVM und Bytecode |\n\nFortran 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.\n\nC 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.\n\nObjektorientierung 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.\n\n## Der Unterschied zwischen Compiler und Interpreter\n\nEin 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.\n\nEin 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.\n\n| Begriff zur Ausführung | Aufgabe | Typisches Beispiel |\n| --- | --- | --- |\n| Vorabkompilierung | Zielcode vor der Ausführung erzeugen | Übliche Erstellung ausführbarer Dateien mit C·Rust |\n| Bytecode | Zwischenformat für Befehle, das von einer Ausführungsumgebung verarbeitet wird | Java-Bytecode, CPython-Bytecode |\n| Interpreter | Code oder Zwischenbefehle interpretieren und dabei ausführen | Ausführung von Bytecode in CPython |\n| JIT-Kompilierung | Benötigten Code während der Ausführung in Maschinensprache umwandeln | Verschiedene JVMs und JavaScript-Engines |\n| Laufzeitumgebung | Für die Programmausführung benötigte Funktionen bereitstellen | JVM, Node.js |\n\nCPython 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.\n\nDie 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.\n\n## Wie unterscheiden sich die Oberfläche und der Server im Web?\n\nDas 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.\n\nHTML 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.\n\n| Name | Kategorie | Hauptaufgabe |\n| --- | --- | --- |\n| HTML | Auszeichnungssprache | Dokumentstruktur wie Überschriften, Absätze und Eingabefelder |\n| CSS | Stylesheet-Sprache | Farben, Abstände, Anordnung auf dem Bildschirm |\n| JavaScript | Programmiersprache | Interaktionen im Browser und Verarbeitung auf dem Server |\n| TypeScript | Sprache, die JavaScript um ein Typsystem ergänzt | Fehlerprüfung vor der Ausführung und Codeverwaltung |\n| React | Bibliothek für Benutzeroberflächen | Oberflächen aus wiederverwendbaren Komponenten erstellen |\n| Node.js | JavaScript-Laufzeitumgebung | JavaScript außerhalb des Browsers ausführen |\n| Next.js | Auf React basierendes Framework | Seitenstruktur und Serverfunktionen von Web-Apps |\n| PHP | Programmiersprache | Dynamische Webantworten auf dem Server erzeugen |\n| SQL | Datenbanksprache | Daten abfragen, hinzufügen, ändern und löschen |\n\nReact, 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.\n\n## Sprachen nach Einsatzzweck vergleichen\n\nWä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.\n\n| Gewünschtes Ergebnis | Zuerst zu prüfende Sprache | Vor der Auswahl zu klären |\n| --- | --- | --- |\n| Web-App zur Nutzung im Browser | JavaScript·TypeScript | HTML·CSS-Grundlagen und Werkzeuge für die Oberflächengestaltung |\n| Dateien organisieren·Arbeitsabläufe automatisieren | Python | Format der Eingabedateien und Bereitstellungsumgebung |\n| Datenanalyse·Nutzung von KI-Modellen | Python | Benötigte Analyse- und Modellbibliotheken |\n| Netzwerkserver·Betriebswerkzeuge | Go | Struktur der nebenläufigen Verarbeitung und Anbindung vorhandener Systeme |\n| JVM-basierte Geschäftssysteme | Java·Kotlin | Kompatibilität mit vorhandenem Code und Bibliotheken |\n| Apps mit Schwerpunkt auf iOS | Swift | Entwicklungswerkzeuge von Apple und Plattformfunktionen |\n| Apps mit Schwerpunkt auf Android | Kotlin | Android-Entwicklungswerkzeuge und Struktur der vorhandenen App |\n| Systeme, die Speicherkontrolle erfordern | C·C++·Rust | Leistungsanforderungen und Möglichkeiten zur Sicherheitsprüfung |\n| Optimierung von CPU·GPU-Berechnungen | Mojo | Unterstützte Hardware und benötigte Berechnungsfunktionen |\n| Verarbeitung relationaler Daten | SQL | Syntaxunterschiede zwischen Datenbankprodukten |\n\nDie 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.\n\nGo 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.\n\n## Die Unterschiede zwischen TypeScript, Rust und Mojo\n\nTypeScript, 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.\n\n| Vergleichskriterium | TypeScript | Rust | Mojo |\n| --- | --- | --- | --- |\n| Zentrales Anliegen | Typprüfung und Codeverwaltung | Speichersicherheit und Systemkontrolle | Hochleistungsberechnungen auf CPU·GPU |\n| Typische Verwendung | Web-Apps·Serveranwendungen | Systemwerkzeuge·leistungsorientierte Komponenten | KI-Infrastruktur·Berechnungskernel |\n| Zuerst zu verstehende Konzepte | JavaScript und Datentypen | Besitz·Ausleihen·Lebensdauer |\n| Gesondert zu prüfende Aspekte | Externe Eingaben und Geschäftsregeln | unsafe-Code und Logikfehler | Python-Anbindung und Hardwareunterstützung |\n\n### Die Typprüfung von TypeScript\n\nTypeScript 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.\n\nSie 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.\n\n### Besitz und Speichersicherheit in Rust\n\nBesitz 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.\n\nDie 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.\n\n### Das Verhältnis von Mojo und Python\n\nMojo 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.\n\nGehen 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.\n\n## Häufige Fehler bei der Beschreibung von Sprachen\n\nBei 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.\n\n| Häufige Aussage | Korrekte Einordnung |\n| --- | --- |\n| JavaScript ist die Webversion von Java | Es sind unterschiedliche Sprachen |\n| HTML und CSS erschienen beide 1991 | Die W3C-Empfehlung für CSS1 stammt vom 17. Dezember 1996 |\n| Kotlin wurde von Google entwickelt | Entwickler ist JetBrains, Google unterstützt die Sprache auf Android |\n| C-Code läuft nach erneuter Kompilierung überall | Betriebssystem- und hardwareabhängige Teile müssen möglicherweise angepasst werden |\n| Python steht derzeit auf Platz 1 der Beliebtheitsskala | Eine Beurteilung erfordert Angaben zur erhebenden Organisation, zum Zeitpunkt und zur Auswertungsmethode |\n| Rust löst alle Sicherheitsprobleme | Speichersicherheit und die Prüfung von Zugriffsberechtigungen sind unterschiedliche Fragen |\n| Mojo beschleunigt alle Python-Aufgaben | Messungen je nach Aufgabe, Implementierung und Hardware sind nötig |\n| Der Begriff bug entstand bei dem Vorfall mit einem Insekt | Der Vorfall machte einen bereits verwendeten Begriff weithin bekannt |\n\nDer 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.\n\n## Wie sollte man Leistungsangaben lesen?\n\nLeistungsangaben 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.\n\nMicrosoft 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.\n\n| Messgegenstand | Bisherige Implementierung | Native Implementierung | Veröffentlichter Geschwindigkeitsgewinn |\n| --- | --- | --- | --- |\n| TypeScript-Kompilierung der VS Code-Codebasis | 77.8 Sekunden | 7.5 Sekunden | Faktor 10.4 |\n\nUnter 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.\n\nWenden 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.\n\n## Typprüfung und Validierung externer Eingaben\n\nAuch 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.\n\nStellen 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.\n\n| Prüfschritt | Prüfgegenstand | Nach bestandener Prüfung verbleibende Frage |\n| --- | --- | --- |\n| Typprüfung | Verwendung von Typen innerhalb des Codes | Welche Werte tatsächlich von außen eingehen |\n| Eingabevalidierung | Datenformat und zulässiger Wertebereich | Ob die Aktion dem Benutzer erlaubt ist |\n| Berechtigungsprüfung | Zugriffsberechtigungen des Anfragenden | Ob das Ergebnis den Geschäftsregeln entspricht |\n| Funktionstest | Tatsächliche Ergebnisse für erwartete Eingaben | Nicht getestete Bedingungen |\n\nDiese 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.\n\n## So beschreiben Sie der KI eine Funktion\n\nGeben 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.\n\n1. Geben Sie die vorgesehene Umgebung an.\n2. Beschreiben Sie die Form der zu verarbeitenden Eingaben.\n3. Legen Sie das Ergebnis für gültige Eingaben fest.\n4. Legen Sie fest, wie leere Werte und fehlerhafte Eingaben behandelt werden sollen.\n5. Bitten Sie zugleich um eine Begründung der Änderungen und um eine Prüfmethode.\n\nDas 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.\n\n```text\nPrüfen Sie zuerst die Sprache und die Ausführungsumgebung des vorhandenen Projekts.\nLesen Sie Zeilen mit einem Titel aus einer CSV-Datei und zeigen Sie sie als Liste an.\nZeigen Sie eine Fehlermeldung an, wenn erforderliche Spalten fehlen.\nWeisen Sie gesondert auf Zeilen mit leerem Titel hin.\nTrennen Sie den Code zur Validierung externer Eingaben vom Code für die Bildschirmanzeige.\nPrüfen Sie zuerst, ob sich die Umsetzung mit den vorhandenen Abhängigkeiten realisieren lässt.\nErklären Sie die Änderungen und die Testmethode.\n```\n\nGeben 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.\n\n## Kriterien für den Einstieg und die Auswahl von Schulungen\n\nBeim 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.\n\n1. Wählen Sie eine Sprache, die zum gewünschten Ergebnis passt.\n2. Lernen Sie Variablen, Typen, Bedingungen, Schleifen und Funktionen kennen.\n3. Schreiben Sie eine kleine Funktion und vergleichen Sie die Ausführungsergebnisse.\n4. Geben Sie fehlerhafte Eingaben ein und prüfen Sie das Verhalten im Fehlerfall.\n5. Erklären Sie mit eigenen Worten, warum Sie den Code geändert haben.\n\nPrü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.\n\n- Codeerklärung: Erläuterung der Eingaben und Ausgaben einer erzeugten Funktion\n- Fehlerbehandlung: Übungen zum Lesen von Fehlermeldungen und zum Eingrenzen der Ursache\n- Datenvalidierung: Beispiele zum Umgang mit externen Eingaben und Fehlerbedingungen\n- Reproduzierbarkeit: Anleitungen für eine erneute Ausführung in derselben Umgebung\n\nDie 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.","content_html":"\u003cp\u003eFü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.\u003c/p\u003e\n\u003cp\u003eDie Leistungsangaben beruhen auf der Veröffentlichung von Microsoft vom 11. März 2025.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#warum-sprachgrundlagen-beim-vibe-coding-n%C3%B6tig-sind\" class=\"anchor\" id=\"warum-sprachgrundlagen-beim-vibe-coding-nötig-sind\"\u003e\u003c/a\u003eWarum Sprachgrundlagen beim Vibe-Coding nötig sind\u003c/h2\u003e\n\u003cp\u003eVibe-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.\u003c/p\u003e\n\u003cp\u003eSprachgrundlagen 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.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAusführungsort: Browser, Server, Smartphone, innerhalb des Betriebssystems\u003c/li\u003e\n\u003cli\u003eEingabe: vom Benutzer eingegebene Werte oder von außen empfangene Daten\u003c/li\u003e\n\u003cli\u003eVerarbeitung: Aufgaben des Programms wie Berechnungen, Suchen oder Klassifizieren\u003c/li\u003e\n\u003cli\u003eAusgabe: Bildschirmanzeige, Dateierstellung, Datenspeicherung\u003c/li\u003e\n\u003cli\u003eFehlerbedingungen: leere Eingaben, falsche Formate, Verbindungsabbrüche\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\n\u003ca href=\"#grundbegriffe-zuerst-variablen-und-typen-verstehen\" class=\"anchor\" id=\"grundbegriffe-zuerst-variablen-und-typen-verstehen\"\u003e\u003c/a\u003eGrundbegriffe: zuerst Variablen und Typen verstehen\u003c/h2\u003e\n\u003cp\u003eVariablen 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBegriff\u003c/th\u003e\n\u003cth\u003eEinfache Definition\u003c/th\u003e\n\u003cth\u003eBeispiel zur Beschreibung einer Funktion\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eVariable\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eMittel, um einen Wert zu benennen und darauf zuzugreifen\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eName, unter dem ein Suchbegriff gespeichert wird\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eTyp\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eRegeln zur Art eines Werts und zu den erlaubten Operationen\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eMengen sind Zahlen, Titel sind Zeichenketten\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eBedingungsanweisung\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eAnweisung, die abhängig von einer Bedingung eine auszuführende Aufgabe auswählt\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eSpeichern ablehnen, wenn der Titel leer ist\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eSchleife\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eAnweisung, die dieselbe Aufgabe auf mehrere Elemente anwendet\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eJeden Eintrag einer Liste auf dem Bildschirm anzeigen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eFunktion\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eCode, der für eine bestimmte Aufgabe gebündelt ist\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eFunktion zur Prüfung von Eingaben\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eDatenstruktur\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eArt, Daten zu organisieren\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eGeordnete Liste, über Namen auffindbare Werte\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eObjekt\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eEinheit, die zusammengehörige Zustände und Aktionen bündelt\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eTitel eines Beitrags und dessen Bearbeitungsfunktion\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eAusnahmebehandlung\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eUmgang mit Fehlern, die während der Ausführung auftreten\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eFehlermeldung, wenn eine Datei nicht gelesen werden kann\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eAPI\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eVereinbarung zum Austausch von Funktionen oder Daten zwischen Programmen\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eSuchergebnisse beim Server anfordern\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff\"\u003eAbhängigkeit\u003c/td\u003e\n\u003ctd data-label=\"Einfache Definition\"\u003eExterner Code oder externe Werkzeuge, die ein Programm nutzt\u003c/td\u003e\n\u003ctd data-label=\"Beispiel zur Beschreibung einer Funktion\"\u003eBibliothek zur Verarbeitung von Datumsangaben\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eBei 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#warum-der-wechsel-von-maschinensprache-zu-h%C3%B6heren-programmiersprachen-erfolgte\" class=\"anchor\" id=\"warum-der-wechsel-von-maschinensprache-zu-höheren-programmiersprachen-erfolgte\"\u003e\u003c/a\u003eWarum der Wechsel von Maschinensprache zu höheren Programmiersprachen erfolgte\u003c/h2\u003e\n\u003cp\u003eDie 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.\u003c/p\u003e\n\u003cp\u003eAssembler 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eSprache oder Entwicklung\u003c/th\u003e\n\u003cth\u003eZu lösendes Problem\u003c/th\u003e\n\u003cth\u003eWichtiger Begriff\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eMaschinensprache·Assembler\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003eDer Hardware die auszuführenden Aufgaben mitteilen\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eDirekte Bindung an den Befehlssatz\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eFortran\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003eWissenschaftliche Berechnungen ähnlich wie Formeln ausdrücken\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eNumerische Berechnungen und Compiler\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eCOBOL\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003eGeschäftsdaten in einer gut lesbaren Form verarbeiten\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eAusdrucksweise mit Schwerpunkt auf Buchführung und Transaktionsverarbeitung\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eLisp\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003eBerechnungen mit Symbolen und Listen\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eFrühe KI-Forschung und funktionsorientierte Ausdrucksweise\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eC\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003eSystemsoftware effizient schreiben\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eSpeicherkontrolle und Portabilität\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003eDaten in relationalen Datenbanken verarbeiten\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eAbfragen, die das gewünschte Ergebnis deklarieren\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eC++\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003eGroße Programme strukturieren und Ressourcen verwalten\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eKlassen und mehrere Programmierparadigmen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Sprache oder Entwicklung\"\u003eJava\u003c/td\u003e\n\u003ctd data-label=\"Zu lösendes Problem\"\u003ePortabilität zwischen Systemen mit unterschiedlichen Ausführungsumgebungen\u003c/td\u003e\n\u003ctd data-label=\"Wichtiger Begriff\"\u003eJVM und Bytecode\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eFortran 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.\u003c/p\u003e\n\u003cp\u003eC 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.\u003c/p\u003e\n\u003cp\u003eObjektorientierung 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#der-unterschied-zwischen-compiler-und-interpreter\" class=\"anchor\" id=\"der-unterschied-zwischen-compiler-und-interpreter\"\u003e\u003c/a\u003eDer Unterschied zwischen Compiler und Interpreter\u003c/h2\u003e\n\u003cp\u003eEin 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.\u003c/p\u003e\n\u003cp\u003eEin 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eBegriff zur Ausführung\u003c/th\u003e\n\u003cth\u003eAufgabe\u003c/th\u003e\n\u003cth\u003eTypisches Beispiel\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff zur Ausführung\"\u003eVorabkompilierung\u003c/td\u003e\n\u003ctd data-label=\"Aufgabe\"\u003eZielcode vor der Ausführung erzeugen\u003c/td\u003e\n\u003ctd data-label=\"Typisches Beispiel\"\u003eÜbliche Erstellung ausführbarer Dateien mit C·Rust\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff zur Ausführung\"\u003eBytecode\u003c/td\u003e\n\u003ctd data-label=\"Aufgabe\"\u003eZwischenformat für Befehle, das von einer Ausführungsumgebung verarbeitet wird\u003c/td\u003e\n\u003ctd data-label=\"Typisches Beispiel\"\u003eJava-Bytecode, CPython-Bytecode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff zur Ausführung\"\u003eInterpreter\u003c/td\u003e\n\u003ctd data-label=\"Aufgabe\"\u003eCode oder Zwischenbefehle interpretieren und dabei ausführen\u003c/td\u003e\n\u003ctd data-label=\"Typisches Beispiel\"\u003eAusführung von Bytecode in CPython\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff zur Ausführung\"\u003eJIT-Kompilierung\u003c/td\u003e\n\u003ctd data-label=\"Aufgabe\"\u003eBenötigten Code während der Ausführung in Maschinensprache umwandeln\u003c/td\u003e\n\u003ctd data-label=\"Typisches Beispiel\"\u003eVerschiedene JVMs und JavaScript-Engines\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Begriff zur Ausführung\"\u003eLaufzeitumgebung\u003c/td\u003e\n\u003ctd data-label=\"Aufgabe\"\u003eFür die Programmausführung benötigte Funktionen bereitstellen\u003c/td\u003e\n\u003ctd data-label=\"Typisches Beispiel\"\u003eJVM, Node.js\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eCPython 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.\u003c/p\u003e\n\u003cp\u003eDie 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#wie-unterscheiden-sich-die-oberfl%C3%A4che-und-der-server-im-web\" class=\"anchor\" id=\"wie-unterscheiden-sich-die-oberfläche-und-der-server-im-web\"\u003e\u003c/a\u003eWie unterscheiden sich die Oberfläche und der Server im Web?\u003c/h2\u003e\n\u003cp\u003eDas 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.\u003c/p\u003e\n\u003cp\u003eHTML 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eKategorie\u003c/th\u003e\n\u003cth\u003eHauptaufgabe\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eHTML\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eAuszeichnungssprache\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eDokumentstruktur wie Überschriften, Absätze und Eingabefelder\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eCSS\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eStylesheet-Sprache\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eFarben, Abstände, Anordnung auf dem Bildschirm\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eJavaScript\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eProgrammiersprache\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eInteraktionen im Browser und Verarbeitung auf dem Server\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eTypeScript\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eSprache, die JavaScript um ein Typsystem ergänzt\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eFehlerprüfung vor der Ausführung und Codeverwaltung\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eReact\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eBibliothek für Benutzeroberflächen\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eOberflächen aus wiederverwendbaren Komponenten erstellen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eNode.js\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eJavaScript-Laufzeitumgebung\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eJavaScript außerhalb des Browsers ausführen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eNext.js\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eAuf React basierendes Framework\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eSeitenstruktur und Serverfunktionen von Web-Apps\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003ePHP\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eProgrammiersprache\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eDynamische Webantworten auf dem Server erzeugen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Name\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"Kategorie\"\u003eDatenbanksprache\u003c/td\u003e\n\u003ctd data-label=\"Hauptaufgabe\"\u003eDaten abfragen, hinzufügen, ändern und löschen\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eReact, 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#sprachen-nach-einsatzzweck-vergleichen\" class=\"anchor\" id=\"sprachen-nach-einsatzzweck-vergleichen\"\u003e\u003c/a\u003eSprachen nach Einsatzzweck vergleichen\u003c/h2\u003e\n\u003cp\u003eWä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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eGewünschtes Ergebnis\u003c/th\u003e\n\u003cth\u003eZuerst zu prüfende Sprache\u003c/th\u003e\n\u003cth\u003eVor der Auswahl zu klären\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eWeb-App zur Nutzung im Browser\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eJavaScript·TypeScript\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eHTML·CSS-Grundlagen und Werkzeuge für die Oberflächengestaltung\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eDateien organisieren·Arbeitsabläufe automatisieren\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eFormat der Eingabedateien und Bereitstellungsumgebung\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eDatenanalyse·Nutzung von KI-Modellen\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eBenötigte Analyse- und Modellbibliotheken\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eNetzwerkserver·Betriebswerkzeuge\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eGo\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eStruktur der nebenläufigen Verarbeitung und Anbindung vorhandener Systeme\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eJVM-basierte Geschäftssysteme\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eJava·Kotlin\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eKompatibilität mit vorhandenem Code und Bibliotheken\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eApps mit Schwerpunkt auf iOS\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eSwift\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eEntwicklungswerkzeuge von Apple und Plattformfunktionen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eApps mit Schwerpunkt auf Android\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eKotlin\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eAndroid-Entwicklungswerkzeuge und Struktur der vorhandenen App\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eSysteme, die Speicherkontrolle erfordern\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eC·C++·Rust\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eLeistungsanforderungen und Möglichkeiten zur Sicherheitsprüfung\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eOptimierung von CPU·GPU-Berechnungen\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eMojo\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eUnterstützte Hardware und benötigte Berechnungsfunktionen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Gewünschtes Ergebnis\"\u003eVerarbeitung relationaler Daten\u003c/td\u003e\n\u003ctd data-label=\"Zuerst zu prüfende Sprache\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"Vor der Auswahl zu klären\"\u003eSyntaxunterschiede zwischen Datenbankprodukten\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eDie 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.\u003c/p\u003e\n\u003cp\u003eGo 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#die-unterschiede-zwischen-typescript-rust-und-mojo\" class=\"anchor\" id=\"die-unterschiede-zwischen-typescript-rust-und-mojo\"\u003e\u003c/a\u003eDie Unterschiede zwischen TypeScript, Rust und Mojo\u003c/h2\u003e\n\u003cp\u003eTypeScript, 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eVergleichskriterium\u003c/th\u003e\n\u003cth\u003eTypeScript\u003c/th\u003e\n\u003cth\u003eRust\u003c/th\u003e\n\u003cth\u003eMojo\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Vergleichskriterium\"\u003eZentrales Anliegen\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eTypprüfung und Codeverwaltung\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eSpeichersicherheit und Systemkontrolle\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eHochleistungsberechnungen auf CPU·GPU\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Vergleichskriterium\"\u003eTypische Verwendung\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eWeb-Apps·Serveranwendungen\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eSystemwerkzeuge·leistungsorientierte Komponenten\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eKI-Infrastruktur·Berechnungskernel\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Vergleichskriterium\"\u003eZuerst zu verstehende Konzepte\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eJavaScript und Datentypen\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eBesitz·Ausleihen·Lebensdauer\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Vergleichskriterium\"\u003eGesondert zu prüfende Aspekte\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eExterne Eingaben und Geschäftsregeln\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eunsafe-Code und Logikfehler\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003ePython-Anbindung und Hardwareunterstützung\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003ch3\u003e\n\u003ca href=\"#die-typpr%C3%BCfung-von-typescript\" class=\"anchor\" id=\"die-typprüfung-von-typescript\"\u003e\u003c/a\u003eDie Typprüfung von TypeScript\u003c/h3\u003e\n\u003cp\u003eTypeScript 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.\u003c/p\u003e\n\u003cp\u003eSie 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.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#besitz-und-speichersicherheit-in-rust\" class=\"anchor\" id=\"besitz-und-speichersicherheit-in-rust\"\u003e\u003c/a\u003eBesitz und Speichersicherheit in Rust\u003c/h3\u003e\n\u003cp\u003eBesitz 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.\u003c/p\u003e\n\u003cp\u003eDie 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.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#das-verh%C3%A4ltnis-von-mojo-und-python\" class=\"anchor\" id=\"das-verhältnis-von-mojo-und-python\"\u003e\u003c/a\u003eDas Verhältnis von Mojo und Python\u003c/h3\u003e\n\u003cp\u003eMojo 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.\u003c/p\u003e\n\u003cp\u003eGehen 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#h%C3%A4ufige-fehler-bei-der-beschreibung-von-sprachen\" class=\"anchor\" id=\"häufige-fehler-bei-der-beschreibung-von-sprachen\"\u003e\u003c/a\u003eHäufige Fehler bei der Beschreibung von Sprachen\u003c/h2\u003e\n\u003cp\u003eBei 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eHäufige Aussage\u003c/th\u003e\n\u003cth\u003eKorrekte Einordnung\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003eJavaScript ist die Webversion von Java\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eEs sind unterschiedliche Sprachen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003eHTML und CSS erschienen beide 1991\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eDie W3C-Empfehlung für CSS1 stammt vom 17. Dezember 1996\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003eKotlin wurde von Google entwickelt\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eEntwickler ist JetBrains, Google unterstützt die Sprache auf Android\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003eC-Code läuft nach erneuter Kompilierung überall\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eBetriebssystem- und hardwareabhängige Teile müssen möglicherweise angepasst werden\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003ePython steht derzeit auf Platz 1 der Beliebtheitsskala\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eEine Beurteilung erfordert Angaben zur erhebenden Organisation, zum Zeitpunkt und zur Auswertungsmethode\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003eRust löst alle Sicherheitsprobleme\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eSpeichersicherheit und die Prüfung von Zugriffsberechtigungen sind unterschiedliche Fragen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003eMojo beschleunigt alle Python-Aufgaben\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eMessungen je nach Aufgabe, Implementierung und Hardware sind nötig\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Häufige Aussage\"\u003eDer Begriff bug entstand bei dem Vorfall mit einem Insekt\u003c/td\u003e\n\u003ctd data-label=\"Korrekte Einordnung\"\u003eDer Vorfall machte einen bereits verwendeten Begriff weithin bekannt\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eDer 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#wie-sollte-man-leistungsangaben-lesen\" class=\"anchor\" id=\"wie-sollte-man-leistungsangaben-lesen\"\u003e\u003c/a\u003eWie sollte man Leistungsangaben lesen?\u003c/h2\u003e\n\u003cp\u003eLeistungsangaben 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.\u003c/p\u003e\n\u003cp\u003eMicrosoft 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMessgegenstand\u003c/th\u003e\n\u003cth\u003eBisherige Implementierung\u003c/th\u003e\n\u003cth\u003eNative Implementierung\u003c/th\u003e\n\u003cth\u003eVeröffentlichter Geschwindigkeitsgewinn\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Messgegenstand\"\u003eTypeScript-Kompilierung der VS Code-Codebasis\u003c/td\u003e\n\u003ctd data-label=\"Bisherige Implementierung\"\u003e77.8 Sekunden\u003c/td\u003e\n\u003ctd data-label=\"Native Implementierung\"\u003e7.5 Sekunden\u003c/td\u003e\n\u003ctd data-label=\"Veröffentlichter Geschwindigkeitsgewinn\"\u003eFaktor 10.4\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eUnter den veröffentlichten Bedingungen sank die Verarbeitungszeit auf \u003cstrong\u003e7.5 Sekunden\u003c/strong\u003e. Die Differenz ergibt eine Einsparung von 70.3 Sekunden pro Durchlauf. Das bedeutet nicht, dass alle Projekte dasselbe Ergebnis erzielen.\u003c/p\u003e\n\u003cp\u003eWenden 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#typpr%C3%BCfung-und-validierung-externer-eingaben\" class=\"anchor\" id=\"typprüfung-und-validierung-externer-eingaben\"\u003e\u003c/a\u003eTypprüfung und Validierung externer Eingaben\u003c/h2\u003e\n\u003cp\u003eAuch 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.\u003c/p\u003e\n\u003cp\u003eStellen 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.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003ePrüfschritt\u003c/th\u003e\n\u003cth\u003ePrüfgegenstand\u003c/th\u003e\n\u003cth\u003eNach bestandener Prüfung verbleibende Frage\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Prüfschritt\"\u003eTypprüfung\u003c/td\u003e\n\u003ctd data-label=\"Prüfgegenstand\"\u003eVerwendung von Typen innerhalb des Codes\u003c/td\u003e\n\u003ctd data-label=\"Nach bestandener Prüfung verbleibende Frage\"\u003eWelche Werte tatsächlich von außen eingehen\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Prüfschritt\"\u003eEingabevalidierung\u003c/td\u003e\n\u003ctd data-label=\"Prüfgegenstand\"\u003eDatenformat und zulässiger Wertebereich\u003c/td\u003e\n\u003ctd data-label=\"Nach bestandener Prüfung verbleibende Frage\"\u003eOb die Aktion dem Benutzer erlaubt ist\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Prüfschritt\"\u003eBerechtigungsprüfung\u003c/td\u003e\n\u003ctd data-label=\"Prüfgegenstand\"\u003eZugriffsberechtigungen des Anfragenden\u003c/td\u003e\n\u003ctd data-label=\"Nach bestandener Prüfung verbleibende Frage\"\u003eOb das Ergebnis den Geschäftsregeln entspricht\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"Prüfschritt\"\u003eFunktionstest\u003c/td\u003e\n\u003ctd data-label=\"Prüfgegenstand\"\u003eTatsächliche Ergebnisse für erwartete Eingaben\u003c/td\u003e\n\u003ctd data-label=\"Nach bestandener Prüfung verbleibende Frage\"\u003eNicht getestete Bedingungen\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eDiese 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#so-beschreiben-sie-der-ki-eine-funktion\" class=\"anchor\" id=\"so-beschreiben-sie-der-ki-eine-funktion\"\u003e\u003c/a\u003eSo beschreiben Sie der KI eine Funktion\u003c/h2\u003e\n\u003cp\u003eGeben 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.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eGeben Sie die vorgesehene Umgebung an.\u003c/li\u003e\n\u003cli\u003eBeschreiben Sie die Form der zu verarbeitenden Eingaben.\u003c/li\u003e\n\u003cli\u003eLegen Sie das Ergebnis für gültige Eingaben fest.\u003c/li\u003e\n\u003cli\u003eLegen Sie fest, wie leere Werte und fehlerhafte Eingaben behandelt werden sollen.\u003c/li\u003e\n\u003cli\u003eBitten Sie zugleich um eine Begründung der Änderungen und um eine Prüfmethode.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eDas 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.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003ePrüfen Sie zuerst die Sprache und die Ausführungsumgebung des vorhandenen Projekts.\n\u003c/span\u003e\u003cspan\u003eLesen Sie Zeilen mit einem Titel aus einer CSV-Datei und zeigen Sie sie als Liste an.\n\u003c/span\u003e\u003cspan\u003eZeigen Sie eine Fehlermeldung an, wenn erforderliche Spalten fehlen.\n\u003c/span\u003e\u003cspan\u003eWeisen Sie gesondert auf Zeilen mit leerem Titel hin.\n\u003c/span\u003e\u003cspan\u003eTrennen Sie den Code zur Validierung externer Eingaben vom Code für die Bildschirmanzeige.\n\u003c/span\u003e\u003cspan\u003ePrüfen Sie zuerst, ob sich die Umsetzung mit den vorhandenen Abhängigkeiten realisieren lässt.\n\u003c/span\u003e\u003cspan\u003eErklären Sie die Änderungen und die Testmethode.\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eGeben 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.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#kriterien-f%C3%BCr-den-einstieg-und-die-auswahl-von-schulungen\" class=\"anchor\" id=\"kriterien-für-den-einstieg-und-die-auswahl-von-schulungen\"\u003e\u003c/a\u003eKriterien für den Einstieg und die Auswahl von Schulungen\u003c/h2\u003e\n\u003cp\u003eBeim 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.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWählen Sie eine Sprache, die zum gewünschten Ergebnis passt.\u003c/li\u003e\n\u003cli\u003eLernen Sie Variablen, Typen, Bedingungen, Schleifen und Funktionen kennen.\u003c/li\u003e\n\u003cli\u003eSchreiben Sie eine kleine Funktion und vergleichen Sie die Ausführungsergebnisse.\u003c/li\u003e\n\u003cli\u003eGeben Sie fehlerhafte Eingaben ein und prüfen Sie das Verhalten im Fehlerfall.\u003c/li\u003e\n\u003cli\u003eErklären Sie mit eigenen Worten, warum Sie den Code geändert haben.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003ePrü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.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eCodeerklärung: Erläuterung der Eingaben und Ausgaben einer erzeugten Funktion\u003c/li\u003e\n\u003cli\u003eFehlerbehandlung: Übungen zum Lesen von Fehlermeldungen und zum Eingrenzen der Ursache\u003c/li\u003e\n\u003cli\u003eDatenvalidierung: Beispiele zum Umgang mit externen Eingaben und Fehlerbedingungen\u003c/li\u003e\n\u003cli\u003eReproduzierbarkeit: Anleitungen für eine erneute Ausführung in derselben Umgebung\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDie 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.\u003c/p\u003e\n","tags":["Generative KI","Prompt Engineering","KI Entwicklung","KI Coding","Entwicklungstools"],"faqs":[{"question":"Muss ich alle Programmiersprachen lernen, bevor ich mit Vibe-Coding beginne?","answer":"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."},{"question":"Womit sollte ich in der Webentwicklung anfangen: JavaScript oder Python?","answer":"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."},{"question":"Brauche ich keine JavaScript-Kenntnisse, wenn ich TypeScript verwende?","answer":"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."},{"question":"Muss ich in TypeScript für jede Variable einen Typ angeben?","answer":"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."},{"question":"Sind React und Node.js auch Programmiersprachen?","answer":"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."},{"question":"Wird Python-Quellcode Zeile für Zeile übersetzt und ausgeführt?","answer":"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."},{"question":"Ist bei der Verwendung von Rust keine Sicherheitsprüfung nötig?","answer":"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."},{"question":"Ist Mojo eine neue Version von Python?","answer":"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."},{"question":"Brauche ich unbedingt eine GPU, um Mojo zu verwenden?","answer":"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."},{"question":"Bedeutet Nebenläufigkeit in Go dasselbe wie Parallelverarbeitung?","answer":"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."},{"question":"Wurde Kotlin von Google entwickelt?","answer":"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."},{"question":"Wird auch die App im gleichen Verhältnis schneller, wenn der TypeScript-Compiler schneller wird?","answer":"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."},{"question":"Ist von KI erzeugter Code fertig, wenn er die Typprüfung besteht?","answer":"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."},{"question":"Nach welchen Kriterien wählt man eine Schulung zum Vibe-Coding aus?","answer":"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":[{"url":"https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html","title":"Offizielle TypeScript-Dokumentation: TypeScript for JavaScript Programmers","type":"source"},{"url":"https://www.typescriptlang.org/docs/handbook/2/basic-types","title":"TypeScript Handbook: The Basics, Typprüfung und Entfernung von Typinformationen","type":"source"},{"url":"https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html","title":"The Rust Programming Language: What Is Ownership?","type":"source"},{"url":"https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html","title":"The Rust Programming Language: Unsafe Rust","type":"source"},{"url":"https://docs.modular.com/mojo/manual/","title":"Mojo Manual: Sprachüberblick und Python-Anbindung","type":"source"},{"url":"https://docs.modular.com/mojo/requirements/","title":"Mojo System Requirements: Voraussetzungen für die CPU- und GPU-Unterstützung","type":"source"},{"url":"https://docs.python.org/3/glossary.html","title":"Offizielles Python-Glossar: Bytecode und Konzepte zur Ausführung","type":"source"},{"url":"https://numpy.org/doc/2.0/building/index.html","title":"NumPy 2.0 Manual: Building from source","type":"source"},{"url":"https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript","title":"MDN: What is JavaScript?","type":"source"},{"url":"https://nodejs.org/learn/getting-started/introduction-to-nodejs","title":"Offizielle Node.js-Dokumentation: Introduction to Node.js","type":"source"},{"url":"https://react.dev/","title":"Offizielle React-Dokumentation: Bibliothek für Benutzeroberflächen","type":"source"},{"url":"https://nextjs.org/docs","title":"Offizielle Next.js-Dokumentation","type":"source"},{"url":"https://www.php.net/manual/en/introduction.php","title":"PHP Manual: Introduction","type":"source"},{"url":"https://go.dev/doc/faq","title":"Offizielle Go-FAQ: Entwurfsziele und Ausführungseigenschaften","type":"source"},{"url":"https://go.dev/blog/waza-talk","title":"Offizieller Go-Blog: Concurrency is not parallelism","type":"source"},{"url":"https://kotlinlang.org/docs/faq.html","title":"Offizielle Kotlin-FAQ: Entwickler und Zielplattformen","type":"source"},{"url":"https://developer.android.com/kotlin","title":"Android Developers: Kotlin and Android","type":"source"},{"url":"https://www.swift.org/about/","title":"Swift.org: About Swift","type":"source"},{"url":"https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html","title":"Oracle Java Tutorials: About the Java Technology","type":"source"},{"url":"https://www.ibm.com/history/fortran","title":"IBM History: Fortran","type":"source"},{"url":"https://www-formal.stanford.edu/jmc/history/lisp/node2.html","title":"John McCarthy: LISP prehistory","type":"source"},{"url":"https://bitsavers.computerhistory.org/magazines/Datamation/196703.pdf","title":"Howard Bromberg: The COBOL Conclusion, Datamation März 1967","type":"source"},{"url":"https://www.nokia.com/bell-labs/about/dennis-m-ritchie/chist.html","title":"Dennis Ritchie: The Development of the C Language","type":"source"},{"url":"https://www.stroustrup.com/bs_faq.html","title":"Bjarne Stroustrup FAQ: C++ und Objektorientierung","type":"source"},{"url":"https://www.ibm.com/think/topics/structured-query-language","title":"IBM: What Is Structured Query Language?","type":"source"},{"url":"https://www.w3.org/standards/history/CSS1/","title":"W3C: Veröffentlichungsgeschichte von Cascading Style Sheets, Level 1","type":"data_point"},{"url":"https://americanhistory.si.edu/collections/object/nmah_334663","title":"Smithsonian National Museum of American History: Logbuch mit Computer-Bug","type":"source"},{"url":"https://devblogs.microsoft.com/typescript/typescript-native-port/","title":"Microsoft: Ein 10x schnelleres TypeScript, 11. März 2025","type":"data_point"},{"url":"https://docs.github.com/en/copilot/responsible-use/inline-suggestions","title":"GitHub Docs: Grenzen der Inline-Vorschläge von Copilot und Verantwortung für deren Überprüfung","type":"source"}],"images":[{"id":2241,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjEsInB1ciI6ImJsb2JfaWQifX0=--aa435b9d954b7e3cf19dca343a0d0fc5333fe68f/ai-73cc4d9e.webp","is_representative":true,"generation_method":"ai_photo","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"실습 교실에서 중년 남성이 노트북을 사용하고 옆의 여성이 탁자 위 스마트폰을 가리키고 있다.","caption":"AI가 생성한 코드는 실행과 테스트로 요구사항에 맞는지 확인해야 합니다.","description":null},"en":{"alt":"A middle-aged man uses a laptop in a classroom while a woman beside him points to a smartphone on the table.","caption":"AI-generated code must be run and tested to verify that it meets the requirements.","description":null},"ja":{"alt":"実習教室で中年の男性がノートパソコンを操作し、隣の女性が机の上のスマートフォンを指さしている。","caption":"AIが生成したコードは、実行とテストで要件を満たしているか確認する必要があります。","description":null},"es":{"alt":"Un hombre de mediana edad usa un portátil en clase mientras una mujer señala un móvil sobre la mesa.","caption":"El código generado por IA debe ejecutarse y probarse para comprobar que cumple los requisitos.","description":null},"id":{"alt":"Pria paruh baya menggunakan laptop di kelas, sementara perempuan di sebelahnya menunjuk ponsel di meja.","caption":"Kode buatan AI harus dijalankan dan diuji untuk memastikan kesesuaiannya dengan kebutuhan.","description":null},"pt":{"alt":"Um homem de meia-idade usa um notebook em aula enquanto uma mulher aponta para um celular sobre a mesa.","caption":"O código gerado por IA deve ser executado e testado para verificar se atende aos requisitos.","description":null},"zh-hant":{"alt":"實作教室裡，一名中年男子操作筆記型電腦，身旁的女子指著桌上的智慧型手機。","caption":"AI 生成的程式碼必須透過執行與測試，確認是否符合需求。","description":null},"de":{"alt":"Ein Mann mittleren Alters nutzt im Kurs einen Laptop, während eine Frau neben ihm auf ein Smartphone zeigt.","caption":"KI-generierter Code muss ausgeführt und getestet werden, um zu prüfen, ob er die Anforderungen erfüllt.","description":null}}},{"id":2242,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjcsInB1ciI6ImJsb2JfaWQifX0=--0a47db349b5b04ebfcd192a40d156aec0886d68c/ai-3af1935f.webp","is_representative":false,"generation_method":"ai_semi","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"서버실에서 CPU 방열판과 GPU 카드가 드러난 서버 내부를 살펴보는 여성","caption":"Mojo는 CPU와 GPU의 고성능 연산을 겨냥한 언어입니다.","description":null},"en":{"alt":"A woman inspects an open server with exposed CPU heatsinks and a GPU card in a server room.","caption":"Mojo targets high-performance computing on CPUs and GPUs.","description":null},"ja":{"alt":"サーバールームで、CPUヒートシンクとGPUカードが見えるサーバー内部を確認する女性","caption":"MojoはCPUとGPUでの高性能な演算を目指した言語です。","description":null},"es":{"alt":"Una mujer revisa un servidor abierto con disipadores de CPU y una tarjeta GPU en una sala de servidores.","caption":"Mojo está orientado a la computación de alto rendimiento en CPU y GPU.","description":null},"id":{"alt":"Seorang perempuan memeriksa server terbuka dengan heatsink CPU dan kartu GPU di ruang server.","caption":"Mojo ditujukan untuk komputasi berkinerja tinggi pada CPU dan GPU.","description":null},"pt":{"alt":"Uma mulher examina um servidor aberto com dissipadores de CPU e uma placa GPU em uma sala de servidores.","caption":"Mojo é voltada à computação de alto desempenho em CPUs e GPUs.","description":null},"zh-hant":{"alt":"一名女性在伺服器機房檢查打開的伺服器，內部可見 CPU 散熱器與 GPU 卡","caption":"Mojo 是以 CPU 與 GPU 高效能運算為目標的程式語言。","description":null},"de":{"alt":"Eine Frau prüft einen geöffneten Server mit CPU-Kühlkörpern und GPU-Karte im Serverraum.","caption":"Mojo ist auf Hochleistungsberechnungen mit CPUs und GPUs ausgerichtet.","description":null}}}],"published_at":"2026-10-29T14:25:12+09:00","updated_at":"2026-10-29T14:25:12+09:00","license":"cc_by","translation_status":"reviewed","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant","de"],"url":"https://injoys.com/en/articles/vibe-coding-programming-language-basics"}