Generative Künstliche Intelligenz: Die Zukunft der Softwareentwicklung?

Ein Erfahrungsbericht

Künstliche Intelligenz (KI) erregt derzeit großes Aufsehen. Zurecht! Denn in den letzten Jahren konnten in der KI-Forschung beeindruckende Fortschritte erzielt werden, welche KI-Technologien für eine breite Masse zugänglich gemacht haben. Auch vor der Softwareentwicklung selbst macht Generative KI (GenAI) nicht Halt. Erfahren Sie in diesem Blogartikel, wie GenAI Entwickler*innen auf verschiedene Weisen unterstützen kann und welche Tools sich am besten dafür eignen!

Generative Künstliche Intelligenz (GenAI) bezieht sich auf eine Klasse von KI-Systemen, die in der Lage sind, eigenständig neue Inhalte zu generieren, sei es Texte, Bilder, Musik oder andere kreative Outputs. Im Gegensatz zur klassischen KI, die auf festen Regeln basiert, ermöglicht GenAI die Schaffung neuer und einzigartiger Inhalte durch das Lernen von Mustern und Zusammenhängen in umfangreichen Datensätzen. Der Hauptunterschied zur klassischen KI liegt also in der Fähigkeit zur menschenähnlichen Kreativität und dem automatisierten Generieren von synthetischen Inhalten.

GenAI findet breite Anwendung in verschiedenen Bereichen. In der Content-Erstellung kann sie automatisch Texte, Bilder, Videos, Musik und Kombinationen dieser Medientypen generieren. Im Bereich der Bildgenerierung kann sie künstlerische Werke schaffen oder Fotos simulieren. Darüber hinaus wird GenAI in der Sprachsynthese eingesetzt, um menschenähnliche Stimmen zu erzeugen, und in der Textvervollständigung, um präzise und kohärente Sätze zu erstellen. Kombiniert werden können die Medientypen beispielsweise, um Präsentationen zu erstellen.

Während GenAI viele innovative Anwendungen ermöglicht, gibt es auch Herausforderungen, insbesondere im Hinblick auf ethische Überlegungen, den Umgang mit Bias in den Trainingsdaten und die Notwendigkeit, die Ergebnisse kritisch zu überprüfen. Die potenziellen Anwendungen und Auswirkungen von GenAI machen sie zu einem aufregenden und vielversprechenden Bereich, der die Grenzen der künstlichen Intelligenz weiter vorantreibt.

Wie kann Sie GenAI bei der Softwareentwicklung unterstützen?

Code Completion

Die vermeintlich wichtigste Fähigkeit von Entwicklern ist das Erstellen von Code. Dieser sollte möglichst fehlerfrei, gut lesbar, übersichtlich und leicht erweiterbar sein. Doch gerade unerfahrenen Entwicklern fehlt oft ein gewisses Verständnis für gute Codequalität und Programmierprinzipien. Dabei können GenAI-Tools jedoch Abhilfe schaffen, indem sie intelligente und kontextbezogene Empfehlungen für die Fertigstellung von Codezeilen oder -blöcken anbieten oder anhand von natürlicher Sprache ganze Codeabschnitte generieren können.

Code Explanation

GenAI kann bei der Bewältigung von Herausforderungen im Umgang mit Legacy Code, “Spaghetticode”, Code von anderen Entwicklern (die möglicherweise nicht mehr im Unternehmen sind), unbekannten Projekten und unbekannten Programmiersprachen oder Frameworks unterstützen, indem sie Codeabschnitte in natürlicher Sprache erklärt, Fragen dazu beantwortet und der/dem Entwickler*in den Einstieg in die Codebasis erleichtern. GenAI ist aber nicht perfekt. Oft sind die Erklärungen noch zu detailliert und lang. Den Gesamtkontext zu erfassen fällt den meisten GenAI-Tools noch schwer. 

