Coding Assistenten
Persönlicher Erfahrungsbericht - Einsatz verschiedener KI Coding Assistenten bei privaten Projekten.
06.09.2024
Coding Assistenten
Hallo zusammen,
Selbstverständlich ist der KI-Hype auch an mir nicht spurlos vorübergegangen, und natürlich wollte ich wissen, ob Softwareentwickler in naher Zukunft durch KI-Softwareentwickler, wie z.B. Devin 😉, ersetzt werden können. Da ich in meiner Freizeit an privaten Softwareprojekten arbeite, habe ich mir gedacht, ich könnte mal schauen, wie gut die aktuell verfügbaren Tools mich bei meinen privaten Projekten unterstützen können.
Kurz zu meinem Hintergrund
Ich bin in der Software-Branche tätig und entwickle auch gerne in meiner Freizeit Softwareprojekte, indem ich irgendwelche Ideen in Form von Mobile Apps oder Web Apps realisiere. Ich programmiere gerne, und wenn es dann auch noch läuft, freut es mich umso mehr. Als ich die Aussage des Nvidia-CEOs gehört habe, dass man in nächster Zukunft nicht mehr programmieren lernen soll/muss, wurde ich hellhörig und musste die KI-Coding-Assistenten ausprobieren.
Ich möchte gerne meine Erfahrungen vom Einsatz der aktuell verfügbaren LLM-Tools teilen. Es ist nicht wissenschaftlich und definitiv nicht abschließend und auch nicht fair, da ich bei manchen Tools die kostenlose Version getestet habe und bei anderen auf die Premium-Version gesetzt habe! Macht gerne eure eigenen Erfahrungen und teilt sie in den Kommentaren.
Ich wollte Antworten auf folgende Fragen erhalten:
- Wie können LLM-Tools mir beim Softwareentwickeln helfen?
- UI implementieren (Ergänzen / komplette Flutter Widgets)
- Logik implementieren (Verbessern / komplett KI-generiert)
- Funktionen anpassen
- Funktionen erklären
- Komplette KI-Features generieren
Folgende Tools habe ich ausprobiert:
- Tabnine
- ChatGPT Web
- GitHub Copilot
- Claude AI Web
- Claude AI API plus Cloud Dev
Tabnine
Ich hatte Tabnine letztes Jahr als Plugin in meine IDE eingebunden. Die Arbeitsweise musste ich an das Tool anpassen. Tabnine lieferte damals noch Vorschläge, wie ich eine Funktion implementieren kann. Ich musste mich daran gewöhnen, dass ich bald einen Vorschlag bekomme, was bedeutete, dass die Tippgeschwindigkeit abnahm, da man darauf wartete, bis der Vorschlag kam. Dies konnte jedoch etwas dauern.
Hinweis: Jetzt kann Tabnine mehr, und man kann genauso wie mit GitHub Copilot mit dem Tabnine-Assistenten chatten. Diese Funktionalität habe ich jedoch nicht getestet.
ChatGPT Web (Free)
ChatGPT hat zunächst sehr beeindruckende Ergebnisse geliefert. Man musste jedoch genau beschreiben, was die aktuelle Situation ist, was mein Ziel ist und wie das Ergebnis aussehen sollte (Prompt). Daraufhin hat man auch ein gutes Ergebnis erhalten. Das Erstellen des Prompts nimmt jedoch Zeit in Anspruch, und manchmal hatte ich das Gefühl, dass ich es schneller selbst implementiert hätte, als vorher den Prompt zu schreiben und dann auf das Ergebnis zu warten.
Was jedoch zu Einschränkungen geführt hat, ist die Beschränkung im Kontext-Fenster. Für einfache Funktionen lässt sich das wunderbar einsetzen. Für anspruchsvollere Aufgaben, die z.B. verschiedene Funktionen / Klassen / Dateien benötigen, wird es schwierig. Allein die Benutzerfreundlichkeit, die benötigten Inhalte aus der IDE in das Chat-Fenster zu kopieren, ist sehr umständlich. Darüber hinaus kam ich auch hier ans Limit, wie viel ich hochladen kann. Wir sehen jedoch an Beispielen wie Gemini 1.5 Pro (1 Million Token), dass hier noch mehr möglich ist.
Zusammenfassend war es für mich keine großartige Verbesserung in der Entwicklungsgeschwindigkeit, da aufgrund von Hin-und-her-Kopieren der Entwicklungsfluss gelitten hat. Auch die Einschränkungen des Kontext-Fensters waren hinderlich. Da auch die Ergebnisse oft nicht direkt funktioniert haben (Single Shot) und ich noch hin und her chatten musste, um ein passendes Ergebnis zu bekommen.
GitHub Copilot (Modell: GPT-3.5 Turbo & GPT-4o)
Nach dem ChatGPT-Web-Experiment habe ich mir gedacht, es macht Sinn, den Copilot mal auszuprobieren. Dieser lässt sich einfach in die IDE integrieren. Ähnlich wie Tabnine hat der Copilot Vorschläge geliefert, wie eine Funktion aussehen könnte. Darüber hinaus konnte ich auch Code, der vom Compiler nicht akzeptiert wurde, vom Copilot prüfen und verbessern lassen. Das ist natürlich sehr hilfreich, wenn man zwischen verschiedenen Sprachen wechselt und im Kopf noch die Syntax der vorhergehenden Sprache hat.
Durch die schnelleren Vorschläge als bei Tabnine und die Integration in die IDE war der Entwicklungsfluss nicht ganz so gestört. Dennoch war ich langsamer, da ich auf das Ergebnis gewartet habe. Darüber hinaus hat man auch hier das Problem eines begrenzten Kontext-Fensters. Es kam bei mir vor, dass neue Funktionen vorgeschlagen wurden, die im gesamten Projekt vorhanden waren, er aber nicht gesehen hat aufgrund der Kontext-Fenster-Einschränkungen.
Durch die IDE-Integration und schnellere Vorschläge war es akzeptabel. Wenn ich an irgendeiner Stelle hängen geblieben bin, war die Chat-Funktion auch hilfreich. Ich muss jedoch zugeben, dass ich selten eine passende Antwort auf Anhieb bekommen habe, sondern meistens einen längeren Chatverlauf hatte.
Claude.ai Web (Modell: Sonnet-3.5)
Das Erscheinen des Modells Sonnet-3.5 hat mich auf Anthropics Claude.ai gelenkt. Hier fand ich die Artifacts ganz interessant und wollte das auch ausprobieren. Ich fand auch spannend, dass man in der freien Version ein Bild mit der gewünschten UI hochladen konnte und einen passenden Code erhalten hat. Das habe ich natürlich ausprobiert und war zunächst vom Ergebnis positiv überrascht. Ich habe auf Anhieb einen verwendbaren Code erhalten, der die UI zu 90% korrekt implementiert hat. Das Anpassen der restlichen 10% war dann ein Kinderspiel.
Da das am Anfang so gut funktioniert hat, bin ich auch in das Tages-Limit an Requests gelaufen. Da mich das Ergebnis der freien Version überzeugt hat, habe ich mich dafür entschieden, die Premium-Funktionen auszuprobieren. Hier hat man die Möglichkeit, Projekte anzulegen, und in diesen Projekten kann man 'Project Knowledge' hinterlegen. Das sind einfache Daten im Textformat und somit auch Code.
Hier hat mich interessiert, ob ich ihm einfach Screenshots einer Web-App geben kann und das LLM ein passendes Ergebnis liefert. Leider hat das nicht funktioniert, da man beim Upload von Bildern pro Chat auf 5 Dateien begrenzt ist. Damit kann man keine komplette App abbilden. Was jedoch gut geklappt hat, war, wenn man Screenshot für Screenshot vorgegangen ist. Die UI ließ sich so wunderbar realisieren (90% generiert - 10% eigene Anpassungen). Hierbei muss man jedoch darauf achten, dass die Anforderung schön gekapselt und abgeschlossen ist. Falls man erwartet, dass er auf bestehende Funktionen aufsetzt, wird man enttäuscht.
Ich bin auch mal in die Situation gekommen, dass er seinen eigenen Code nicht zufriedenstellend verbessern konnte. Hier musste ich eingreifen und ihm sagen, welchen Ansatz er für die Lösung wählen sollte, um das gewünschte Ergebnis zu erzielen. Nach meinem Hinweis wurde ein sauberes Ergebnis geliefert. Das heißt, man muss die Modelle an der einen oder anderen Stelle in die richtige Richtung weisen, ansonsten versucht das Modell, einen falschen Ansatz unendlich lange zu verbessern, ohne zu erkennen, dass der von ihm gewählte Ansatz falsch ist.
Ich muss sagen, das war aus meiner Sicht und Erfahrung das beste Modell, was ich bisher ausprobiert habe. Ich muss aber auch zugeben, dass ich nach einer Zeit das Gefühl bekommen habe, dass das Modell schlechter geworden ist. Die Ergebnisse waren manchmal schlechter als die anfangs gelieferten 90% Korrektheit.
Claude.ai API + Claude DEV (Modell: Sonnet-3.5)
Basierend auf den guten Erfahrungen mit Claude.ai habe ich mir den API-Zugriff aktiviert und über das Claude Dev Plugin in die IDE integriert. Meine Hoffnung war, dass er jetzt Multifile-Support hat und somit auch Anpassungen in mehreren Dateien vornehmen kann. Leider wurde ich hier auf verschiedensten Ebenen enttäuscht. Ich bin selbstverständlich in sämtliche Limits gelaufen, sei es Requests Per Minute, sei es aber auch Tokens Per Day. Was dazu geführt hat, dass er mittendrin stecken geblieben ist und den Task nicht abgeschlossen hat. So waren insgesamt von 13 Dateien 8 fertiggestellt und der Rest nicht. Was natürlich zu Frust geführt hat und auch zu einer schlechten Bewertung.
Zusammenfassung
Je nachdem, welche Anforderungen man an ein Tool stellt, bekommt man die passende Unterstützung oder eben nicht. Ich wollte schauen, ob es komplette Applikationen anhand von Screenshots und Funktionsbeschreibung erstellen kann. Dies konnte ich mit den genannten Tools nicht realisieren. Das heißt nicht, dass das in Zukunft nicht möglich sein wird, das heißt nur, aktuell hat es bei mir nicht geklappt 😕.
Die Ergebnisse von Claude.ai waren aus meiner Sicht sehr gut und mit wenigen Anpassungen nutzbar. Hier muss man im Hinterkopf behalten, dass sich das Aufgabenfeld eines Entwicklers ändern könnte/wird, da ich weniger Code selbst geschrieben habe, sondern eher den generierten Code geprüft und angepasst habe. Meine Entwicklungsgeschwindigkeit hat sich nur bei dem Einsatz von Claude.ai sichtlich verbessert, obwohl ich die Web-Variante eingesetzt habe. Wäre es möglich, das Modell als IDE-Copilot einzusetzen, wäre die Entwicklungsgeschwindigkeit vermutlich noch besser.
Antworten auf die anfangs gestellten Fragen
- Wie können LLM-Tools mir beim Softwareentwickeln helfen?
- UI implementieren (Ergänzen / komplette Flutter Widgets)
- Das konnte ich am besten mit Claude.ai Web erzielen.
- Logik implementieren (Verbessern / komplett KI-generiert)
- Das konnten aus meiner Sicht alle ganz gut erledigen.
- Funktionen anpassen
- Das hat bei allen gut geklappt.
- Funktionen erklären
- Das hat bei allen gut geklappt.
- Komplette KI-Features generieren
- Konnte keines der Modelle in einem für mich akzeptablen Maße erfüllen.
- UI implementieren (Ergänzen / komplette Flutter Widgets)
Persönliche Meinung
Ob wir noch programmieren lernen sollen oder nicht, kann ich nicht beantworten. Ich für meinen Teil programmiere gerne. Ich bin aber auch offen gegenüber Tools, die mir meine Arbeit erleichtern und mich so weg von Syntax hin zu Funktionen und Nutzen für den User bringen.
Auch wenn die Modelle aktuell nicht zu 100% richtige Ergebnisse liefern, müssen wir uns mit diesem Thema auseinandersetzen und schauen, wie man solche Tools sinnstiftend einsetzen kann und welche Auswirkungen der Einsatz von KI-Coding-Assistenten haben kann.
Ich bin gespannt, was die Zukunft uns noch bringt und wie schnell sich die Ergebnisse der Modelle mit dem Fokus aufs Programmieren verbessern werden.