Četa, a, i, igara
Samo napišem šta hoću i - ta veličanstvena crna kutija mašinskog učenja i statistike, u narodu poznata kao AI - izbaci kod koji radi. Više ništa neće biti isto kao pre!
Ne znamo šta, ne znamo na koji način, ali… eto.
Još jedan stav koji sam nedavno promenio: Github kopilot mi je postao koristan. Ako izuzmem pravnu (etičku?) stranu - korišćenje koda koji nije otvoren za potrebe učenja kopilotovog modela - nalazim da mi alat vredi toliko da bih pristao na nekakvo plaćanje razumne pretplate. Na početku nije bilo tako. Vremenom, očekivano, alatka je počela da radi bolje. Naročito pomaže kada postoje obrasci u kodu, a iskustvo koje mi je značajno uticalo na promenu stava je rad sa Skalom - što nisam očekivao. Naravno, neophodno je da se isprati generisano. Alatka kao i svaka druga; vredi kada se nauči i koristi kako i gde treba.
Ovaj uvod je ilustracija u način razmišljanja koji me je doveo do ovog teksta. Nedavna pojava (još jednog) natreniranog alata sa kojim možeš da četuješ me je ostavila ravnodušnim. Odgovori koji se dobijaju su generički, a kada nisu, detalji često budu ispravni, ali netačni - bar je takvo moje iskustvo. Doduše, moj pristup četu nije bio “hajde da vidim šta sve može”, već “želim konkretan odgovor za aktuelan problem.” Do sada nisam dobio ni jedno rešenje koje bih zapravo mogao da upotrebim u svakodnevnom radu.
Lako ćemo sa pitanjima na koje znamo odgovore.
Ne umanjujem tehnološki poduhvat mašinskog učenja; jasno je da kako treniranje bude detaljnije, tako će i upotrebljivost da raste. Ako bih već nešto da kritikujem, to je onda nedostupnost koda iza sličnih poduhvata - razumem da se neće deliti istrenirani model, jer neko mora da plati te silne ljude koji godinama klasifikuju ulaze (bez jasnog razumevanja zašta to rade, još jedna etička neodumica) - nedovoljno toga aktuelnog dopre do otvaranja koda, koliko uspevam da ispratim.
Kako bilo, druge teme mi ne daju mira.
Postoji trenutak kada će ML lako generisati sasvim pristojan sadržaj. Možda upravo živimo taj trenutak, možda je već i prošao: kako god, nalazimo mu se u epsilon okolini. Dobra indikacija je nedavna zabrana generisanog sadržaja na StackOverflow.
Ono šta mi mrači dan je da popularni programski jezici nisu dovoljno zreli dočekali pomenuti trenutak. Šta se dešava kada ML nauči puno nezrelog koda? Generiše isti takav nezreli kod. I tamo negde postoji prag, Rubikon, kada će zbog sirove količine generisanog sadržaja zrelina samih programskih jezika postati nevažna. Jer kada čet bot (ekvivalent hiljadama glasnih glasova) kaže da je OOP najbolji pristup za razvoj, anemične servisne klase jedini način grupisanja glagola, ORM jedini alat za bazu, preporučuje JavaScript ili Pajton kao vredan jezik… ti ćeš izabrati ponuđeno. Ne zavaraj se; podložan si predrasudama kao i svako drugo biće (tranzitivno, onda, i svaka ML? Još jedna etička nedoumica.) Predrasude nas hvataju kada izgubimo fokus, u nedostatku vremena ili volje; svim onim tako ljudskim karakteristikama koje delimo.
Hajde da se zadržimo i na glagolu: “izabrati”. Reč je o svesnoj radnji kojom biramo jednu od ponuđenih opcija. Ne mogu da dovoljno naglasim važnost koncepta “biranja.” Svako biranje je ograničavajuće: broj izbora je konačan, a često ne postoji uvid u razloge postojanja opcija. Primoravanje na izbor je etički prekršaj. U svetu velikih brojeva, mi, na kraju, prihvatamo takvo stanje stvari, te dozvoljavamo da nešto drugo izabira opcije za nas; na nama je samo da odlučimo. Ovakva postavka se nastavlja na komfort kome prirodno težimo: mnogo je lakše odabrati od ponuđenog nego pronaći opcije. Konačni rezultat niza je ograničavanje - svesti, izbora, bića. Ako sve postane izbor, nikada nećemo saznati šta smo sve mogli.
Kako vreme bude prolazilo, tako će biti teško razlikovati generisani ML generisani sadržaj od ljudskog. Dosta je provući sadržaj kroz par ML alata koji, na primer, sumiraju ulazni tekst. Izlaz takvog procesa ne liči na prvobitan izlaz, čineći ga težim za ML detekciju. Tamo negde postoji granica kada će generisani sadržaj postati sam sebi ulaz za novi model. Ne želim ni da razmišljam o implikacijama.
Zašto su mi programski jezici toliko bitni? Imam/imao sam prilike da u isto vreme aktivno paralelno radim od Pajtona, preko Jave, Kotlina do Skale, sa neveštim probama u Haskelu - ne pitaj zašto. Kakve sam znakove uočio pokraj puta? Fokus i moć iskazivanja namere se uvećava kako jezik postaje zreliji. Implementacije ideja postaju stabilnije. Unutrašnji osećaj sigurnosti u napisan kod, koji svako od nas inherentno ima, takođe je u skladu sa zrelinom jezika. Mir je veći. Zanimljivo je i da pokušaji implementacija naprednih tehnika nazad u manje sposobne jezike ne radi; više smeta nego što koristi. Dakle, jezik ima svoj domet do kojeg može da dobaci. Tera nas da razmišljamo u nametnutom okviru.
Nije ovo ništa novo. Način razmišljanja (kodiram, dakle mislim; mislim, dakle postojim?) zavisi od jezika kojim se služimo. Reči, sintaksa, gramatika… su nosioci ideja, informacija. Zato je neophodno da obogaćujemo vokabular, kako bi umeli da iskažemo fine razlike i tanane nijanse; pravimo pozitivnu spregu i širimo našu svest koja će dalje zahtevati neke nove načine iskazivanja, izražavanja i ispoljavanja. Zato i pišem blog na maternjem jeziku, uz strašnu cenu nikakve atrakcije čitalaca; učim da rečima dobacim misli dalje.
Da sumiram: ograničeni jezici daju ograničeno razmišljanje. Ograničeno razmišljanje daje ograničeno delovanje. Ograničenom delovanju je dovoljan ograničeni jezik. Rekurzija bez kraja.
Konačno: zašto već sada nemamo takve programske (domenske?) jezike kojima lako možemo da iskažemo nameru? Fascinirani smo da engleski tekst proizvodi neki kod, a ne radimo ništa da stvorimo domenske jezike kojima bi sintaksno jednostavno iskazali istu nameru. To se neće desiti u svetu for
petelji i if
blokova.