Eine weitere Aufgabe, die GenAI übernehmen kann, ist die Generierung von aussagekräftigen Commit Messages. Sie versteht den Kontext der Änderungen und kann diese auf Wunsch zusammenfassen. Nur dem Tool unbekannte Metainformationen wie z.B. eine Ticketnummer müssen ergänzt werden.

Code Refactoring

GenAI kann den bestehenden Code verbessern, indem sie ihn übersichtlicher, effizienter oder verständlicher macht. Dafür verwendeten Entwickler*innen bisher Tools wie beispielsweise SonarQube. Diese basiert jedoch auf statischer Codeanalyse, einem vordefinierten Regelwerk, welches auf bestehenden Code angewendet wird. GenAI hingegen betrachtet den Gesamtkontext des Codes und kann so in natürlicher Sprache Vorschläge für Refactorings machen und diese teils nativ in die Entwicklungsumgebung einfügen.

GenAI kann Entwickler (noch) nicht gänzlich ersetzen

Eines steht fest: Die Softwareentwicklung wird sich grundsätzlich verändern, denn die gängigen GenAI-Tools sind einfach zu hilfreich, um nicht genutzt zu werden. Darüber hinaus werden sie natürlich ständig weiterentwickelt und neue GenAI-Tools kommen auf den Markt. Doch werden Programmierer*innen in Zukunft dann überflüssig?

Abschließend lässt sich diese Frage nicht beantworten, denn dafür ist der KI-Markt zu dynamisch und Zukunftsprognosen in der IT liegen sowieso meist krachend daneben. Allerdings lässt sich zumindest absehen, dass gewisse menschliche Fähigkeiten kurz und mittelfristig nicht gänzlich ersetzbar sind.

Kreativität und Design

GenAI kann bestimmte Aspekte des Designs automatisieren, wie die Generierung von grafischen Elementen oder das Vorschlagen von Farbschemata. Dennoch fehlt der GenAI häufig das tiefe Verständnis für kulturelle Nuancen, emotionale Kontexte und ästhetische Präferenzen, die für die Schaffung einzigartiger und ansprechender Designs entscheidend sind. Die kreative Vision, die ein Mensch in den Designprozess einbringt, bleibt unersetzlich, da sie auf persönlichen Erfahrungen, Emotionen und einem breiteren Verständnis für die Zielgruppe basiert.

Zwischenmenschliche Kommunikation

GenAI kann hochqualitative Texte generieren und sogar die natürliche Sprache verstehen, aber sie kann Schwierigkeiten haben, subtile emotionale Nuancen, Sarkasmus oder komplexe zwischenmenschliche Kontexte zu erfassen. Die Fähigkeit zur empathischen Kommunikation, Lesen von nonverbalen Signalen und Anpassung an verschiedene soziale Dynamiken sind menschliche Eigenschaften, die für erfolgreiche zwischenmenschliche Beziehungen und effektive Kommunikation entscheidend sind und gegenwärtig schwer von KI nachgeahmt werden können.

Strategische Geschäfts- und Projektplanung

Während KI dazu beitragen kann, große Mengen an Daten zu analysieren und Muster zu identifizieren, bleibt die strategische Planung und das Verständnis für Geschäftsziele eine Domäne, die menschlicher Intelligenz vorbehalten ist. Menschliche Entscheidungsträger bringen nicht nur analytische Fähigkeiten mit, sondern auch die Fähigkeit, komplexe wirtschaftliche Zusammenhänge zu verstehen, Risiken abzuwägen und strategische Entscheidungen auf Grundlage von Erfahrung, unternehmerischem Gespür und einem tiefen Verständnis für den Markt zu treffen. Die Interpretation von Daten im Kontext geschäftlicher Anforderungen erfordert menschliche Intelligenz, die über die reine Analysefähigkeit von KI hinausgeht.

Welche Tools sollte ich mir genauer anschauen?

Es gibt mittlerweile eine extrem große Anzahl an GenAI-Tools für Softwareentwickler*innen. In diesem Blogartikel werden nur drei weitverbreitete von ihnen genauer beleuchtet. Eine Übersicht über viele weitere GenAI-Tools bietet die Seite https://theresanaiforthat.com/.

