Oblac

Kopilote, slomio si mi krila

3 min

GitHub Copilot liči da je mnogo toga.

Reklamira se kao AI pomoćnik koji pretvara tekst napisan govornim jezikom u kod. Na primer, može generisati isečak koda na osnovu bloka komentara, ili potpisa i imena metode.

Ova rečenica zvuči kao deo naivnog SF-a: nedostaju još samo Tom Kruz, dinosaursi i vremenska petlja. Priču će iskodirati AI, naravno. Utom se odnekud pojavi i Stiv i kaže:

Github Copilot odlično rešava pogrešan problem. Pri tome implicitno i nenamerno ukazuje na pravi problem softverskog razvoja.

Hvala Džobse.

console.log("Thank you, Jobs"); // generated by AI

Ko visoko leti?

Kopilot je pomoć za pisanje koda.

Pitam se: kada je pisanje koda bilo problem? Od svih aktivnosti koje se dešavaju na softverskom projektu, na pisanje koda - paradoksalno - odlazi najmanje vremena.

Svakako, pomoć je dobrodošla; uostalom, zato danas i programiramo u moćnim IDE. Neću se libiti da prihvatim bilo kakvu prečicu.

No da li se zaista štedi vreme? Da li udruženo vreme pisanja opisa na engleskom jeziku i, potom, razumevanja generisanog koda zaista manje od vremena koje bi inače potrošili za trivijalne blokove koda?

Šta je sa kasnijim održavanjem koda i teksta? Šta kada se refaktoriše generisani kod, a ostane komentar, sada već neadekvatan?

Da li ću trošiti više vremena na ispravke engleskog bloka teksta, samo da bi generator konačno stvorio kod koji želim? Ne mogu a da ne pomislim na Siri: neprestane polu-komične situacije u kojima se moja vera u poznavanje engleskog srozava, dok panično pritiskam dugme za prekid, nadajući se da se neželjeni poziv neće ostvariti. Bar me Siri zove “seksi”. Hoće li i kopilot to raditi?

Ima li pilota?

Ozbiljnije pitanje je postojanje isečaka koda kao odgovor na to kako programiramo. Obećanje softverskog razvoja je bilo u višekratnoj upotrebi (idealno) jednom napisanog koda. Zar nije trebalo da to već da bude rešeno? Zar nije trebalo da nam kopilot - uopšte ne treba?

Užasavam se na pomisao gomile sličnih isečaka koda koji će biti razbacani po, sada ne više jednom, već više projekata. Špageti incident, na delu.

Razmišljam tako dalje, zašto ne bi preokrenuli stvari? Zašto taj AI, paz’ sad: ne analizira i razume naše isečke koda, pa generiše engleski tekst koji opisuje blok programa? To bi već, nesumnjivo, bila vrednost! Avantura nemoguće misije jednog Toma Kruza.

Pravi problem

Okosnica do koje dolazim je plod fikcije.

Kopilot naznačava vezu govornog teksta i generisanog koda. I to je upravo pravi problem. Generalni programski jezici kojima se služimo nemaju kapacitet za više. Limitirani su opsednošću načinom kako hardver funkcioniše.

Čini se da odgovor leži u sredini: namenskim, domenskim programskim jezicima. Da li je to DSL ili programski jezik višeg nivoa, to ne znam. Kapiram da bi to bio programski jezik specifičan za domen koji rešava; bliži govornom, udaljen od mašine. Razvoj projekta bi se podelio u dve faze: izrada jezika za potrebe domena i, potom, korišćenje tih jezika za rešavanje problema.

Takvim programskim jezicima ne treba kopilot.

Da dodam i podsticaj: granice domena (boundaries) su jedna od najvažnijih svojstava softverskih sistema. Nameski domenski programski jezici su upravo savršena granica između domena.

Otuda bojazan da mašinerija iza kopilota troši naš fokus i nečije resurse na stranu koja je vrednosno kratkoročna.


(Dopuna)

Svega par dana nakon što je gornji tekst objavljen, konačno nalazim istraživanje (An Empirical Cybersecurity Evaluation of GitHub Copilot’s Code Contributions) koje se bavi kopilotovim generisanim kodom. Prema njemu, oko 40% slučajeva je ranjivo i može biti zloupotrebljeno.