Bing vs. ChatGPT til programmering: - Begge gjør mange feil

Om det ikke finnes dumme spørsmål, finnes i hvert fall dumme svar. Og de får du fra både ChatGPT og Bing.

kode24s Kurt Lekanger har testa ChatGPT vs. Bing til programmering. Denne gangen var det Bing som hadde det beste svaret. 📸: Ole Petter Baugerød Stokke
kode24s Kurt Lekanger har testa ChatGPT vs. Bing til programmering. Denne gangen var det Bing som hadde det beste svaret. 📸: Ole Petter Baugerød Stokke Vis mer

Stadig flere utviklere spør OpenAIs ChatGPT-tjeneste når de trenger hjelp med ett eller annet kodeproblem. Og nå som Microsoft har lansert sin AI-chat, har også Bing blitt et aktuelt alternativ for utviklere som vil få raske svar uten ørkesløs leting i gamle Stack Overflow-innlegg.

Men hva er egentlig best av ChatGPT og Bing? I teorien burde jo Bing være bedre, siden den benytter seg av OpenAIs GPT-4-modell, mens gratisversjonen av ChatGPT inntil videre benytter GPT-3. Men det kan også være forskjeller i hvordan svarene presenteres.

Jeg bestemte meg for å gi både Bing og ChatGPT noen kodeutfordringer å bryne seg på. Dette er vel å merke bare å regne som stikkprøver, for spør vi én gang til får vi gjerne et annet svar. Skulle vi kåret en reell vinner av Bing og ChatGPT måtte vi ha testet med mange flere spørsmål, over lenger tid.

Vi prøvde å spørre både på engelsk og norsk, det virker som om både Bing og ChatGPT håndterer begge deler fint.

Kildehenvisninger? Ja, takk! Her har jeg spurt Bing om hvordan man setter opp Auth0-autentisering i en Svelte-applikasjon. ChatGPT viste kodeeksempel uten kildehenvisning, og med en feil som jeg brukte lang tid på å finne ut av. Kildehenvisninger ville gjort det lettere.
Kildehenvisninger? Ja, takk! Her har jeg spurt Bing om hvordan man setter opp Auth0-autentisering i en Svelte-applikasjon. ChatGPT viste kodeeksempel uten kildehenvisning, og med en feil som jeg brukte lang tid på å finne ut av. Kildehenvisninger ville gjort det lettere. Vis mer

Kildehenvisninger er bra!

For å bruke Bings AI-chat må du laste ned Microsoft Edge-nettleseren og så gå inn på bing.com. For å bruke ChatGPT går du til chat.openai.com - eller bruke snarveien ai.com.

Noe av det første som slo meg da jeg begynte å be Bing og ChatGPT om å svare på kodespørsmål, var at Bing ofte uoppfordret kom med kildehenvisninger, noe ChatGPT utelater.

Det er imidlertid ikke alltid du får kildehenvisninger i Bing – men i både Bing og ChatGPT kan du spørre om det. Da får du ofte en liten liste med nettsteder du kan sjekke for å lese mer om temaet.

Bing foreslår også ofte fine oppfølgingsspørsmål, for eksempel hvis den i et kodeeksempel har gjort ett eller annet som kanskje trenger en nærmere forklaring. Men som vi skal se eksempler på, er det ikke alltid svarene på oppfølgingsspørsmålene er veldig smarte.

Forskjell på rader og kolonner

Svarene du får fra Bing og ChatGPT er ikke alltid riktige.

Da jeg spurte Bing om å ved hjelp av CSS Grid lage en 4x4 grid-layout med en header og en footer som gikk på tvers av alle de fire kolonnene, endte vi helt riktig opp med en header og en footer som så helt fine ut.

Nei, Bing. Du har ikke svart på spørsmålet mitt! Det skal også være 4 kolonner.
Nei, Bing. Du har ikke svart på spørsmålet mitt! Det skal også være 4 kolonner. Vis mer

Men grid-layouten hadde ingen begrensning på maks fire kolonner, slik jeg ba om. Det var derimot en begrensning på maks fire rader. Selv etter å ha presisert dette, klarte ikke Bing å fikse problemet.