ChatGPT

ChatGPT ist ein sogenanntes Large Language Model (LLM), welches auf GPT-3.5 bzw. in der zahlungspflichtigen Plus-Variante auf GPT-4 basiert. Es wurde auf einer großen Menge von unstrukturierten Daten trainiert und kann aufgrund seiner spezialisierten Transformer-Architektur natürliche Sprache verstehen und generieren. Das Modell basiert dabei auf einem neuronalen Netzwerk mit 175 Milliarden Parametern. Dies ermöglicht es, hochqualitative und kontextsensitive Antworten auf komplexe Fragen zu generieren. Der Kontext zu der Frage muss dabei vom Nutzer mitgeliefert werden, da ChatGPT, im Gegensatz zum GitHub Copilot und IntelliJ AI Assistant, keinen Zugriff auf die Codebasis hat.

Das Tool kann so gut mit Sourcecode umgehen, da eines der zugrundeliegenden Modelle namens Codex auf dem gleichnamigen Codedatensatz trainiert wurde, der nahezu alle öffentlichen Repositories enthält. Es hat dadurch ein fundiertes Verständnis für verschiedene Programmiersprachen, Entwicklungsparadigmen und typische Codestrukturen entwickelt. Durch diese Vielseitigkeit ist ChatGPT in der Lage, Sie bei den im Abschnitt Wie kann Sie GenAI bei der Softwareentwicklung unterstützen? beschriebenen Aufgaben zu unterstützen. Allerdings sollte man sich stets bewusst sein, dass das Tool nicht perfekt ist und, wie beschrieben, nicht über die tiefgreifende Kontexterfassung und Domänenwissen eines erfahrenen Entwicklers verfügt. Außerdem unterliegen LLMs naturgemäß sogenannten Halluzinationen, die dazu führen können, dass Fakten erfunden, falsche Annahmen getroffen und Darstellungen verzerrt werden. Fortschrittliche Modelle wie GPT-4 können diese Seiteneffekte reduzieren, jedoch kann aktuell noch nicht ausgeschlossen werden, dass sie vereinzelt auftreten.

GitHub Copilot

Der GitHub Copilot ist ein generatives GenAI-Toolset für verschiedene Entwicklungsumgebungen, das ebenfalls auf dem Codex-Modell basiert. Es begann damit, Codevorschläge während des Schreibens zu geben – ein bisschen wie die Autokorrektur auf dem Smartphone mal besser, mal schlechter. Mittlerweile ist das Toolset stark erweitert worden und beherrscht zusätzlich alle oben beschriebenen Funktionen. Für die Autovervollständigung nutzt sie den Kontext, in dem man sich gerade in der IDE befindet, sowie eine riesige Codebasis, die in der Anlernphase konsumiert wurde. So reicht es häufig, den Methodenkopf zu schreiben und der Copilot schlägt einen passenden Körper vor.

IntelliJ AI Assistant

Der IntelliJ AI Assistant kann eigentlich alles, was ChatGPT und der GitHub Copilot auch können, nur eben beschränkt auf die Entwicklungsumgebungen von JetBrains wie beispielsweise IntelliJ IDEA. Das Tool nutzt für verschiedene Funktionen verschiedene Modelle. Welche genau, gibt JetBrains nicht an, vermutlich aber ebenfalls ein GPT-basiertes Modell

Halten die Tools, was sie versprechen?

Ich möchte in diesem Artikel keine konkreten Antworten, Vorschläge oder den generierten Code der Tools bewerten, weil sich daraus keine allgemeingültigen Aussagen treffen lassen. Stattdessen möchte ich versuchen, die Erfahrung der letzten Monate, die ich damit gesammelt habe, darzulegen.

ChatGPT

Um es vorwegzunehmen: ChatGPT sollte nur zur Unterstützung genutzt werden. Man sollte den KI-generierten Code stets analysieren und verstehen, bevor man ihn in die eigene Codebasis integriert.

