Ein Blick auf Github Copilot und andere Tools

Rund um die Softwareentwicklung gibt es eine Myriade an Methoden, Vorgehensmodellen, Ökosysteme, Plugins, Sprachen, Architekturen und Best Practices. Darüber hinaus ist der ganze Komplex „Softwareentwicklung“ stehts im Wandel – neue Anforderungen, neue Programmiersprachen, neue Tools. Und überhaupt, wo finde ich heutzutage eigentlich die ausgebildeten Fachkräfte für all diese Technologien? Viele Faktoren tragen dazu bei, dass eigens durchgeführte Softwareentwicklung manchmal teuer, mitunter riskant sein kann.

Je nach Ausprägung eines Problems, das mit Software aus dem Weg geräumt werden soll, gibt es natürlich verschiedene Lösungen. Manchmal reicht eben der Griff zu Kaufsoftware, entweder on-premise oder SaaS, heutzutage gerne auch No- oder Low-Code. Für letztere bescheinigt die Realität, tatsächlich eine Verringerung der Arbeitslast und eine Verschiebung von Aufwänden aus der IT in den Fachbereich. Damit einhergehend minimieren sich auch Reibungseffekten an entsprechenden Schnittstellen zwischen IT und Fachbereich.

KI-gestützte Coding-Tools als Enabler bei Software-Eigenentwicklungen? – Ein Blick auf Github Copilot

Dann wiederum gibt es Situationen in denen muss eigene Software her. Es gibt gute Gründe Software selbst zu entwickeln. Zum Beispiel, wenn es für ein spezifisches Problem keine fertige, marktreife Lösung gibt, oder wenn man sich durch eine eigene Lösung einen signifikanten Vorteil am Markt verspricht. In Zeiten des Fachkräftemangels macht es Sinn die kostbaren Entwicklerressourcen zu pflegen und zu enablen; ja möglichst effizient einzusetzen. Für den Vorgang der Programmierung, also der ureigenen Aufgabe eines Softwareentwicklers, hat Github hier vor einiger Zeit eine spannende KI-basierte Optimierungslösung in der technischen Vorschau vorgestellt – den „Github Copilot“.

Schematische Darstellung der Funktionsweise des Github Copiloten: Basierend auf öffentlich-zugänglichem Code wurde das KI-System Codex trainiert, das wiederum als Basis für die IDE-Integration mittels Github Copilot dient.
Schematische Darstellung der Funktionsweise des Github Copiloten: Basierend auf öffentlich-zugänglichem Code wurde das KI-System Codex trainiert, das wiederum als Basis für die IDE-Integration mittels Github Copilot dient.

Bei dem besagten Copiloten handelt es sich laut Github um „your AI pair programmer“, also eine künstliche Intelligenz, die zu Diensten ist, wenn dem Programmierer mal wieder trotz oder gerade wegen der fünften Tasse Kaffee der Kopf raucht und es einfach nicht klappen will eine elegante Lösung für die vor zyklomatischer Komplexität strotzenden Methode zu finden. Technologisch basiert der Copilot auf dem von OpenAI entwickelten KI-System Codex, dem eigentlichen Helden unserer Geschichte. Trainiert auf öffentlich zugänglichem Programmcode und natürlicher Sprache ist ein leistungsfähiges KI-Modell entstanden, das eine Schnittstelle zwischen eben jenen beiden Inputtypen schaffen will. Der Github Copilot ist dann eine Integrationsschicht über Codex und fügt dessen Funktionalitäten vollumfänglich dem vorhandenen Code-Completion-Tooling einer IDE (z.B. VSCode oder IntelliJ) hinzu (siehe auch Abbildung).

Wie sehen die Fähigkeiten des Github Copilot aus?

Gemeinsam mit einem Kollegen habe ich kürzlich einen Blick auf die Fähigkeiten des Copiloten geworfen. Und was soll ich sagen. Er kann sogar Witze generieren. Kostprobe gefällig? Nach der Aufforderung „Tell me a joke“ in einem Codekommentar erscheint beim Tippen eines Konsolenlogs der automatische textuale Vorschlag:

„What did the cheese say when it looked into the mirror?“ – „Hello-me (Halloumi)“

Außerdem gibt es Antworten auf wichtige Fragen der Zeit. Die Variable „isCovid19Real“ wird automatisch mit „true“ initialisiert. Gleiches gilt für die Variable „areBirdsGovernmentSpies“. Manches ist also einfach wahr, anderes ist zum Schmunzeln.

