Alle sprechen über GitHub Copilot, und ihr habt sicher auch schon viel darüber gehört. Mit diesem revolutionären Tool können Programmierer Code effizienter und in besserer Qualität schreiben. Deshalb bin ich überzeugt: KI-gestützte Programmierung ist gekommen, um zu bleiben. Falls ihr GitHub Copilot noch nicht kennt: Es ist ein KI-Pair-Programmer, der Machine Learning nutzt, um direkt in eurer bevorzugten IDE Code-Snippets vorzuschlagen und Codezeilen zu vervollständigen.
Antti Kalliokoski
Antti is a software architect who has been writing code for over 30 years and is still learning new things. He adores modern open source ideology and competence sharing.
In diesem Blog betrachten wir Copilot aus der Perspektive eines Java-Entwicklers und erläutern, wie die unten aufgeführten Praktiken und Prinzipien auch auf andere Sprachen anwendbar sein können.
Copilot oder ChatGPT?
In der Welt der künstlichen Intelligenz gibt es einige Tools, die euch bei eurer Arbeit unterstützen können: ChatGPT und GitHub Copilot.
ChatGPT ist ein KI-Sprachmodell, das menschenähnliche Sprache generiert und Aufgaben der natürlichen Sprachverarbeitung übernimmt, etwa Übersetzungen und Zusammenfassungen. ChatGPT kann menschenähnliche Antworten auf verschiedene Anfragen erstellen und wurde mit vielfältigen Textdaten wie Nachrichtenartikeln, Büchern und Webseiten trainiert.
Copilot hingegen ist ein KI-gestützter Coding-Assistent, der mit großen Mengen an Codedaten trainiert wurde und sich mit der Zeit an den Coding-Stil und die Präferenzen eines Entwicklers anpassen kann. Er analysiert den bereits geschriebenen Code sowie den Kontext der aktuellen Coding-Session, um Code-Snippets vorzuschlagen und Code automatisch zu vervollständigen. Außerdem kann Copilot Dokumentation und Beispiele bereitstellen, die Programmierern helfen, besseren Code zu schreiben.
Copilot basiert auf OpenAIs Modell GPT-3 zur natürlichen Sprachverarbeitung. Dadurch kann es Befehle in natürlicher Sprache verstehen und daraufhin Code generieren. Es unterstützt mehrere Programmiersprachen, darunter Java, Python, JavaScript, TypeScript, Ruby, Go und Rust.
Es schreibt Code mit euch
Die Codevervollständigung beschleunigt das Programmieren, indem sie auf Basis anderer Inhalte längere Snippets und Methodennamen vorschlägt – etwa Vorschläge für Repository-Klassen auf Grundlage von Domain-Klassen. Auch bei längeren Snippets und der Benennung von Methoden bleiben Code-Konventionen erhalten. Die Codevervollständigung kann nützlich sein, wenn Code geschrieben wird, der in den meisten Projekten benötigt wird, beispielsweise für die Verarbeitung von Repositories. Sie ermöglicht das schnelle Generieren grundlegender Strukturen, sodass sich Entwickler auf das zu lösende Problem konzentrieren können, statt umfangreiche Implementierungen zu schreiben.
Auf das Wesentliche konzentrieren
Der größte Produktivitätsschub durch Copilot besteht darin, dass Entwickler sich auf Herausforderungen konzentrieren können, statt immer wieder denselben Code zu schreiben. Beim Aufbau von Microservices sind beispielsweise die ersten mehr als 100 Zeilen immer gleich – das könnte gefühlt sogar ein Affe erledigen. Aufgrund des Datenmodells und anderer projektspezifischer Details müssen sie jedoch jedes Mal anders geschrieben werden, insbesondere bei Projekten mit mehreren zu entwickelnden Microservices. Mit Copilot lässt sich dies einfach automatisch generieren. Entwickler können sich dann auf spezifische analytische Herausforderungen und kreative Problemlösungen konzentrieren, statt mühsamen Boilerplate-Code zu schreiben, den ihr nicht einfach kopieren und einfügen könnt.
Best Practices etablieren
Bei der Entwicklung eines Produkts in größerem Umfang können sich die Coding-Konventionen von Entwickler zu Entwickler unterscheiden. Oder es gibt zumindest kleine Fehler bei Konventionen wie Einrückungen, Leerzeichen usw. Für Java gibt es weit verbreitete und allgemein akzeptierte Konventionen, beispielsweise Klassen mit einem Großbuchstaben und Methoden sowie Methodennamen mit einem Kleinbuchstaben zu beginnen, etwa class Car und method getTires().
Copilot erleichtert es erheblich, Code-Konventionen einzuhalten, und verbessert so die Codequalität im gesamten Team. Da es anhand von Best-Practice-Modellen trainiert wurde, hilft es auch dabei, besser testbaren Code zu schreiben. Außerdem vereinfacht Copilot Code Reviews: Die Code-Konventionen werden bereits eingehalten, sodass sich Reviews auf die Funktionalität statt auf Konventionen konzentrieren können.
Es setzt die Anwendung von Best Practices nicht voraus. Da es jedoch mit ihnen trainiert wurde, basieren seine Vorschläge auf Best Practices.
Ihr müsst verstehen, was ihr tut
Habt ihr schon Dutzende Methoden geschrieben und festgestellt, dass ihr keine Unit Tests eingerichtet habt? Auch hier ist es mühsam und nicht besonders angenehm, Tests für jede Methode einzeln zu schreiben. In diesem Fall müsst ihr jedoch wissen, was ihr tut. Möglicherweise schreibt ihr Java-Code in einer stark regulierten Umgebung, etwa im Banken- oder Medizinbereich. Tests zu haben, ist eine Sache – aussagekräftige Tests zu haben, eine andere. Bei regulierten Projekten muss außerdem immer jemand solche Tests korrekt ausführen.
Mit Copilot könnt ihr Boilerplate-Code für Testfälle aller vorhandenen Methoden einfach automatisch ausfüllen. Dennoch müsst ihr euch darauf konzentrieren, was ihr eigentlich testet. Copilot erleichtert das Testen, denkt aber nicht für euch. Deshalb müsst ihr wissen, was ihr tut, um aussagekräftige und funktionierende Tests zu schreiben. In einigen Fällen sind wir beispielsweise bei automatisch generierten Tests auf Division-durch-Null-Fehler gestoßen.
TL;DR: GitHub Copilot ist ein großartiger Assistent
GitHub Copilot markiert den Beginn einer neuen Ära für Entwickler! Im Gegensatz zu früheren IDEs, die auf der einfachen automatischen Vervollständigung von Methodennamen anhand der Dokumentation basieren, ist dieses KI-gestützte Tool ein großer Fortschritt. Es und andere ähnliche Tools revolutionieren die Arbeitsweise von Entwicklern. Wenn ihr euch also fragt, ob ihr es ausprobieren solltet, lautet die Antwort: ja.
- Software development
- CI/CD
Subscribe to our newsletter
Related blogs