GitHub Copilot, Cody und Co. erleichtern die Softwareentwicklung. Sie schreiben Code auf Kommando, finden Bugs und geben Tipps für Verbesserungen. Hierdurch kann gleichzeitig die Entwicklungsarbeit beschleunigt und qualitativ verbessert werden. Wie dies geht und welche Auswirkungen es auf den Entwickleralltag hat, klären wir im folgenden Artikel.

Wer kennt es nicht: Da hat man den Programmcode in mühevoller Kleinarbeit geschrieben und doch will er sich nicht ausführen lassen. Ist der Code fehlerhaft, das verwendete Framework veraltet, oder stimmt etwas mit der Reihenfolge der Befehle nicht? Solche und ähnliche Herausforderungen bestimmen bei Vielen einen großen Teil des Entwickleralltags. KI-Assistenten sollen hier unterstützen und zusätzlich die Produktivität steigern.

Produktivität, Produktivität, Produktivität!

Der wohl prominenteste Kandidat unter den KI-Developer Tools ist GitHub Copilot – ein sogenannter AI Pair Programmer. Das Prinzip ist dabei – ähnlich wie bei Pair- oder Mob-Programming – dass ein oder mehrere Kollegen dem Entwickler beim Code-Schreiben auf die Finger schauen, Anmerkungen machen, oder auch mal helfend eingreifen.

IDE-Integration

Microsoft hat GitHub Copilot nahtlos in die Entwicklungsumgebungen Visual Studio, Visual Studio Code, Vim und Neovim und die IDEs von JetBrain, wie z.B. IntelliJ integriert. Zudem werden spezielle Versionen für CLI, Azure Data Studio, sowie die GitHub Mobile App (iOS und Android) angeboten. Während die Code-Vervollständigung in allen Tools verfügbar ist, existiert die Chat-Funktion momentan lediglich in VS, VSCode und den JetBrain-IDEs.

GitHub Copilot unterstützt grundsätzlich alle gängigen Programmiersprachen, für die öffentliche Repositories existieren. Denn auf deren Basis wurde das Modell trainiert. Die Qualität der Vorschläge hängt jedoch vom Umfang und der Vielfalt der Trainingsdaten ab. Beispielsweise ist JavaScript gut vertreten und eine der am besten unterstützten Sprachen. Sprachen mit geringerer Präsenz können weniger oder weniger robuste Vorschläge liefern.

Trainingsbasis

Hierbei ist es wichtig zu verstehen, dass GitHub Copilot Code auf Grundlage von Wahrscheinlichkeiten produziert und diesen nicht einfach kopiert. Dies ist auch für die rechtliche Bewertung wichtig. Auch wenn das Thema aktuell noch heiß diskutiert wird, sind zunächst einmal keine direkten Urheberrechtsverletzungen nachweisbar.

GitHub Copilot basiert seit Ende letzten Jahres auf OpenAI’s GPT-4-Modell und verfügt somit über dieselben Fähigkeiten, wie sie beispielsweise die professionelle Version von ChatGPT bietet. Darüber hinaus hat Microsoft vor allem daran gearbeitet, das Modell mit zusätzlichen Kontextinformationen zu versorgen. Dies kann zum Beispiel der Code der aktuell in der IDE geöffneten Dateien enthalten. Auf diese Weise sollen vorhandener Code, sowie verwendete Patterns und Programmierstile wiederverwendet werden.

Funktionsweise

GitHub Copilot integriert sich direkt in die Entwicklungsumgebung und bietet Unterstützung während des Code-Schreibens an. Abbildung 1 zeigt die Integration in Visual Studio Code.

Abbildung 1: GitHub Copilot integriert sich direkt ins Code-Fenster von VSCode.

GitHub Copilot integriert sich direkt ins Code-Fenster von VSCode.

Die Hilfestellungen sind hierbei vielfältig. Es reicht beispielsweise, einen Kommentar in den Code zu schreiben, damit Copilot aktiv wird. So schlägt er in den nächsten Zeilen automatisch eine mögliche Implementierung vor (siehe Abbildung 2).