Mit ChatGPT auf dem Modell GPT-3.5 habe ich gemischte Erfahrungen gemacht. Wenn die Dokumentationslage zu einer Thematik gut ist, liefert ChatGPT auch gute, brauchbare Antworten. Das ist in den meisten Fällen so. Sobald es aber dünner wird und die Fragestellung komplexere Details enthält, fängt ChatGPT an, teilweise inkonsistente, unlogische oder falsche Antworten zu geben. Ich habe noch nicht erlebt, dass ChatGPT zugibt, eine Frage nicht beantworten zu können, was eben zu diesem Verhalten führt. Aus diesem Grund warnte ich vor unüberlegtem Übernehmen des von ChatGPT generierten Codes.

GitHub Copilot

Der Github Copilot kann sich meiner Meinung nach wirklich sehen lassen. Meist greift er einem während des Tippens unter die Arme – mal sanfter und konstruktiver, mal ruppiger und nerviger. Alles in allem spare ich aber tatsächlich Zeit beim Entwickeln, ab und zu sogar eine Google-Suche.

Der Copilot lässt auch den direkten Chat zu, in dem er Docs generieren, Code erklären, reparieren, vereinfachen und mittels Unit-Tests testen kann, dies ist aktuell jedoch Businesskunden und Teilnehmern der “private Beta” vorbehalten und findet hier deshalb keine tiefergehende Analyse.

IntelliJ AI Assistant

Hinweis: Zum Zeitpunkt des Tests befand sich der IntelliJ AI Assistant im Beta-Status.

Den AI Assistant habe ich persönlich bisher am wenigsten genutzt. Wohl auch, weil die einzige Funktion, die er seinem Mitbewerber GitHub Copilot voraus hat, das in die IDE integrierte Verfassen einer Commit Message ist. Allerdings beherrscht das Tool dies leider nicht wirklich gut. So scheint zum Beispiel eine gewisse Kontextsensitivität zu fehlen, denn die im Branchnamen enthaltene Ticketnummer findet in der Commit Message keine Erwähnung – im Gegensatz zu den bestehenden Commits. Außerdem fällt es dem Tool schwer, die passende Länge zu finden und große Änderungen sinnvoll zusammenzufassen. 

Wenn man den Preis des IntelliJ AI Assistants, der aktuell nur in einem gesonderten Abo zu angeboten wird, mit dem des Github Copilots vergleicht und feststellt, dass dieser etwa doppelt so hoch ist, ist es nur logisch, dass die Lösung von JetBrains auch von den Nutzern deutlich schlechter bewertet wird.

Fazit

Ich bin der Ansicht, dass es für Entwickler sinnvoll ist, sich den Möglichkeiten der KI im Entwicklungsprozess zu öffnen. In den vergangenen Monaten und Jahren haben wir bedeutende Fortschritte in diesem Bereich erlebt, und es ist wahrscheinlich, dass diese Entwicklung weitergeht. Obwohl einige Tools fortschrittlicher sind als andere, besteht meiner Meinung nach kein Zweifel daran, dass wir uns derzeit von der Phase “reine Spielerei” zu “produktivitätssteigernder Unterstützung” bewegen. Abschließend möchte ich ein passendes Zitat hervorheben:

“Wer nicht mit der Zeit geht, der geht mit der Zeit.”

Friedrich Schiller

Neugierig geworden?

Sind Sie interessiert und möchten gerne mehr erfahren? Sprechen Sie uns an, wir freuen uns auf Sie!

Kontakt

Autor: Tom Schindler
IT Consultant, Schwerpunkt Softwareentwicklung

Co-Autor: Niklas Witzel
IT Consultant, Schwerpunkt Softwareentwicklung & KI

Telefon: +49 (0)40 53302-0
E-Mail: kontakt@cimt-ag.de

cimtAcademy

Jetzt registrieren und keine Veranstaltungen mehr verpassen.​



    Nach oben scrollen