Den 1. juli 2022 havde vi kaffebar på Nytorv. På dagen diskede Povl Kvols op med spændende kaffedrinks, og derudover var der også et par korte tekniske indlæg af Jakob Bendsen (GitHub Copilot) og Jesper Terkelsen (Linkerd).

Her fortæller Jakob Bendsen om Github Copilot

Github Copilot er en ny facilitet, som Github har udviklet sammen med OpenAI og deres ejer – Microsoft. Idéen er, at tilbyde en ‘assistent’, der foreslår kodeblokke ud fra den aktuelle kontekst i IDE’erne – altså kort sagt en slags auto-complete på steroider. Jakob har haft lejlighed til at lege lidt med Copilot – som p.t. er i beta – og delte ud af sine foreløbige erfaringer i et kort oplæg, hvor han demonstrerede Copilot brugt som plugin i VS Code IDE’et.

Mere eller mindre begavede autocomplete-funktioner har vi kendt til i mange år og specielt for de typestærke sprog, kan de være ganske effektive. Copilot er dog et ganske andet dyr, da det baserer sig på en Machine-Learning-model, der er trænet med enorme mængder tekst og mange/alle de offentlige Github-repos. Derfor har Copilot ikke alene en god ‘forståelse’ for programmeringssprog, men også et kendskab til sammenhænge i verden generelt. Her er et typisk eksempel på hvordan man vil bruge Copilot. Den er installeret som et plug-in i IDE’et – her VS Code – og scanner løbende teksten i editoren og kommer med forslag. En typisk måde at interagere med den er via kommentarer i koden, hvor jeg starter med et erklære min intention, fx:

//an array with 10 unique capitols and their average temperature 

Og Copilot kommer med et forslag ud fra ‘konteksten’ som er kommentaren + klassen + viden om at det er et Java-projekt:

//an array with 10 unique capitols and their average temperature
public static final String[] CAPITOLS = { "Amsterdam", "Berlin", "Brussels", "Budapest", "Copenhagen", "Dublin",
"Edinburgh", "Geneva", "Helsinki", "Lisbon", "London", "Madrid", "Moscow", "Oslo", "Paris", "Prague", "Rome",
"Stockholm", "Vienna", "Warsaw", "Zurich" };
public static final double[] TEMPERATURES = { 10.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0};

Og herefter kan jeg hinte til Copilot, at jeg gerne vil have en metode, som returnerer en temperatur ud fra en hovedstad:

//get a temperature for a given capitol

Og herefter svarer Copilot:

public static double getTemperature(String capitol) {
for (int i = 0; i < CAPITOLS.length; i++) {
if (CAPITOLS[i].equals(capitol)) {
return TEMPERATURES[i];
}
}
return 0.0;
}

Hvilket jo unægteligt er korrekt Java-kode.

I det korte oplæg demonstrerede Jakob, hvordan Copilot kan skrive store dele af en klassisk Spring Boot-baseret applikation med en domænemodel og et REST-api. Det var ikke hver gang, Copilot ramte rigtigt, men det meste af tiden var den en god hjælp. Som tilhørerne observerede, var mange af forslagene ret generiske og stred ofte imod god praksis om fx at parametrisere konstanter i koden. Konklusionen blev, at vi softwareudviklere ikke er overflødiggjorte endnu, men at måden vi koder på står overfor en større ændring. Vi berørte også kort et par af problemstillingerne i denne type teknologi, og der er rigeligt at tage fat på af teknisk, juridisk og etisk art. Det skal blive spændende at følge med i de kommende år, når teknologier som Copilot bliver brugt på de datalogiske uddannelser – hvordan vil det påvirke nye generationer af udviklere?