GitHub Copilot
I dag fikk jeg en mail. Det var en mail fra GitHub, som sa jeg hadde fått tilgang til "Techinal Preview" for Copilot.
Nå har jeg fått prøvd Copilot litt i dag. Og jeg er ganske imponert. Jeg tror dette har potensiale til å revlusjonere utvikling. For å hoppe rett til en konklusjon, så må du forstå språket du skal skrive kode i. Du må også ha en god forståelse av hvordan koden blir kjørt, hva som er lurt, best practices osv. Men, du kommer til å skrive kode fortere... Mye fortere. Copilot kan også hjelpe deg litt på vei på problemer du vil løse, og det å skrive funksjoner som konverterer verdier er nå mye lettere 😁
Så, etter å ha gjort første testen som Copilot selv foreslår:
function differenceBetweenDatesAsDays(date1, date2) {
const diff = date1.getTime() - date2.getTime();
return Math.ceil(diff / (1000 * 3600 * 24));
}
Så kjørte jeg en ganske enkel kata på den. Den som kjenner meg, vet at jeg hater Kataer. Men jeg pleier å gjøre (advent of code)[https://adventofcode.com] hvert år gjennom advents tiden. Så jeg tenkte jeg kunne kjøre dag 1 del 1 (for 2020) raskt ved hjelp av Copilot. Og jeg ble mildt sagt imponert....
Dette var oppgaven.
Gitt en liste med tall, finn de 2 tallene som til sammen blir 2020. Multipliser tallene du får.
Koden Copilot ga var ikke helt riktig. Men den fikk meg på riktig vei.
// Forslag fra Copilot
const rawInput = `1721
979
366
299
675
1456`
// Convert rawInput to list of numbers
const input = rawInput.split('\n').map(Number)
// find the two numbers from input that adds up to a target
const findSum = (input, target) => {
for (let i = 0; i < input.length; i++) {
for (let j = i + 1; j < input.length; j++) {
if (input[i] + input[j] === target) {
return [input[i], input[j]]
}
}
}
}
// multiply all the numbers in the list
const multiply = (input) => {
return input.reduce((acc, curr) => acc * curr)
}
console.log(findSum(input, 2020), multiply(findSum(input, 2020)))
Denne koden ble skrevet kun ved at jeg skrev kommentarer som Copilot jobbet ut i fra. Det er ganske kult, og resultatet er ikke så tullete 😁 Jeg ville nok ha gjort findSum
på en annen måte. Dette er veldig raskt, og funker bra.
Jeg skrev også noe selv som var inspirert at det Copilot ga meg. Koden min føler jeg er lettere å lese. Men det er nok mer smak og behag.
const rawInput = `
1721
979
366
299
675
1456`
const input = rawInput.split('\n').map(Number);
function findValuesThatEqualsTarget(input, target) {
let values = [];
input.forEach((value, index) => {
let left = target - value;
if (input.includes(left)) {
values = [value, left];
}
});
return values;
}
function multiplyNumbersFromArray(array) {
return array.reduce((a, b) => a * b);
}
const numbers = findValuesThatEqualsTarget(input, 2020);
console.log(numbers, multiplyNumbersFromArray(numbers));
Resultatet er likt. Men det er litt forskjell i hvordan vi kommer frem til svaret. Copilot looper over inputen, og finner hva som kan legges sammen til å bli 2020. Dette løses med en loop i en loop. Jeg looper også over input arrayet, også tar jeg target minus verdien jeg står på. Videre så sjekker jeg om den resterende verdien finnes i inputen. Hvis den finnes, så legger jeg den bare til i arrayet som funksjonen ender med å returnere.
Koden jeg skrev er mer et "samarbeid" mellom meg og Copilot. Den kom med forslag, som jeg tok videre og tweaket. Jeg kunne sikkert oppnådd det samme med Google og StackOverflow, men det hadde tatt mer tid. Med Copilot hadde jeg løst oppgaven på godt under 5 min (fra jeg begynte å lese oppgaven til rett svar var gitt) 😁
Igjen, Copilot imponerer! Men forutsettningen er at du har en forståelse av hva du skal gjøre. På samme måte som å klippe og lime ukritisk fra StackOverflow vil ikke ukritisk bruk av Copilot være veien til lykken heller. Men jeg tror dette vil være et nyttig verktøy, som vil redusere behovet for å skrive boilerplate kode manuelt. Enkle funksjoner er også et perfekt use-case for Copilot per nå.
Copilot støtter alle språk (sies det), til og med Norsk (Det har kommet mange forslag mens jeg har skrevet dette)... Men jeg merket stor forskjell på støtten mellom forskjellige språk. Kotlin og Swift hadde ikke i nærheten av like god støtte som JavaScript. Men nå er det jo et ganske mye mindre treningssett for Swift og Kotlin kode kontra JavaScript, så sammenligningen er nok ikke helt fair. Fordi det er jo støtte for Kotlin og Swift, og forslagene var bra, og det er noe jeg vil prøve å bruke i jobb sammenheng fremover.
Jeg lurer nok på om dette er metoden Microsoft skal bruke for å tjene penger på VSCode. Fordi hvis dette blir å koste noen kroner, så er lommeboken min åpen (Gitt at det ikke er noen crazy summer...). Jeg tenker at folk betaler for Jetbrains sine produkter, sublime osv. Og betale noen kroner for overlegen autocomplete tror jeg er verdt det.