Software-Entwicklung mit KI-Hilfe von ChatGPT

Wie hilft uns KI beim Programmieren? Als erfahrener Software Entwickler zeige ich euch, in welchen Situationen mir ChatGPT beim Entwickeln besonders hilft.

Die Trainingsdaten der KI enthalten viele Programmiersprachen und Technologien. Außerdem kennt sie viele Algorithmen, Tutorials, Opensource Codes, Probleme und deren Lösungen. Dein Arbeits-Kontext, der komplette Sourcecode dazu und euer Problem bzw. dessen echte Root-Cause sind der KI allerdings unbekannt. Die KI bzw. ChatGPT hilft euch also nur so gut, wie ihr euer Problem bzw. die Anforderung mit passendem Kontext klar beschreibt.

Mein generelles Vorgehen dazu ist Teile und Herrsche. Ich zerlege meine User Story bzw. meine Aufgabe in kleinere Teile. Kleinere Teilprobleme oder Teilanforderungen lassen sich leichter und genauer beschreiben, so dass die KI bzw. ChatGPT mich besser unterstützen kann. 

Um euch das zu verdeutlichen, zeige ich im Folgenden Beispiele aus meinem Entwickler-Alltag. In diesen Beispielen habe ich Teil-Probleme oder einzelne Anforderungen an ChatGPT geschickt. Die Lösungen oder mindestens die Lösungsideen von ChatGPT arbeite ich dann in meinen Code ein. Das Generieren ganzer Programme mit ChatGPT ist bei meinen typischen Enterprise-Anforderungen nicht praktikabel.

Den Artikel-Inhalt und mehr zu Programmieren mit KI gibt es von mir bei Udemy als Online-Training

Java Probleme

Programmieraufgaben

Wie schon in meinen Video ChatGPT vs. Codewars gezeigt, kann die KI Programmieraufgaben lösen. Das können wir ausnutzen, indem wir Logiken von ihr programmieren lassen, deren Lösung uns nicht direkt einfällt.


Dieses Probleme können alle EntwicklerInnen selbst lösen, aber evtl. nicht ganz so schnell wie ChatGPT. Junior EntwicklerInnen könnten hier vom Kennenlernen der substring-Methode zusätzlich profitieren.

Typ-Konvertierung

Typ-Konvertierungen sind ein weiteres konkretes Problem, welches eine KI leicht lösen kann. Hier benötigte ich innerhalb eines Mappers eine Konvertierung von LocalDate nach OffsetDateTime. Da diese Konvertierungen häufig eleganter als per Konstruktor-Aufruf funktionieren, habe ich ChatGPT um eine Lösung gebeten:

Unbekannte Technologie verwenden 

Am meisten profitiere ich von KI, wenn ich eine mir unbekannte Technologie einsetze. Meine Aufgabe war eine CSV-Datei als Datenquelle einzulesen und eine REST-API zum Abfragen dieser Daten zu bauen. Da ich mich mit REST-APIs sehr gut auskenne, benötige ich für diesen Teil keine KI-Hilfe. Allerdings hatte ich zuvor noch nicht eine CSV-Datei mit der Bibliothek jackson-dataformat-csv eingelesen. Früher hätte ich nach passenden Beispielen mit Google gesucht, heute stelle ich die Frage ChatGPT:

Das erste Ergebnis fügte sich nicht gut in meinen eigenen Code ein, daher eine 2. Anfrage zum direkten Schreiben in eine Map. Generell könnt ihr ChatGPT sagen, dass es keine Kommentare in den Code schreiben soll oder wie die Methoden-Signatur aussehen muss. Das vereinfacht das Kopieren des Codes.

Debugging

Wenn der von ChatGPT produzierte Code Compile-Fehler oder Laufzeit-Fehler verursacht, schickt diese Information im selben Chat als Antwort zurück. ChatGPT schafft es manchmal diese Probleme zu lösen. Das nächste Beispiel ist allerdings eine Bad Practice:

Hier ist meine Fehlerbeschreibung zu ungenau. Ich hatte keinen richtigen Kontext an die KI übergeben. Dadurch nimmt die KI an, dass es einen API Change gab. Tatsächlich hatte ich nur die Version des API Generators erhöht. Die unveränderte API Spezifikation war allerdings nicht mehr kompatibel zur neuen Version 6.4.0 des OpenAPI Code Generators. Dieses Beispiel zeigt, dass die Antwort nur so gut bzw. schlecht ist, wie das Problem beschrieben ist.

Spring Probleme