Den la riktignok inn en mediaspørring med en begrensning på fire kolonner på små skjermer – men jeg ville ha maks fire kolonner uansett skjermstørrelse.

Det er mulig jeg stilte spørsmålet på en litt for innviklet måte. Svaret kan riktignok være nyttig uansett, siden det peker deg i riktig retning. Men dobbeltsjekk koden AI-en gir deg!

Bing ga blaffen i typene

I et annet eksempel prøvde jeg å be Bing om å skrive en TypeScript-funksjon som tar inn en array med tekststrenger og returnerer et nytt array der alle tekststrengene er sortert i omvendt alfabetisk rekkefølge. Det burde være temmelig enkelt, og var det også for Bing:

Joda, dette var jo greit nok.
Joda, dette var jo greit nok. Vis mer

Etter hvert svar kommer Bing med forslag til oppfølgingsspørsmål. Du kan for eksempel be om å få forklart ting mer grundig.

Men da skar det seg igjen. Bing foreslo at jeg skulle spørre om hva som skjer hvis jeg gir funksjonen en array med tall. Beskjeden da var at det skal gå helt fint – og at sorteringen da vil være basert på tallverdiene i stedet for alfabetisk rekkefølge.

Dette fungerer i JavaScript, men TypeScript vil protestere hvis du prøver å gi en funksjon et array med heltall når du har definert at det skal være et array med strenger. Bing later som om det ikke er et problem.
Dette fungerer i JavaScript, men TypeScript vil protestere hvis du prøver å gi en funksjon et array med heltall når du har definert at det skal være et array med strenger. Bing later som om det ikke er et problem. Vis mer

Dette var et dårlig råd! ReverseSort-funksjonen Bing lagde for oss var nemlig i TypeScript, og tok ett argument av typen string[] – altså en array med tekststrenger. Prøver vi å gi funksjonen en array med tall i stedet, vil TypeScript protestere. JavaScript kjører riktignok koden – men i kodeeditoren vil du få advarselen "Type 'number' is not assignable to type 'string'". Strengt tatt synes jeg Bing kunne fortalt oss det.

Hva så med ChatGPT? Den foreslo å bruke JavaScript-metoden localeCompare sammen med sort for å reversere rekkefølgen:

image: Bing vs. ChatGPT til programmering: - Begge gjør mange feil

Det fungerer jo, men koden ble mye mindre intuitiv enn den vi fikk fra Bing. Og jeg ser ikke helt poenget med å bruke en litt obskur metode når JavaScript tross alt har en reverse-metode for å reversere et array.

Når det er sagt: Du får forskjellig svar hver gang du spør ChatGPT eller Bing om noe – så neste gang kan svaret være mer fornuftig. Eller enda dummere.

Roter med klasser og ID-er

Å lage en enkel navigasjonslinje som ligger øverst på skjermen og automatisk skjules når du scroller burde være en enkel sak for ChatGPT og Bing. Begge kom opp med helt greie kodeeksempler – riktignok ikke særlig lekkert stylet, men noe jobb må det jo være igjen til oss utviklere, også.

Men da jeg skulle teste koden fra Bing, virket den ikke!

Den observante leseren klarer sikkert å se feilen i koden under:

image: Bing vs. ChatGPT til programmering: - Begge gjør mange feil

Det er en ganske banal feil: I HTML-koden er det brukt klassen ".navbar", mens det i JavaScript-koden refereres til ID-en "#navbar". Det fikses lett ved å bytte ut class="navbar" med id="navbar" i HTML-koden, eventuelt bytte ut getElementById("navbar") med .querySelector(".navbar").

Siden Bing i dette tilfellet hadde kildehenvisninger, fant jeg ut at årsaken til feilen antagelig er at Bings AI har blandet sammen kode fra to eller flere kodeeksempler fra W3Schools og Stack Overflow. Går du til kildene finner du nemlig to lignende kodeeksempler, ett med klasser og ett med ID-er.

«Bings AI har blandet sammen kode fra to eller flere kodeeksempler.»

Lange eller korte spørsmål?