Hierbei generiert das Tool zunächst den möglichen Code und fügt ihn hellgrau eingefärbt ins Codefenster ein. Bestätigt der Entwickler nun mit der Tab-Taste, so wird der Vorschlag übernommen.

Abbildung 2: GitHub Copilot übernimmt die Implementierung der deklarierten Funktion.

GitHub Copilot übernimmt die Implementierung der deklarierten Funktion.

Alternativ können Sie auch eine neue Funktion deklarieren und Copilot versucht, diese anhand des Funktionsnamens und der Parameter automatisch zu generieren (siehe Abbildung 3).

Abbildung 3: GitHub Copilot implementiert eine Funktion auf Grundlage eines Kommentars.

GitHub Copilot implementiert eine Funktion auf Grundlage eines Kommentars.

Haben Sie bereits eine vorhandene Code-Basis und wollen diese mit Hilfe von Copilot bearbeiten, so markieren Sie den entsprechenden Code und drücken die Tastenkombination CTL+I. Daraufhin öffnet sich direkt im Codefenster ein kleines Chat-Fenster, über das Sie Anweisungen geben können (siehe Abbildung 4).

Abbildung 4: Über das Chat-Fenster kann punktuell Unterstützung angefordert werden.

Über das Chat-Fenster kann punktuell Unterstützung angefordert werden.

Das Ergebnis wird daraufhin direkt in das markierte Code-Fragment eingefügt, wo es durch den Entwickler übernommen oder verworfen werden kann (siehe Abbildung 5).

Abbildung 5: Die Änderungen werden eingefügt und können übernommen oder verworfen werden.

Die Änderungen werden eingefügt und können übernommen oder verworfen werden.

Dies sind nur einige Beispiele, wie Copilot bei der Entwicklung unterstützen kann.

DevOps

Assistenten können nicht nur beim Coden helfen. Auch bei klassischen DevOps-Tätigkeiten, wie dem Entwickeln einer CI/CD-Pipeline, oder der Erstellung einer Cloud-Ressource unterstützt er.

Gerade hier kommen mit YAML, Terraform, Bicep, Power Shell und Co. spezielle Formate und Scripts zum Einsatz, mit denen Entwickler häufig nur temporär zu tun haben und ihnen daher die Erfahrung fehlt.

Hinzu kommen die unzähligen CLI-Tools (Command-Line-Interface), die alle etwas unterschiedlich sind und eine Vielzahl an Parametern anbieten. So ist allein das Management von Kubernetes per CLI oder das Kodieren von Cloud-Infrastruktur per Terraform schon ein Job für sich.

In großen Projekten wird hierfür häufig die Position des DevOps-Engineers geschaffen. Dieser Bereich kann besonders gut automatisiert werden und ist daher ein gutes Beispiel dafür, wie zukünftiges Arbeiten in einem cross-funktionalen Team aussieht. Es besteht nämlich unter Umständen nicht mehr nur aus Menschen, sondern auch aus KIs, die auf bestimmte Tätigkeiten spezialisiert sind.

Schattenseiten

Doch neben all den neuen Möglichkeiten haben Coding-Assistenten auch Nachteile. So können Sie sich z.B. nicht unbedingt darauf verlassen, dass die von der KI vorgeschlagene Lösung auch immer die Beste ist.

Zudem kann es bei exzessivem Gebrauch vorkommen, dass der Entwickler seinen eigenen, vom Assistenten erzeugten Code nicht mehr versteht. Unerfahrene Entwickler können darüber hinaus auf die Idee kommen, dass dies auch nicht erforderlich ist, da man ja schließlich den Assistenten nach Problemen fragen und diese von ihm verbessern lassen kann, ohne das entwickelte Programm selbst zu verstehen.