Neben der Programmiersprache Java kennt ChatGPT auch verbreitete Frameworks wie Spring. Probleme mit Spring könnt ihr also an die KI übergeben.

Spring Properties

Spring EntwicklerInnen kennen die application.properties oder application.yml Datei. Wir speichern dort einfache Konfiguration im Key-Value Format. Gelegentlich besteht unsere Konfiguration aber auch aus einer Liste von Werten. Das zugehörige Format ist uns eventuell unbekannt, aber nicht der KI:

Die erste Antwort passte nicht zum Stil des Projektes. Daher die 2. Frage nach einer Lösung mit der @Value Annotation. Das Aufsplitten des konfigurierten Wertes per split in der Annotation ist ein gutes Beispiel für seltene Notationsstile, die wir meistens nicht auswendig kennen.

JSON Serialisierung

Im nächsten Beispiel geht es um die Serialisierung von Objekten in JSON. Konkret sollen Attribute mit dem Wert null nicht in die JSON-Struktur geschrieben werden. Dazu muss der von Jackson verwendet ObjectMapper entsprechend konfiguriert werden - ein kompliziertes Spezial-Wissen, genau richtig für eine KI:

Problem bei neusten Technologien oder Versionen

Neue Technologien oder neuste Versionen können der KI unbekannt sein. Weil die Trainingsdaten älter als die Technologie sind, kann die KI uns hier nicht helfen. Im folgenden Beispiel eine Frage zur Konfiguration eines Plugins, um es mit der neuen Spring Boot Version zu verwenden. Spring Boot 3 vom November 2022 ist in den Trainingsdaten von September 2021 unbekannt. Das Angeben der Version in meiner Frage sorgte dafür, dass mich ChatGPT nicht mit alten Informationen in eine falsche Richtung schickt.

Test & Maven Probleme

Die Trainingsdaten der KI umfassen sehr viele Technologien. So hilft ChatGPT auch bei Fragen zum Mockito Test-Framework und zum Maven-Build.

Mockito Mock


Einen Mock, der einfach einen Eingabeparameter zurück gibt, benötige ich gelegentlich in meinen Tests. Leider kann ich mir die konkrete Lösung nie merken - ich weiß aber, dass die Google-Suche nach diesem Problem aufwändig ist...

Maven paralleler Build

Habt ihr ein großes Projekt mit vielen Maven-Modulen? Dann beschleunigt den Build durch paralleles Bauen. ChatGPT empfiehlt diese Tuning Maßnahme, wenn ihr nach einem schnelleren Maven-Build fragt. Im folgenden Frage ich, wie es konkret funktioniert und bekomme eine hilfreiche Antwort.

Linux Probleme

Datei-Suche mit grep

Die Linux Shell ist ein mächtiges Werkzeug, dessen Bedienung schwierig zu lernen ist. Müsst ihr beispielsweise eine große Menge von Dateien nach bestimmten Inhalten durchsuchen, hilft die Shell, wenn Ihr das richtige Kommando kennt. Ist euch das Kommando unbekannt, löst die KI das Linux Problem, da sie scheinbar alle Kommandos kennt und ihr das Problem konkret beschreiben könnt.

Netzwerk-Tests mit curl

Zum Analysieren von Netzwerkverbindungen verwende ich die Linux Shell. Kennt Ihr dazu den Befehl curl? Mit welchem Parameter sendet Ihr ein http PATCH statt dem standardmäßigen GET? Und wie setzt man den Proxy für das Firmennetzwerk? Auch für dieses Problem, findet die KI schnell eine Antwort.

Fazit

Programmieren mit KI-Unterstützung macht die Entwicklung schneller. Ich selbst habe in letzter Zeit weniger mit Google beim Programmieren gesucht. Stattdessen setze ich mehr auf KI bzw. ChatGPT. Die Antwortzeiten und Stabilität von ChatGPT sind leider nicht immer gut. Das kostenpflichtige ChtatGPT Plus sollte zuverlässiger sein. Die Alternativen GitHub Copilot oder Bing Chat muss ich noch evaluieren. 

Ich schließe mit einem Zitat von Albert Einstein. Dieses passt zu meiner Feststellung, dass die KI nur dann helfen kann, wenn wir Problem und Kontext gut beschrieben haben:
„Wenn ich eine Stunde habe, um ein Problem zu lösen, dann beschäftige ich mich 55 Minuten mit dem Problem und 5 Minuten mit der Lösung.“

Kommentare

Beliebte Posts aus diesem Blog

OpenID Connect mit Spring Boot 3

Authentifizierung in Web-Anwendungen mit Spring Security 6

Reaktive REST-Webservices mit Spring WebFlux