AI și ce probleme nu rezolvă (în programare)
Acum câteva zile am avut o discuție legată de MLM-uri (modelele lingvistice masive). Citisem că peste 95% din programatori folosesc MLM-uri în munca de zi cu zi, unii clamând că sunt cu 50% mai productivi. Nu pot verifica treaba asta pentru că nu știu nicio persoană care să-mi fi povestit, din postura de programator, cum folosește MLM-uri pentru a rezolva diverse probleme, poate pentru că sunt opriți de NDA-uri sau pentru că nu li se pare relevant, dar gândindu-mă unde aș avea nevoie de un MLM în munca mea de zi cu zi îmi dau seama că nu, nu prea am nevoie.
Și totuși, probabil că folosesc și eu în mod indirect, pentru că deși susțin că nu folosesc unelte supranumite generic (și prost) AI, folosesc Google Search pentru a căuta informație pe site-ul C++ Reference. Așa că odată identificat locul unde aș putea interpreta greșit ce este un MLM și ce nu, îmi dau seama că sunt două tipuri de folosiri unde MLM-urile ar putea fi utile în această perioadă din istoria programării.
Substitut de documentație
Nu sunt singurul programator care urăște să scrie documentație. Documentația de calitate e rară, și atunci când există, sistemele curente sunt atât de complexe încât documentația va fi imposibil de navigat, indiferent de cât de bine ai încerca să o structurezi.
Site-ul de referință pentru C++ este în această situație. Totul se află într-o structură arborescentă, toată informația e accesibilă. E mai greu să găsești informația care te interesează (de exemplu să zici ce face std::rotate
) - și pentru asta o să folosești butonul de căutare, care e o simplă redirectare către Google Search. Și Google Search folosește în spate AI, cel puțin asta e chestia ce ni se promite în timp ce rezultatele din căutările de la Google sunt mai proaste an după an.
Problema documentației e un pic mai complexă. Tot discutând pe tema asta am ajuns la concluzia că documentația de calitate este un produs pe care nimeni nu-l vrea: managerii ar trebui să plătească ca undeva la 30% din munca unui programator să fie scrierea de documentație, și developerii și-ar scrie practic ultimul fluturaș de salariu, pe lângă faptul că scrierea de documentație (și mai ales elaborarea de documentație de calitate) este un lucru mult mai dificil decât scrisul de cod.
Ar putea un MLM să genereze documentație pentru ceea ce ai scris tu? Poate că da, poate că nu. Ar putea un MLM să fie un bun înlocuitor de documentație? Da și nu prea, în sensul că, de exemplu, documentația explică o intenție, și dacă un MLM analizează codul ar putea să creadă că intențiile sunt diferite, ajungând să abuzeze de felul în care se folosește o unealtă.
Așa că MLM-urile fac ceea ce făceau și motoarele de căutare până acum, doar că un pas în plus: în loc să te trimită la locul unde poți să citești ce face std::rotate
îți poate copia secvența de documentație pe care o cauți și să copieze și exemplul atașat. Poate că știe chiar să creeze un exemplu, deși o să discut pe final partea cu generarea de cod. Oricum un punct pentru MLM-uri: dacă îmi aduc documentația mai aproape e excelent. Acum 15 ani când predam la facultate le povesteam studenților că „Google is your friend”. La asta mă refeream: la faptul că motorul de căutare te ducea la documentația bună, dacă știai să-l folosești. Altfel, Google is not your friend, never was, never will be.
Scrierea automată de boilerplate
Boilerplate-ul în programare sunt secvențele de cod necesare pentru a folosi o anumită funcționalitate, care sunt neschimbate de la o folosire la alta aproape indiferent de context. Ca să inițializezi biblioteca Vulkan, de exemplu, trebuie să treci prin niște secvențe după care poți începe să scrii codul - dar biblioteca respectivă așteaptă ca anumite operații să fie făcute într-un anumit fel și într-o anumită ordine.
Un MLM poate să te ajute să generezi acest boilerplate, mai ales că, după cum poate că ai observat, codul respectiv e împănat cu comentarii și cu explicații - unui programator mediu i-ar putea lua și o zi să înțeleagă ce se întâmplă acolo. Unui MLM? Probabil câteva secunde. Probabil că dacă întreb un MLM „cum creez o aplicație Vulkan simplă” acesta îmi va arunca câteva zeci, poate sute de linii de cod care să constituie o aplicație de bază și să își facă treaba. E clar, folosind un MLM poți să-ți sporești productivitatea de… nu știu, mii de ori?
Doar că nu.
Pentru că problema majoră pe care o ai nu e neapărat de scrierea boilerplate-ului, ci de înțelegerea lui. Acolo unde această înțelegere e nenecesară, pentru că ai făcut treaba asta de câteva ori deja, probabil că deja ai un schelet de aplicație minimală care îți face deja lucrurile care te interesează în felul în care te interesează, și poți copia acel proiect „gol” ca să-ți începi munca de la zero.
În plus, din punctul meu de vedere, nu aș putea accepta o bucată de cod pe care nu o înțeleg. De ce face X și Y la inițializare? De ce trebuie să construiești X? De ce folosești valorile alea de inițializare? Ce alte posibilități de inițializare ai? Ce poți face în plus față de ce-ți produce MLM-ul? Ce poți elimina? Activitatea de review ar dura, așadar, mai mult decât mi-ar lua lecturarea și înțelegerea capitolului din documentație, pentru că acel capitol din documentație e o sinteză, dar eu nu m-aș duce la sinteza asta (pentru că nu aș ști de unde s-o iau) ci m-aș duce la fiecare declarație de funcție individuală (pentru că ăsta e codul pe care îl primesc).
„Dar poți să întrebi MLM-ul!” ar putea exclama glorios un răcan, și i-aș zice: dar cum verifici răspunsurile MLM-ului? Mai ales că e din ce în ce mai clar că MLM-urile dau rateuri din ce în ce mai mari. Și aici ajungem de fapt în zona pe care vreau să explic că MLM-ul nu o rezolvă.
Scrierea de cod
Nu o să folosesc prea curând un MLM pentru a scrie cod, din principiu. Poate are de-a face cu formarea mea profesională, poate are de-a face cu niște principii morale și profesionale prea rigide, dar nu pot să răspund pentru codul altuia, mai ales când acel „altcineva” e o mașină care poate halucina oricând.
Când clienții mă contractează, nu au nevoie de un corector pentru o mașină. Cel mai des au nevoie de soluții eficiente pentru probleme specifice, pe care nu le pot rezolva ei înșiși. Au nevoie de cineva care să propună o soluție, să o implementeze, să-și asume responsabilitatea pentru modificarea și menținerea acelei soluții. Dacă e vorba de propunere sau chiar implementare, MLM-urile poate că se descurcă. Modificarea? Deja lucrurile devin mai sensibile. Procesarea noilor cerințe, identificarea parametrilor conflictuali din cerințe, sugestii de parametri mai buni pentru a implementa soluția de ansamblu dorită? MLM-urile sunt departe de a oferi astfel de informații. Mentenanța unor soluții? 50% din codul generat de MLM-uri nu se compilează, pentru că e copiat din proiecte diferite care poate că nu folosesc aceleași unelte, aceleași standarde sau aceleași abordări.
Da, sigur, MLM-ul o să scrie niște cod pentru a da soluții ok unde rata de boilerplate/cod util este mult prea mare. Dar dacă tu, ca individ care vine și vinde soluții pe un anumit subiect, nu ai deja acele soluții „la cheie”, deja ești în urmă, și te depășește un student nespălat cu un docker
pe un Raspberry Pi
, te-a făcut cu o soluție care costă 30$.
Nu spun că acele joburi nu există, și nu sunt în pericol. Ele există, și sunt populate de crabii care consideră că 5000€/lună e prea puțin pentru ceea ce oferă ei. Dar, vei zice, chiar și studentul ăla va folosi un MLM pentru a-și genera soluția aia cu docker
. Poate că o va face, dar tot va trebui să treacă prin tot efortul de a înțelege ce se întâmplă acolo, pentru că altfel va veni un altul care în loc să bage banii în păcănele cumpără un r-pi și, spre deosebire de primul, chiar află ce fac toate chestiile alea pe care le-a asamblat în soluția lui.
Dar, desigur, toate astea se întâmplă doar când concurența reală există și e funcțională, atunci când băiatul cu r-pi poate să se bată cap la cap cu vecoSi
. Și poate un MLM nu poate să bage bani în contul patronului de la vecoSi, dar un politician poate s-o facă, și deja intrăm într-o zonă pe care, iarăși, MLM-ul nu o poate rezolva.
Și pentru cei care ați rezistat până aici, vă trimit la amicul Krossfire, care ne amintește că oricum softul din ziua de azi e la un minimum istoric în privința calității. O să vă dau un citat, să vă fac poftă.
actuala economie a serviciilor tehnologice e construită pe o schemă piramidală care depinde de ineficiența unor procese și de o masă supradimensionată de angajați care să le susțină. Aceiași angajați care au nevoie de un job pentru a cumpăra alte produse mediocre; aceiași angajați care acum sunt arătați cu degetul, de parcă ei ar fi luat cu ambele mâini investiții pe care nu le puteau absorbi. Dacă A.I.-ul i-ar înlocui, cui și-ar mai vinde mințile strălucite din Silicon Valley produsele mediocre și obiectiv inutile? Altor companii fără angajați care să le folosească?
PS: dacă vreți, puteți să comentați pe Reddit, pe r/programare.