Bør du fatte deg i korthet når du stiller spørsmål til ChatGPT og Bing, eller er det bedre å prøve å forklare så grundig og detaljert som mulig?

I vår lille stikkprøve prøvde vi både lange og korte spørsmål, og det virker i hvert fall som at det er viktig å formulere spørsmålet ditt så tydelig som mulig for at det ikke skal oppstå misforståelser. Som ellers i livet, altså.

Her er et eksempel på et kortfattet spørsmål, "How do I summarize an array of numbers in JavaScript":

image: Bing vs. ChatGPT til programmering: - Begge gjør mange feil

Både ChatGPT (mørk bakgrunn) og Bing anbefalte å bruke reduce()-metoden, og kodeeksempelet var så å si identisk.

Jeg prøvde et lengre spørsmål, denne gangen på norsk:

"Skriv en JavaScript-funksjon som genererer en hashtag. Funksjonen aksepterer ett argument som er en tekststreng. Den skal returnere en hashtag, som er en streng som starter med "#". Alle ordene i tekststrengen skal ha stor forbokstav og alle mellomrom skal være fjernet. Hvis det endelige resultatet er mer enn 140 tegn, skal funksjonen returnere false."

Så innviklet at jeg nesten ikke skjønte mitt eget spørsmål. Her er svarene til Bing og ChatGPT:

image: Bing vs. ChatGPT til programmering: - Begge gjør mange feil

Begge svarene fungerte helt fint. Kaller jeg for eksempel funksjonen generateHashtag("kode 24 er best"); får jeg i retur #Kode24ErBest. Og det er jo riktig.

I tillegg til å vise kodesnuttene, forklarte både Bing og ChatGPT greit hvordan funksjonen fungerer. ChatGPT kom imidlertid med et eksempel på hvordan du bruker funksjonen også, men det kan du få i Bing også ved å stille oppfølgingsspørsmål.

Forskjellige svar

Når vi spør ChatGPT og Bing om det samme, får vi ofte ulike svar. Men det er jo ikke så rart, ettersom det ofte er mange måter å løse det samme problemet på.

Her har vi spurt både Bing og ChatGPT om hvordan man sentrerer et div-element horisontalt og vertikalt. Vi fikk to forskjellige forslag som begge fungerer, men Bings forslag om å bruke flexbox er nok det mest moderne.

image: Bing vs. ChatGPT til programmering: - Begge gjør mange feil

Men som nevnt tidligere, prøver du å spørre på nytt får du kanskje et annet svar. Vi gjentok derfor samme spørsmål til ChatGPT, og da ville plutselig ChatGPT også anbefale flexbox.

Super hjelp, hvis du bruker hodet

En liten stikkprøve som dette er som nevnt langtfra nok til å kunne kåre en vinner av ChatGPT eller Bing.

Begge AI-chatbotene gjør tidvis en veldig god jobb, men begge gjør også mange feil – og de gjør feil ofte.

Mitt tips er å bruke Bing og ChatGPT som hjelp til å lede deg på rett vei. Trenger du bare å vite syntaksen til en bestemt metode eller lignende kan det ofte være greiere å gå rett til offisielle dokumentasjon, for eksempel til MDN, React Docs, .NET-dokumentasjonen eller hva som måtte være relevant med hensyn til det du driver med.

«Hvis jeg må velge mellom Bing og ChatGPT – holder jeg en knapp på Bing.»

I tilfeller der du trenger å finne ut hvordan du gjør noe litt ut over det du finner i dokumentasjonen, kan både Bing og ChatGPT være til stor hjelp. For eksempel hvis du skal bruke et bibliotek på en litt annerledes måte, eller du trenger hjelp til å lage en algoritme som regner ut noe spesielt.

Men, du må bruke hodet. Som kodeeksemplene over viser, kan det skje mye rart hvis du ukritisk copy/paster kodeeksempler fra Bing eller ChatGPT. At det ikke virker er én ting – i verste fall kan du introdusere sikkerhetshull i koden din.

Hvis jeg velge mellom Bing og ChatGPT – holder jeg en knapp på Bing. Jeg liker brukergrensesnittet, og det at Bing ofte gir meg kildehenvisninger er helt supert.