Tatsächlich kann der Github Copilot aber deutlich mehr. So lassen sich über natürliche deskriptive Sprache in Kommentaren, oder in einem Methodennamen entsprechende Implementierungen generieren. Die so entstandene Implementierung lässt sich durch fortlaufende Kommentare sogar weiter verfeinern. Das funktioniert im Test erstaunlich gut. So konnten wir in Sekundenschnelle eine Methode generieren, die beispielsweise sukzessive Fibonacci-Zahlen ausgibt und ein String-Prefix zu jeder Zahl hinzufügt. Ebenso erhielten wir eine saubere Lösung für die Berechnung eines Zeitunterschieds in einer beschriebenen Zeiteinheit für zwei als Methodenparameter übergebene Zeitformate. Ändern wir den Objekttyp eines der übergebenen Methodenparameter adaptiert der Copilot automatisch die Implementierung. Hilfreich ist auch: In der Regel erhalten wir für ein Problem verschiedene Vorschläge, aus denen wir eine möglichst passende Lösung wählen können. Dabei ist der Copilot keine Suchmaschine, sondern ein „Code Synthesizer“. Laut Github-eigener Studie ist ein Großteil des generierten Codes einzigartig in Relation zur herangezogenen Datengrundlage. Dieser Einzigartigkeit sind aber natürlicherweise, wie in jedem deskriptiven System mit Regeln und Limitierungen, Grenzen gesetzt. Schlimm ist das nicht, solange eine Konvergenz zu einer optimalen Lösung besteht.

Wie nützlich ist ein KI-gestütztes Coding-Tool?

Damit kann der Github Copilot zumindest teilweise den Browsercache entlasten, denn einige der offenen Stackoverflow-Browsertabs eines jeden Entwicklers können jetzt geschlossen werden und geschlossen bleiben. Stackoverflow und andere Diskussionsseiten rund um Programmierung sind aber bisher nicht nur ein natürlicher Lösungsquell in den Programmierstuben dieser Welt, sondern eben auch echte Erklärungsgeber. Will man also verstehen warum eine Lösung eventuell gut und nützlich ist und sich beim nächsten Mal eine Internetsuche sparen, muss man auch weiterhin den Kontakt zu anderen realen Programmierern suchen. Für erfahrene Entwickler ist der Copilot als intelligentes Code-Completion-Tool „out-of-the-box“ hilfreich, um schnell erste Implementierungsvorschläge ganzer Methoden oder für bestimmte Problemstellungen im Tagesgeschäft zu generieren. Für weniger erfahrene Entwickler liefert der Copilot immerhin erste Anhaltspunkte deren Nutzen im Nachgang hinterfragt werden sollte. Denn die größte Gefahr bei der Verwendung eines solchen Tools besteht in der blinden Anwendung. Werden Vorschläge einfach in eine neue Codebasis übernommen, ohne ihre Sinnhaftigkeit für das spezifische Problem nochmal zu hinterfragen, kann dies im Zweifel bedeuten, dass „schlechter Code“ (z.B. Bugs, schlechte Performance) entsteht.

Was sind die Limitierungen KI-gestützter Programmierung?

Im Kern ist Programmierung ein kreativer Vorgang. Innerhalb eines Systems mit bestimmten Regeln (einer Programmiersprache, Frameworks etc.) müssen Lösungen für vorher bekannte und manchmal unbekannte Probleme mit „Bordmitteln“ gefunden werden. Diese Lösungen sollten situativ robust, optimiert und verlässlich sein. Dabei spielt natürlich auch der Bezug zur übrigen Codebasis und Architektur eine Rolle.

Künstliche Intelligenz orientiert sich immer an Daten. Diese Daten müssen vorher auf die eine oder andere Weise erzeugt werden. Für Programmiersprachen wie JAVA, C++ und Python existiert hier natürlich eine große Menge an öffentlich-zugänglichem und qualitativ hochwertigem Code, der von verschiedenen Programmierern für die unterschiedlichsten Situationen geschrieben wurde. Entsprechend gut werden die Vorschläge der KI sein. Doch selbst dann sind die Vorschläge mit Vorsicht zu genießen. Ein Github-eigener Benchmark offenbart, dass derzeit nur circa 43% der Implementierungsvorschläge beim ersten Versuch vollständig richtig von der KI umgesetzt werden. Darüber hinaus besteht die Gefahr der Reproduktion von unsicheren „Coding Patterns“, dem Einfügen von Bugs oder der Verwendung von nicht mehr zu verwendenden APIs. Github selbst schreibt:

 „There’s a lot of public code in the world with insecure coding patterns, bugs, or references to outdated APIs or idioms. When GitHub Copilot synthesizes code suggestions based on this data, it can also synthesize code that contains these undesirable patterns.“

