GitHub CoPilot hat für mich das Internet, Stack Overflow und alle anderen Hilfen, auf die man so beim Programmieren zurückgreifen kann, ersetzt. Spaß bei Seite GitHub CoPilot ist eine KI, die euch unterstüzen soll beim Programmieren. Die KI hinter GitHub CoPilot ist von OpenAI der KI Partner von Microsoft – dabei handelt es sich um das Codex Modell basierend auf GPT-3. Dieses ist bewusst darauf ausgelegt, effizient mit Code Generierung umgehen zu können.
Kosten: Zu Anfang ist vielleicht wichtig zu wissen, dass GitHub CoPilot nicht kostenlos ist, es gibt für private Personen einen Testzeitraum von 3 Monaten, danach kostet es entweder 10$ im Monat oder 100$ im Jahr (bei jährlicher Abbuchung). Eine Frage, die wir auch beleuchten wollen, lohnt sich das für die Hobbyprojekte?
CoPilot gibt es für sehr viele Editoren, die gesamte mir bekannte JetBrains Familie von IDEs wird unterstützt von Android Studio, über GoLand und PyCharm bis zu RustRover. Zusätzlich natürlich auch der Code Editor von Microsoft Visual Studio Code und die IDE Visual Studio und auch Azure Data Studio – mit dem Azure Data Studio kannst du eine Verbindung zu deinen Datenbankservern herstellen und in diesen arbeiten. Ebenfalls werden auch noch die Klassiker VIM und das etwas moderne Neovim unterstützt, mit entsprechenden Erweiterungen. Auf der Dokumentationsseite von GitHub CoPilot findest du alle Informationen für die Einrichtung in deinem Editor/deiner IDE. Persönlich arbeite ich primäre mit Visual Studio Code, da ich vorwiegend viel Webentwicklung mache und eigentlich jede andere Sprache gut unterstützt wird, ist dieses meine erste Wahl. Gelegentlich arbeite ich noch mit IntelJ & PyCharm von JetBrains für Java & Python – diese sind aber eher die Ausnahmen.
Inzwischen verwende ich selbst als Entwicklungsumgebung Neovim, und auch dafür gibt es entsprechende Integrationen, die gut funktionieren. Dabei kann ich dir Folgende empfehlen, diese fühlen sich in der Verwendung mehr als gut an. Für die Chat-Funktionalität gibt es, Stand heute (Juli/2024), kein Plug-in von Github selbst für Neovim.
Offizielles Plugin: https://github.com/github/copilot.vim
Meine Empfehlung, diese beiden sind bei mir inzwischen häufig im Einsatz, um sich noch einmal eine andere Anschauungsweise geben zu lassen.
Die Einrichtung in einer der JetBrains IDEs geht sehr einfach über den Marketplace, dort kannst du einfach nach dem „Github CoPilot“ Plugin suchen und dieses installieren. Anschließend muss man sich noch mit seinem GitHub Account unter dem Menüpunkt Tools → GitHub CoPilot einloggen und kann bereits loslegen. Unter Visual Studio Code läuft die Einrichtung ebenfalls sehr einfach ab, dort gibt es drei Erweiterungen „GitHub CoPilot“, „GitHub CoPilot Chat“ und „GitHub CoPilot Labs“.
Github CoPilot Chat ist aktuell nur in Visual Studio und Visual Studio Code verfügbar für individuelle Subscriptions (Privatpersonen). In den JetBrains IDEs nur für CoPilot Business Abos, es muss allerdings im Abo ein Account Manager existieren. In diesem Erfahrungsbericht werde ich von privaten Personen ausgehen, da diese auch dem entspricht, was ich testen konnte.
Was wir hier schon mal festhalten können, man merkt den Einfluss von Microsoft auf Github und dessen Entwicklung am CoPiloten. Alle neuen Funktionen werden für private Abos primäre in Visual Studio & VSC als Erstes veröffentlicht und entwickelt, da das eigene Ökosystem bei einem Unternehmen wie Microsoft im Fokus steht. Falls du dich für weitere Erweiterungen für Visual Studio Code interessierst, kann ich dir meinen Artikel „Top 10 Erweiterungen für Visual Studio Code“ empfehlen.
Es gibt insgesamt drei Erweiterungen für Visual Studio Code, die Basissoftware für die Code-Ergänzungen, den Chat, um mit CoPilot direkt interagieren zu können, und die Labs Erweiterung, was einem Labor entspricht. In der Entwicklung ist es üblich verschiedene Labore zu haben, um bestimmte Szenarien zu testen, sei es ein Hardwarelabor, diese sind extra geschützte Umgebungen, wo verschiedene Experimente gemacht werden können. Bei Software gibt es ebenfalls Labore, wo neue Funktionen wie Alpha & Beta-Versionen getestet werden, um festzustellen, ob diese zuverlässig funktionieren und insbesondere hilfreich für die Nutzer der Software sind.
Der CoPilot selbst schlägt euch beim Schreiben eures Codes Ergänzungen vor für den nächsten Schritt oder auch den gesamten Funktionskörper basierend auf dem Funktionskopf. So kann GitHub CoPilot zum Beispiel erkennen, dass ich einen UUID v4 Funktion schreiben möchte, allerdings kann man an diesem Beispiel schon ein Nachteil erkennen, aber nur mit den entsprechenden Erfahrungen.
Und zwar verwendet diese Funktion zum Beispiel keinen Kryptografisch sicheren Zufall, diese kann sinnvoll sein, wenn viele UUIDs kurz nacheinander generiert werden soll, da mittels Math.random() Doppelungen deutlich schneller als bei einem Kryptografisch sicheren Zufall auftreten können. Unabhängig sollte man die Ergebnisse immer prüfen, wenn man nur eindeutige (Unique) UUIDs wünscht.
An der Stelle könnte jetzt ein erfahrener Entwickler auf die Idee kommen, ich möchte dem CoPiloten sagen, was er explizit erledigen soll. Mittels der CoPilot Chat Erweiterung ist diese Entsprechende möglich, wie das folgende Beispiel zeigt. Mittels CMD + I unter macOS oder Strg + I unter Windows kann dieses Interface abgerufen werden, worüber die erzeugende Funktion oder auch der Code spezifischer beschrieben werden kann.
Das generierte Ergebnis war theoretisch „ok“. Allerdings hatte diese dann immer noch ein Nachteil, und zwar hat NodeJS wofür ich diese Funktion benötige im Crypto Paket seit NodeJS 14.7 (aktuell 21.1.0) bereits eine interne Funktion, mit dem wundervollen Namen randomUUID. Diese ist exakt die Funktion, die ich mir gerade schreiben wollte, mittels Google zum Vergleich konnte ich diese Methode innerhalb von 10 Sekunden finden und anwenden. Das Schwierige für CoPilot ist, dass er den Code nicht erklären kann oder einen Gedankengang wie er dazu kommt das Verfahren X das richtige ist, um zum programmatischen Zielen zu kommen. Erst nach einem expliziten Nachfragen konnte ich ihn dazu bringen randomUUID vorzuschlagen und zu verwenden.
Zusätzlich gibt es im Chat noch sogenannte Befehle, die einem helfen sollen, explizite Fragen an CoPilot zu stellen /doc
, um einen Dokumentationskommentar zu einer Funktion erstellen zu lassen. Die /test
Methode um primäre Unit-Tests erstellen zu lassen oder auch /fix
um den Code korrigieren zu lassen. Die meisten dieser Befehle fühlen sich an wie Shortcuts anstatt selbst einfach zu Schreiben „Erstelle mir einen Dokumentationskommentar zu meiner Funktion“.
Das CoPilot Labs kam mir in meinem Test vor, wie eine Hilfe für den GitHub CoPilot Chat, der die Interaktion noch einmal vereinfacht durch Tools wie Language Translation, um zum Beispiel Golang Code in PHP konvertieren zu lassen. Auch das Generieren von Unit-Test für Makierte Funktionen ist hierüber wieder möglich, wie auch schon mit der Chaterweiterung an sich. Zusätzlich gibt es noch „Brushes“ diese sind wirklich einfach nur Buttons mit Shortcuts, über den Custom Button können auch eigene angelegt werden. Also, wenn ich eine Erweiterung persönlich nicht benötige für GitHub CoPilot ist es definitiv die Labs Erweiterung.
Im November 2022 habe ich meine erste Testphase von 3 Monaten mit GitHub CoPilot gestartet. Zu diesem Zeitpunkt gab es bisher nicht die Chaterweiterung. Zu Anfang hat es sich vollkommen unnatürlich angefühlt, immer diese Vorschläge zu erhalten, da sie häufig auch nicht präzise waren. Was ich rasant merken konnte, dass, es auch stark von den Programmiersprachen abhängig war, in JavaScript und Python waren die Ergebnisse schon gut genug, um aktiv damit arbeiten zu können. In Flutter bzw. Dart hat es mich einfach nur gestört und war selten eine Hilfe in der Produktivität & Geschwindigkeit des Tippens, da es mich persönlich mehr aus meinem Programmiere Fokus herausgezogen hat als geholfen.
Ein Bereich, der damals bei mir schon einen sehr positiven Eindruck hinterlassen hat, war immer dann, wenn es um Datenbank Querys ging, die man Schreiben musste, sei es die MongoDB Query Language oder SQL. Bei meinen meisten Projekten muss ich eigentlich nur am Anfang meine Querys gut einmal vorbereiten und danach editiert man diese nur selten, weshalb ich dort auch nicht so fortgeschritten bin zum jetzigen Zeitpunkt. Dort ist mir CoPilot bei einem Projekt wirklich nachhaltig in Erinnerung geblieben, von sechs Stunden Querys schreiben zu einer Stunde mit CoPilot, das war definitiv ein hervorragendes Ergebnis.
Also mein Fazit im November 2022 beim ersten Test war, es kommt sehr stark darauf an, welche Funktionen zurzeit implementiert werden müssen und wie stark man sich auf GitHub CoPilot verlassen kann. Einfache Funktionen wie ein isOdd, isEven sind sicherlich weniger Tipparbeit als diese selber zu schreiben oder auch SQL Querys. Aber wenn es auch darum geht die Konzepte für eine Funktion zu planen, wo es auch sehr stark um die Architektur und Strukturierung geht, um die Funktionen gut implementieren zu können, wird es etwas haariger. Damals hatte ich auch noch die Sorge, wenn ich nun alles mit CoPilot mache und neue Sprachen lernen, lerne ich Muster die Funktionieren können, aber nicht der Konvention der Programmiersprache entsprechen können. Aus diesem Grund und der weiteren Sorge, dass ich ohne CoPilot nicht mehr zuverlässig arbeiten kann, habe ich mich dann entschieden, mein Abo zu beenden.
Im Oktober 2023 sitze ich nun hier und bin mit der Entwicklung eines Redesigns und einer kompletten neuen Programmierung mit Golang, NodeJS, Nuxt & Vue und Hasura beschäftigt. Und stehe vor dem Problem, dass es eine extrem aufwendige neue Programmierung ist, wofür man eigentlich ein ganzes Team von Programmierer:innen einsetzen könnte. Allerdings bin ich nur eine Person und mein Gedanke war, als ich gemerkt habe meine erste mir selbst gesetzte Frist werde ich nicht halten können, ich benötige eine Methode, um schneller & fokussierter zu werden. Angesichts dessen habe ich mich entschieden noch einmal GitHub CoPilot eine Chance zu geben und zu versuchen so schon mal die Performance zu erhöhen.
Das Erste, was ich direkt positiv feststellen konnte, war die Ergänzung um den CoPilot Chat, den es im November 2022 bisher nicht gab. Im November 2022 habe ich über sehr lange Funktionsnamen und Kommentare immer versucht ihm etwas expliziter Anweisungen zugeben für bessere Ergebnisse, was aber dann eigentlich mehr Zeit gekostet hatte, da es meistens miserabel funktionierte.
Durch den Chat konnte ich viel besser Anweisungen mitgeben, eine Aufgabe, die ich mir sehr gerne abnehmen lasse, vom Chat ist das Erstellen von TypeScript Typen. Meistens habe ich bereits ein JSON Dokument, das meinem späteren Typ entspricht, diesen kann ich einfach in CoPilot Chat werfen, um den passenden TS Typen zu erhalten.
Zu Anfang meines erneuten Tests habe ich bei KIs häufig die Problematik festgestellt, dass sie Nuxt in Version 3 bisher nicht kennen, da diese erst im Januar 2023 veröffentlicht wurde. Bei spezifischen Fehlern bekommt man also eher selten hilfreiche Antworten, es fühlte sich eher an wie ein Zufallstreffer. Zu Anfang meines CoPilot Test hatte mir die KI auf die Frage, wann Nuxt 3.8 herausgekommen ist noch geantwortet, dass 2.15.7 die aktuellste Version sei, diese ist ungefähr einen Monat her. Inzwischen zum Zeitpunkt, als ich diesen Testbericht finalisiere, ist immerhin Nuxt 3 bekannt, für Nuxt mag es inzwischen besser funktionieren, ich kann mich grundsätzlich über die Qualität nicht beschweren.
Einen weiteren positiven Punkt, den ich feststellen konnte, ist, dass die KI mit dem Context etwas besser arbeiten kann als in der Vergangenheit. Ich habe zum Beispiel GraphQL Mutations für verschiedene Typen, meine Dateien sind fast identisch aufgebaut von der Struktur. Wenn nun eine neue Datei für einen neuen Typen erstellt werden muss und noch eine weitere von einem anderen Typen offen ist, erkennt CoPilot die Strukturen hervorragend und kann einen gut dabei unterstützten wieder einen ähnlichen Aufbau zu wählen.
Ein Nachteil ist mir hier aber auch zügig bewusst geworden, wenn man wenig Erfahrung hat oder gerade in einem absoluten Tunnel des Fokus steckt, die KI kann einem nirgends Tipps zur Architektur ausgeben. In meinem Szenario wäre es viel sinnvoller Gewesen direkt auf Generics & Interfaces zu setzen um den Code kürzer und lesbarer zu halten. Diese sind nach wie vor die Grenzen, wo es gute Programmierer benötigt, sobald es darum geht, die gesamte Software und dessen Architektur zu überblicken. CoPilot ist einfach darauf nicht ausgelegt. Einfache Arbeiten können beschleunigt werden, so dass man sich für die komplexen Themen mehr Denkzeit einräumen kann, auch wenn man unter Zeitdruck steht.
Eine Sorge habe ich Anfangs allerdings recht schnell entwickelt, was ist, wenn man jetzt noch mal ohne CoPilot arbeiten muss, vorwiegend im beruflichen Kontext, schadet der Einsatz von CoPilot der persönlichen Entwicklung? Und tatsächlich würde ich sagen, es kommt auf den Status der persönlichen Entwicklung an.
Für einen Einsteiger in die Programmierung würde ich den Einsatz von GitHub CoPilot nicht empfehlen. Ich finde immer zu Beginn, wenn es darum, geht eine neue Sprache zu lernen, sollte man sich bewusst durch die Syntax und die Erklärungen dazu selbst durchwühlen. Anstatt Vorschläge von GitHub CoPilot entgegenzunehmen, bei CoPilot bekomme ich das Gefühl, dass man nach einiger Zeit abstumpft, um zum Ergebnisse zu kommen. Es wird sich nicht mehr richtig mit einzelenden Funktionen beschäftigt. Bei Programmiersprachen, die man optimal kennt, geht das, dort scanne ich z. B. schnell das Ergebnis und kann erkenne, ob das eine gute Lösung ist und diese auch meinem Performanceanspruch an die Software gerecht wird. Als Anfänger in eine neue Programmiersprache kann, man so im Prinzip nur hoffen, dass es eine gute Lösung ist, ohne diese prüfen zu können. Habe ich die Funktion als Anfänger allerdings selbst geschrieben, muss ich recherchieren und sehe Ansätze, die möglichst von erfahreneren Personen als mir stammen.
Die Emotionen etwas selbst gelöst zu haben, als ein Ergebnis einer KI zu nehmen ist für mich persönlich ein anderes, weshalb ich dieses im Lernen anders wahrnehme. Zusätzlich habe ich diese gemerkt in meine berufliche Rolle, wo ich auch gelegentlich Auszubildende im Bereich JavaScript die ersten Schritte mit kleinen Übungsaufgaben näher bringen. Hier merke ich etwa recht schnell, wenn eine Person ein KI-Tool verwendet hat oder ob es selbst geschrieben wurde, die Qualität der Erkenntnisse bei einer anschließenden Erklärung ist oft deutlich höher.
Es gibt weitere Projekte und Zukunftsideen rund um CoPilot, die ich spannende fand bei meiner Recherche, die uns in Zukunft erwarten werden.
Ein Tool, das ich erst spät gesehen habe, aber jetzt bereits verfügbar ist als Technical Preview, ist die CoPilot CLI, die in die GitHub CLI als Erweiterung hereingelangen werden kann. Mittels der GitHub CLI kann man sich Terminal Befehle erklären lassen, oder auch Anweisungen geben, um eine Command zu erstellen z. B. „ich möchte alle Dateien über 5 GB sehen“ worauf hin mir die CLI folgenden Befehl generiert hat: find . -type f -size +5G
CoPilot for Docs ist ein zukünftiges Projekt, das auch bereits eine Technical Preview hat – allerdings konnte ich mich dafür nur auf die Warteliste setzen, um explizite die Dokumentationen zu bestimmten Programmiersprachen & Frameworks durchsuchen zu können und aktive Fragen zu stellen, das könnte die Problematik lösen, die ich mit Nuxt hatte, dass er dann auf die aktuellen Daten der Dokumentation zugreifen kann und so noch expliziter Antworten kann.
Ein weiteres spannendes Vorhaben ist „GitHub CoPilot for *Your* Codebase“ – dabei soll die gesamte Repository als Context für Antworten und Vorschläge zur Verfügung stehen und nicht nur die offenen Tabs, dies wäre definitiv ein Schritt in die richtige Richtung um die Vorschläge qualitativ hochwertiger zu machen und den Nutzer und dessen Software besser zu verstehen.
Ein häufiges Thema im Zusammenhang mit GitHub CoPilot ist das Thema Datenschutz, GDPR bzw. DSGVO. Dieses Thema ist definitiv nicht zu vernachlässigen, für ein Hobbyprojekt ggf. nicht so kritisch wie in Unternehmen. Ein Punkt, der mir eigentlich direkt aufgefallen ist, nach der Installation, es wird regelmäßig, versucht die Tracking-URL abzurufen copilot-telemetry.githubusercontent.com
. In meinem Pi hole, sind es jetzt nach einem Testzeitraum von einem Monat etwa 5000 Abrufe, macht ~160 Abfragen pro Tag. Das ist mir zu diesem Thema aktiv aufgefallen. Zusätzlich muss einem bewusst sein, dass alles, was im Code Editor passiert, um dir Vorschläge zu generieren, an Microsoft gesendet wird und ob du das willst oder nicht, solltest du dir gut überlegen.
Zum Thema Kritik möchte ich noch mal auf einen Artikel von Heise.de verweisen, wo explizit auf das Thema der ignorierten Lizenzbestimmungen im Detail eingegangen wird im Artikel „KI-Assistent GitHub Copilot will Code nicht klauen, sondern sauber referenzieren“.
Werde ich mein GitHub CoPilot Abo behalten oder sogar noch ausbauen auf ein Jahresabo? Ich bin immer noch sehr hin- und hergerissen, die Qualität ist definitiv noch mal besser geworden und auch GPT-4 soll zukünftig zum Einsatz kommen, das auch noch mal ein Sprung nach vorne sein dürfte. Die 10 $ im Monat ist es mir trotzdem Wert, auch wenn es definitiv noch Kritikpunkte gibt, die Frage, die man sich hier stellen muss, in einem professionellen Umfeld wie viel Arbeitszeit kann ich durch den Einsatz von GitHub CoPilot sparen und sind es diese 10 $ pro Monat wert. Und diese kann ich momentan definitiv mit JA beantworten.
Wenn es allerdings nur um Hobbyprojekte geht, an denen man sich ausprobieren möchte, würde ich definitiv Nein sagen, da es da nicht darum geht schnell voranzukommen, sondern primär zu lernen und sich weiterzuentwickeln. Bei meinem aktuellen Projekt in der Programmierung von HelloCoding handelt es sich für mich schon um ein großes Projekt mit eigenem Editor für Artikel etc. da lohnt sich die Zeitersparnis definitiv, da ich so noch mal mehr Zeit zur Verfügung habe und trotz CoPilot wird es sicherlich nicht langweilig.
Konntest du bereits Erfahrungen mit GitHub CoPilot sammeln? Wie ist es für dich, damit zu arbeiten, hast du am Anfang auch gezweifelt? oder dich gegen den Einsatz entschieden, was waren deine Gründe?
Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "GitHub CoPilot, ein Partner für alle Fälle? Mit KI Programmieren."!