Außerdem kann es vorkommen, dass der Assistent Fehler bei der Codeerzeugung macht. Dies sollten Sie jedoch nicht überbewerten, da es schließlich auch bei menschlichen Entwicklern vorkommt. Eine gute Idee ist es daher, den Assistenten wie einen sehr schlauen und immer hilfsbereiten Kollegen zu betrachten. Diesen kann man alles fragen, er ist stets bemüht zu helfen, kann sich dabei aber auch mal irren. Dies steigert die Akzeptanz von AI und bewertet mögliche Fehler nicht über.

Ein Blick in die Zukunft

In Zukunft wird es gerade im Bereich Softwareentwicklung zu großen Umbrüchen kommen. Nicht nur durch die neuen Möglichkeiten, die KI bietet, sondern vor allem durch die Automation in der Softwareentwicklung.

Denn nicht nur Big Tech arbeitet an KI-Tools für Entwickler. Kleine Start-Ups, wie beispielsweise Magic aus Österreich, entwickeln spezialisierte Modelle, die sich ausschließlich auf Entwicklungsautomation konzentrieren. So soll dessen geplantes Modell zum Beispiel eine Kontextgröße von 5MB bieten, wodurch bei einer einzigen Anfrage das komplette Repository mit hochgeladen und analysiert werden kann. Hierdurch wird es dann beispielsweise möglich, bestimmte Konventionen oder bereits vorhandene APIs in die Code-Generierung mit einfließen zu lassen. Entwicklungen wie diese werden die Generierung von Code auf eine neue Stufe heben, doch was kommt danach?

Jensen Huang, CEO bei Nvidia, sagte kürzlich, dass Programmieren aus seiner Sicht bald so gut wie überflüssig sei. „Es ist unsere Aufgabe, Computertechnik so zu bauen, dass niemand mehr programmieren muss und dass die Programmiersprache menschliche Sprache ist“, sagte der Firmenchef. Eine steile These und doch ist etwas Wahres dran: Wenn die KI in dem Tempo voranschreitet wie bisher und somit der Grad der Automatisierung steigt, könnte das Feld, in dem Entwickler klassischen Code schreiben, deutlich kleiner werden.

Denn wenn das Modell mehr oder weniger fehlerfrei Code in den unterschiedlichsten Programmiersprachen generieren kann, stellt sich die Frage, wozu die Sprachen dann noch gut sind. Denn eigentlich wurden sie seinerzeit erschaffen, um dem Menschen zu ermöglichen, mit der Maschine zu interagieren. Wenn hierfür zukünftig auch menschliche Sprache ausreichend ist, könnte das Modell auch gleich ausführbaren Maschinencode generieren.

Ansätze hierfür findet man bereits jetzt in ChatGPT‘s Advanced Analytics-Funktion. Mit ihr können Sie beispielsweise Exceldateien hochladen und analysieren lassen oder Texterkennung auf Fotos durchführen. Hierbei wird das LLM lediglich zur Sprachein- und ausgabe verwendet und die eigentliche Funktionalität durch sogenannte Function Calls durchgeführt – kleine Funktionen, die einen bestimmte Aufgabe erfüllen. Der Clou ist hierbei, dass der Funktionscode generiert und ausgeführt wird.

Aber egal wie dystopisch man in die Zukunft blickt, ein Satz bleibt bestehen: Digitalisiert wird immer! So wird es höchstwahrscheinlich nicht zu einem Big Bang kommen, der alle Entwickler arbeitslos macht, doch wird die Szene einen Wandel durchlaufen. Entwickler werden sich weniger mit dem Schreiben von Code beschäftigen, sondern höherwertige Aufgaben, wie Architektur, Integration und KI übernehmen. Bei Letzterer wird es vor allem um das Thema Prompt Engineering gehen.

So oder so: Die Zukunft wird spannend!

Titelmotiv:

Photo by Christopher Gower on Unsplash

Jörg Neumann

Große Auswahl an günstigen Domain-Endungen – schon ab 0,08 € /Monat
Jetzt Domain-Check starten