Ebenso lässt sich schlussfolgern, dass bei der Verwendung neuer Programmiersprachen die KI entsprechend größere Probleme haben wird gute und sinnvolle Vorschläge zu generieren. Der Teufel steckt aber im Detail. Viele Programmiersprachen ähneln sich. Hier kann die KI sicherlich von einer breiten Datengrundlage profitieren.

Welche weiteren Tools für KI-gestützte Programmierung gibt es?

Doch nicht nur Github, eine Plattform, die übrigens zu Microsoft gehört, arbeitet an KI-gestützten Programmiertools. Ebenfalls erwähnenswert sind Anbieter wie Tabnine, Kite oder Sourcery, die ähnliche Ansätze verfolgen. Tabnine und Kite bieten dabei Unterstützung für verschiedene Programmiersprachen, Sourcery beschränkt sich auf die Unterstützung von Python. Keines dieser Tools geht jedoch so weit wie der Github Copilot bzw. Codex, das die Erstellung von Code allein basierend auf natürlicher Sprache erlaubt. Dem Github Copiloten vorausgegangen waren Microsoft-Initiativen wie DeepCoder oder die Bemühungen des Forschungsprojektes PROSE. Doch auch andere Tech-Unternehmen setzen auf KI-gestützte Programmierung. Google verwendet z. B. bei dem Tool AutoML gezielt die Fähigkeiten einer KI, um wiederum bessere KI-Systeme zu schaffen und so auch weniger erfahrenen Entwicklern die Möglichkeit zu geben Machine Learning zu betreiben. Amazon entwickelte das KI-Tool CodeGuru, um Entwicklern die Möglichkeit für ein intelligentes Code-Review zu geben.

Werden Programmierer durch den Einsatz von KI in Zukunft überflüssig?

Angesichts dieser rasanten Entwicklung im Bereich der KI-gestützten Programmierung stellt man sich als Zukunftsenthusiast natürlich auch die Frage, ob ein KI-basiertes System auf absehbare Zeit einen Programmierer ersetzen kann? Derzeit kann man diese Frage deutlich mit „Nein“ beantworten.

Für Softwarelösungen werden sich mittelfristig wohl Kauf-, Low- und No-Code-Lösungen überall dort durchsetzen, wo es nichts Originäres und im Kern Innovatives umzusetzen gibt. Diesen Lösungen ist gemein, dass gleicher Code für gleiche Probleme verwendet wird und dieser vom Anbieter im besten Fall durchoptimiert ist. Kurz- und mittelfristig ist die Sinnhaftigkeit eines KI-Programmierer-Ansatzes in solchen Situationen sicherlich begrenzt.

Kommt es zu einer Eigenentwicklung beeinflusst die Wahl der Technologie, die geplante Architektur und die Komplexität der zugrundeliegenden Funktionen die Möglichkeiten zum Einsatz eines KI-Programmierers. Doch auch selbst unter optimalen Voraussetzungen muss man derzeit noch feststellen: Der generierte Code kann nur als Unterstützung dienen, er ist nicht fehlerfrei und lässt sich nicht ohne weiteres automatisch in den komplexen Kontext einer Anwendungslandschaft integrieren.

KI-Systeme lassen sich heutzutage gezielt einsetzen, um die Effizienz von Entwicklern in ihrer täglichen Arbeit zu steigern. Den Einsatz moderner Systeme zu fördern, zahlt sich also direkt auf die Effizienz von Eigenentwicklungsprojekten aus. Plakativ gesprochen: Man kann mutmaßen, dass sich so unter Umständen sogar dem Fachkräftemangel zeitweilig ein Schnippchen schlagen lässt. Programmierer durch eine künstliche Intelligenz gänzlich zu ersetzen vermag man aber noch nicht. Nur ein menschlicher Programmierer kann derzeit Programmcode basierend auf komplexen Spezifikationen und Anforderungen umsetzen, die Verknüpfung eines vielschichtigen Techstacks realisieren, oder schwierige Problemstellungen lösen. Auch für die Zukunft lässt sich erwarten, dass sich die Rolle des Softwareentwicklers nicht auflöst, sondern schlichtweg wandelt. Anstatt selbst Code zu schreiben, kuratiert ein Softwareentwickler in Zukunft vielleicht vor allem Daten, auf deren Grundlage eine KI effizient Code schreibt. Vielleicht werden wir am Ende alle Data Scientists.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

41  +    =  47

Verwandte Artikel
Insurance and Metaverse
Mehr

Insurance and Metaverse

Potenziale für Versicherer in digitalen Welten Virtuelle Parallelwelten existieren bisher vor allem im Gamingbereich. Prominente Beispiele sind hier unter anderem Fortnite, World of Warcraft und…