Vibe Coding (VC) ist eine Programmiertechnik, welche sich ganz auf Künstlicher Intelligenz (KI) zum Generieren des Quellcodes verlässt und somit Programmierung auch für Unerfahrene zugänglich macht. Damit soll natürliche Sprache, bzw. Schrift, die etablierten Programmiersprachen ersetzen. Aktuell soll sich VC besonders gut für das Prototyping von Anwendungen eignen.
Andrej Karpathy, Mitbegründer von OpenAI und ehemaliger KI-Leiter bei Tesla, beschrieb am 3. Februar 2025 „Vibe Coding“ als eine konversationsbasierte Methode, bei der Sprachbefehle verwendet werden, während die KI den eigentlichen Code generiert, heisst es in der Wikipedia.
Den Begriff 'Vibe Coding' kann man 'Gefühlter Programmierung' übersetzen, worin sich der natürlichsprachliche Ansatz ausdrückt.
Neben den bekannten Large Language Models spriessen spezialisierte VC-Modelle wie die Pilze aus dem Boden. Vertreter dieser Gattung sind Replit, Lovable und Github Spark. Ich habe zwei dieser Modelle ausprobiert, indem ich ihnen die Aufgabenstellung unseres Programmierwettbewerbs Parallele Anrufe vom Februar 2022 in den Rachen geworfen habe. Da die Aufgabenstellung bereits im Artikel enthalten ist (sogar mit Beispieldaten), konnte ich mir das Prompten sparen.
Die Programmieraufgabe ist relativ einfach. Es gilt lediglich, einen nicht trivialen Algorithmus zu entwerfen. Es braucht kein UI, keine Container, keine Sicherheit, kein installierbares Paket, keine Netzwerk-Komponenten und keine Fremd-Bibliotheken.
Erster Versuch: Perplexity
Der Prompt lautete: "Schreibe den Python-Code für die Aufgabe, die auf dieser Webseite beschrieben wird: https://gnulinux.ch/wettbewerb-parallele-anrufe".
Nach einigen Sekunden lieferte Perplexity diesen Code:
import csv
from datetime import datetime, timedelta
def parallele_anrufe(dateipfad):
anrufe = []
with open(dateipfad, 'r') as csvdatei:
csv_reader = csv.reader(csvdatei)
for zeile in csv_reader:
startzeit_str, dauer_str = zeile
startzeit = datetime.strptime(startzeit_str, '%d.%m.%Y %H:%M:%S')
dauer_teile = dauer_str.split(':')
dauer = timedelta(hours=int(dauer_teile[0]), minutes=int(dauer_teile[1]), seconds=int(dauer_teile[2]))
anrufe.append((startzeit, startzeit + dauer))
zeitpunkte = set()
for start, ende in anrufe:
zeitpunkte.add(start)
zeitpunkte.add(ende)
zeitpunkte = sorted(list(zeitpunkte))
maximale_parallele_gespräche = {}
for zeitpunkt in zeitpunkte:
parallele_gespräche = 0
for start, ende in anrufe:
if start <= zeitpunkt <= ende:
parallele_gespräche += 1
if parallele_gespräche in maximale_parallele_gespräche:
maximale_parallele_gespräche[parallele_gespräche] += 1
else:
maximale_parallele_gespräche[parallele_gespräche] = 1
sortierte_parallele_gespräche = sorted(maximale_parallele_gespräche.items(), reverse=True)
print("Parallele Gespräche")
for anzahl, häufigkeit in sortierte_parallele_gespräche:
print(anzahl)
# Beispielaufruf mit der CSV-Datei
dateipfad = 'gesprachsdaten.csv'
parallele_anrufe(dateipfad)
Auf den ersten Blick sieht das nicht schlecht aus; einmal davon abgesehen, dass der Code in deutscher Sprache (mit Umlauten) geschrieben ist und so gut wie keine Kommentare enthält. Von einer Header-Information (Wer, Warum, Was, Lizenz, Datum, Version, usw.) ist nichts zu sehen. Nun gut: läuft das Ding? Natürlich nicht, weil der Shebang und die main() fehlt. Die habe ich hinzugefügt.
Nach dem Aufruf des 'gevibten' Python-Skripts passiert ... nichts, keine Ausgabe, keine Fehlermeldung. Habe ich Lust den Vibe zu debuggen? Nein! Ich habe es trotzdem getan. Nach ein paar kleinen Korrekturen bei der Struktur und der Ausgabe läuft das Skript:
Parallele Gespräche:
Anzahl Häufigkeit
8 1
7 5
6 12
5 41
4 102
3 338
2 939
1 1349
Respekt! Das Ergebnis ist korrekt. Die Umsetzung der Aufgabe im Python-Code ist gut verständlich und unterscheidet sich nicht grundsätzlich von der Musterlösung. Die Musterlösung ist jedoch wesentlich eleganter als das KI-Geplapper.
Zweiter Versuch: Lovable
Dort muss man ein Konto erstellen, bevor man etwas generieren kann. Nachdem mein Account steht, habe ich denselben Prompt wie bei Perplexity verwendet. Lovable überlegt ca. 3 Minuten bevor eine Lösung auf dem Bildschirm erscheint.
Lovable hat die Aufgaben missverstanden und bietet überkandidelte Lösungen an. Auf der rechten Seite kann man beobachten, an welchen Stellen der Vibe Coding Service falsch abbiegt:
Dem erzeugten Code sehe ich auf den ersten Blick an, dass er nicht funktionieren wird, weshalb ich ihn nicht ausprobiert habe. Doch schauen wir einmal auf den sequenziellen Ansatz:
Was soll das sein? Ist es Azeri, Bambara, Dari, Esan, Fante, Kabardinisch, Tigrinya oder Zaza? Auf jeden Fall ist das kein Python. Auch diesen Code möchte ich nicht laufen lassen.
Nach dieser Erfahrung wollte ich mein Konto bei Lovable löschen. Leichter gesagt als getan. In letzter Zeit ist mir aufgefallen, dass sich Accounts bei neueren Webdiensten nicht ohne Weiteres löschen lassen. Bei Lovable muss man per E-Mail um die Löschung des Kontos bitten. Ich habe an abuse@lovable.dev geschrieben, weil ich keine andere E-Mail-Adresse gefunden habe. Was für eine Bruchbude!
Fazit
Nach diesen unterschiedlichen Testergebnissen sitze ich ratlos vor meiner Tastatur. Der Test mit Lovable war unterirdisch; das Ergebnis von Perplexity ganz ok. Wenn man von den fehlenden Kommentaren, der Verwendung der deutschen Sprache und den nötigen Anpassungen, um es lauffähig zu machen, einmal absieht, so stimmte zumindest der Algorithmus. Interessant fand ich, dass ich nichts prompten musste, sondern einfach den Link zum Wettbewerbsartikel auf die KI werfen konnte.
Im Gegensatz zum Referenzcode, den ich selbst für den Wettbewerb geschrieben habe, war ich zu faul, jede Zeile des generierten Codes verstehen zu wollen. Und darin sehe ich das Risiko. Wenn Du den Code nicht verstehst, bist Du nicht die Programmiererin, sondern der Programmierte.
Titelbild: https://pixabay.com/illustrations/ai-generated-robot-technology-8671121/
Quellen:
https://de.wikipedia.org/wiki/Vibe_Coding
Der Begriff "Vibe Coding" ist noch relativ neu. Man sollte da im Augenblick unterscheiden zwischen den "normalen" AI-Chatbots, die Code erstellen können und den vielen verschiedenen Erweiterungen (AddOns / PlugIns) die sich direkt in eine IDE, z.B. Visual Studio Code, einklinken können. Es macht schon einen großen komfortablen Unterschied direkt in einer IDE arbeiten zu können.
Beispiele:
Übersicht mit mehr als 800 Treffern: https://marketplace.visualstudio.com/search?term=tag%3Aai&target=VSCode
Als dritte Kategorie gibt es dann noch eigenständige Kombinationen aus IDE + AI. Dazu gehören die im Artikel genannten Replit und Lovable, wobei derzeit Cursor https://www.cursor.com/ & Bolt https://boltnew.ai/ bzw. https://bolt.new/ & Windsurf https://windsurfai.org/ mit zu den bekanntesten Angeboten zählen. Der neueste Zugang von IDE mit eingebauter AI ist TRAE https://www.trae.ai/ von Bytedance, den Besitzern von TikTok. Wobei klar ist, daß man all diesen Diensten faktisch komplett direkt in der Cloud programmiert. Selbstverständlich wollen alle daran Geld verdienen und so sollte man bei diesen Angeboten auf Abhängigkeit(en), Vendor-Lockins und Closed-Source Komponenten acht geben!
Die Shebang ist streng genommen kein Fehler. Die angegebene Website sagt NUR, dass der Code in Phyton oder als Shellscript eingereicht werden soll, NICHT dass es unter Linux laufen soll. Bei der Bash wären immerhin noch MacOS möglich, bei Python wird unter Windows keine Shebang benötigt. Und genau da kommen wir in mein Lieblingsthema hinein. Das, was jeder KI nennt, ist eben überhaupt nicht intelligent. Jeder intelligente Leser wusste sofort, dass das Ding unter Linux laufen sollte (Die Seite heisst GNU/Linux?!) nur die KI wusste es nicht. Weil sie nicht wirklich intelligent ist. Weil sie nicht wirklich denken kann. Die kann nur Sätze (oder in dem gefragten Anwendungsbeispile halt Code) recyclen.
Für kleinere Programmieraufgaben sollen meines Wissens die Modelle:
Claude 3.7 Sonnet und Claude 3.7 Sonnet mit eingeschaltetem Thingking, soll hier jedoch aktuell eine enorme Verbesserung darstellen. Es sollen größere Projekte mit mehrere Dateien und auf mehrere Ordner verteilte Projektstrukturen erstellt und geändert werden können. Der Umgang mit mehreren 10.000 Zeilen code soll damit sehr gut möglich sein.
Ich werde es vermutlich aus Interesse mal antesten.
Ich Persönlich finde, dass die Nutzung von machine learning models ein interessanter Ansatz sein kann um die Codequalität zu verbessern, Sicherheitslücken zu vermeiden oder zu finden und best practices von neuen Programmiersprachen zu erlernen. Was jedoch bleibt ist meiner Meinung nach, die Notwendigkeit, dass generierter Code immer komplett vom Nutzer des Tools gelesen und verstanden werden muss. Denn nur so kann man sicher sein, das kein Unfug erstellt wurde.