ChatGPT som team-medlem

Jag har flera projekt där jag är ensam utvecklare, ibland resulterar det i att man kör fast och egentligen mest behöver någon att prata med om problemet. Där har ChatGPT visat sig vara en oväntat bra parprogrammerare. Jag jobbar rätt nära AI men är väldigt imponerad av vad den klarar av.

Det finns såklart andra hjälpmedel för utvecklare, GitHubs Copilot är också ett fantastiskt bra stöd. Men Copilot är mer ett hjälp för att slippa skriva något som den kunde klura ut att man var på väg att skriva, t.ex. om man ska iterera över en lista med en for-loop, den gör rätt nästan varje gång. ChatGPT däremot är mer som att ha en kollega, eller kanske mer som att ha en kodande tjänare.

Flera gånger när jag stått inför ett problem där jag inte riktigt vetat var jag ska börja så har jag bett ChatGPT att ge ett förslag. Det kan se ut så här:

I have a two-dimensional array of booleans where each boolean represents 8×8 pixels in an image. How can I create a polygon that outlines the values represented by true in the array?

Nästan ögonblickligen får jag svaret:


To create a polygon outlining the areas represented by True values in your two-dimensional array of booleans, you can follow these general steps:

  1. Identify the connected regions of True values in your boolean array.
  2. For each connected region, find the outline or boundary of that region.
  3. Create a polygon using the boundary points.

Here’s a simple example in Python using the scikit-image library to achieve this:

följt av fullt fungerande kod. Men jag ville inte ha lösningen i Python så jag svarade med:

Can you please write the code in Go?

Här medges att man kanske inte behöver slänga in artigheter som “please” när man pratar med en AI men den svarade:

Certainly! Here’s an example of how you might approach this task in Go. This example uses a simple connected component labeling algorithm to find connected regions and then extracts the boundary of each region to create a polygon

Koden den gav mig var förvånansvärt bra, använde inga externa libs utöver ett png-paket för att göra en png-fil. Jag ville dock inte ha en fil utan bara en lista med koordinater som jag skicka till ett externt system så jag fortsatte prata med ChatGPT

I don’t need an image, just an array of coordinates that make up the polygon of the areas marked with true

och fick direkt tillbaka svaret med ny kod:

Certainly! Here’s a modified version of the Go code that generates an array of coordinates representing the polygons of the areas marked as true:

Här kändes det som att det var dags att testa koden, den fungerade men mina polygoner avslutades inte i startpunkten, vilket jag ville. En enkel grej att fixa själv, men bara för sakens skull så bad jag den göra det:

The polygon should be closed at the end

Varpå den fixade det. Det är faktiskt rätt imponerande.

Men det låter ju toppen!

Njae, efter en dags arbete med att försöka hitta den perfekta lösningen så inser man att den ibland går i cirklar, ger upp, hittar en ny algoritm osv, när man inte riktigt får den att funka möts man av ett:

I apologize for the confusion. Let’s simplify the approach and use the marching squares algorithm to find the contour of the largest connected component. The marching squares algorithm is well-suited for extracting contours from a binary array. Here’s the updated code

Sen diskuterar man fram och tillbaka varpå den gör ett nytt omtag och kanske kommer tillbaka till den förra lösningen som fortfarande inte fungerar. Värst är dock när den, för så gör all AI, bestämmer sig för att skarva och hitta på. Då får man ofta en lösning som inte ens kompilerar.

Efter ett tag tröttnade även jag och bestämde mig för att fråga det jag undrade:

Have you given up?

ChatGPT var oväntat ärlig, i den mån en AI kan vara det.

”I apologize for the continued challenges you’re facing with the code. It seems like finding a suitable solution has proven to be more complex than initially anticipated”

men direkt efter gav den mig en ny ickefungerande lösning. 🙂

OK, så det verkar inte toppen, är det värt besväret?

Ja jag tror faktiskt det, men man måste sätta ribban på rätt nivå. Jag har fått i huvudsak 3-4 olika förslag på lösning som fungerat mer eller mindre. Ingen är perfekt men när jag testat dem och försökt förstå dem så har jag också sett varför den misslyckas och jag tror jag hittat den lösning jag ska använda och fixa själv. Lösningen känns i skrivande stund given, men det återstår att se om det fungerar.

Dessutom är det kul och man känner sig lite mindre ensam när man kan be någon om hjälp även om man sitter själv med sitt projekt.