ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 155
Numărul 154 Numărul 153 Numărul 152 Numărul 151 Numărul 150 Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 155
Abonamente

Cât de mult ne-a ajutat cu adevărat AI-ul în development

Rareș Coantă
Senior Full-Stack .NET Developer @ CodeCrafters by BT



PROGRAMARE


De-a lungul vremurilor, unul dintre secretele meșterilor a fost mereu folosirea celei mai bune unelte pentru treaba pe care trebuiau să o facă. Pentru noi, una dintre aceste unelte începe să fie, din ce în ce mai mult, inteligența artificială, unealta care, folosită în modul potrivit și în contextul favorabil, poate să facă o adevărată diferență când vine vorba despre viteză și despre calitate în crearea unei "opere de artă" a unui maestru. Dar, ca toate uneltele, pentru a o putea folosi, trebuie să știm mai întâi cum să o facem și, mai ales, cum ne poate ajuta în continuul nostru proces de creație.

Urmând acest fir al întrebărilor reieșite din dorința de a utiliza mai bine noua unealtă din trusa noastră aflată în permanentă evoluție, am decis să experimentăm cu posibilele utilizări ale AI-ului în practica de zi cu zi. Pentru a avea un rezultat cât mai clar, împreună cu colegii mei, meșteri ai codului, am încercat să demarăm un experiment pe un proiect real, experiment care să fie cât mai aproape de realitate, dar care să poată totuși să ne ofere niște date concrete și cuantificabile.

Experimentul

Pentru a reuși să facem asta cât mai bine, am început prin definirea exactă a condițiilor pe care intenționam să le urmăm. Experimentul urma să se desfășoare chiar pe proiectul echipei, un proiect de mărime medie, cu o vechime de patru ani și cu o echipă de aproximativ 45 de oameni, timp de două săptămâni, perioada care a fost ulterior extinsă la patru, pentru a putea colecta mai multe date. Întrucât se dorea ca această inițiativă să aibă un impact minim asupra velocității echipei și să fie cât mai relevantă pentru contextul puternic bancar al proiectului, subiectului experimentului nu putea să fie altul decât dezvoltările care erau în lucru în momentul acela. Așa că, pentru a servi rolul unui grup de control, majoritatea colegilor au continuat dezvoltarea normal în timp ce câțiva colegi cu un grad crescut de senioritate au început să exploreze folosirea celor mai noi unelte.

La început, am încercat utilizarea mai multor LLM-uri, lucru care în scurt timp s-a dovedit ineficient, rămânând doar la doua dintre ele, GPT-4.1 și Claude 3.5 Sonnet (fiind schimbat la Claude 3.7 Sonnet la jumătatea perioadei, odată cu apariția lui). Inițial, pentru studiu au fost propuse câteva obiective clare, printre care se numărau:

Pe lângâ aceste obiective clare, scopul principal a fost și identificarea punctelor forte ale inteligenței artificiale, puncte care se puteau vedea cel mai bine prin utilizarea acesteia în contexte cât mai variate și prin spargerea celor opt obiective în diferite bucăți ușor de gestionat și de aplicat individual. În total, pe parcursul celor patru săptămâni, am atins aproximativ 40 de utilizări relativ diferite, cu varii grade de complexitate, de la crearea unui șablon pentru o clasă, la generarea unei integrări cu o metoda REST, și până la crearea unei modale complexe dintr-un singur mesaj scris.

Acum că avem întregul context al experimentului, putem să trecem la exploatarea rezultatelor la care am ajuns în aceste patru săptămâni. Pentru a rămâne mai țintiți, în continuare vom discuta într-un mod mai punctual despre cele mai bune cazuri de utilizare și despre situațiile în care AI-ul a fost mai puțin eficient și în care nu s-a dovedit a fi cea mai bună unealtă.

Rezultatele

Generarea de cod de tip șablon (aprox. +90%)

De departe cea mai precisă și mai eficientă utilizare, generarea de cod șablon a fost una dintre situațiile în care ne așteptam ca AI-ul să sporească viteza de dezvoltare considerabil. În urma mai multor încercări făcute, acel considerabil s-a dovedit a fi un respectabil ~90%, ducând aproape la o automatizare a acestei activități, considerate de majoritatea ca monotonă și repetitivă, extrem de ușor de făcut. Două dintre cele mai utile scenarii pe care le-am remarcat sunt generarea de clase care implementează interfețe și generarea întregii structuri de CSS pentru o componentă de Angular.

Convertirea și maparea de date (aprox. - 90%)

Un alt aspect în care ne așteptam ca AI-ul să performeze bine a fost maparea de obiecte, lucru care s-a văzut cu ușurință din acuratețea cu care făcea asta și din timpul salvat cu acest ajutor. Chiar dacă este o activitate ușor de făcut, este totuși monotonă și anevoioasă, motiv pentru care timpul scăzut cu ~90%, peste așteptările inițiale semnifică o mare victorie pentru inteligența artificială. Pe lângă multe alte situații în care am testat acest aspect, cea mai marcantă a fost una în care am încercat maparea unui răspuns al unei integrări care consta într-un obiect cu peste 100 de atribute la modele folosite de noi, lucru pe care nu doar ca AI-ul l-a făcut, ci pentru care a propus și niște modele adiționale, identificate pe baza contextului aplicației.

Integrarea cu servicii bine documentate (aprox. +70%)

În timpul scenariilor testate am evidențiat că în ceea ce privește integrările ajutorul este proporțional cu documentația integrării, lucru care era de așteptat. Totuși, chiar și când copilotului îi este furnizată o documentație relativ completă pentru cerință, acesta tot are unele probleme cu generarea unei integrări, încercând uneori să atingă cazuri imaginare bazate pe alte integrări existente. În medie, dacă ne referim doar la integrări bine documentate și nu le luăm în calcul pe cele cu documentație mai sumară, timpul câștigat pare să fie, în medie, de ~70%.

Generarea de teste unitare (aprox. - 60%)

Una dintre cele mai așteptate utilizări pentru aceasta unealta, generarea de teste unitare a fost una dintre zonele principale de interes. După mai multe teste pe diverse zone cu o variație atât a complexității de cod cât și a complexității a logicii bancare, verdictul a fost, din păcate, puțin sub așteptări, scăzând timpul cu o medie de aproximativ 60%. De ce o medie? Pentru că adevăratele procente arată cam așa: ~90% pentru cod șablon, ~80% pentru teste de tip CRUD, ~30 pentru teste cu logica complexă și cu scenarii exhaustive, cele mai importante, de altfel.

Generarea de componente de UI pe baza codului existent (aprox. +50%)

Un rezultat de-a dreptul neașteptat, această înjumătățire a timpului petrecut pe noi componente de UI de o complexitate mai mică a fost remarcată în timpul testării rescrierii, în momentul în care Github Copilot a generat un control de tip dropdown bazat de pe alte două controale de tip input și de tip multiselect. În urma mai multor teste pe subiect, mai mare partea a timpului a fost salvată prin generarea logicii și a comportamentului, necesitând în unele cazuri doar modificări vizuale.

Refactorizarea de cod după modele existente (aprox. +40%)

Un alt beneficiu apărut pe parcursul testelor a fost timpul scăzut al refactorizării aflate într-un stadiu mai avansat. Chiar dacă refactorizarea fără modele existente a fost una dintre metricile la care AI-ul s-a descurcat mai puțin bine, acest număr a început să crească drastic odată cu apariția unor modele "post refactorizare" pe care AI-ul le-a putut referenția. În situația în care Github Copilot a avut contextul a ceea ce fusese deja făcut, a reușit să sporească refactorizarea unor componente chiar și cu aproximativ 40%, în medie.

Rezolvarea defectelor doar pe baza tichetelor (mai mult de +10%)

Când vine vorba despre acest scenariu, ar trebui menționat că scopul spre care s-a mers a fost rezolvarea defectelor, pe cât posibil fără ajutor uman sau cu ajutor minim, doar pe baza informațiilor din tichete. Din păcate, scopul nu a fost atins, în multe cazuri nici măcar parțial, lucru datorat, în parte, și complexității logicii bancare din proiect. În majoritatea cazurilor testate, AI-ul nu ajuta în mod substanțial, chiar adăugând timp procesului de reparare. În final, am decis să nu depășim acest procent de 10% timp adăugat, finalizând testul când se ajungea la el, și să marcăm aceasta utilizare ca nerecomandată.

Generare de cod pentru versiuni specifice ale unor dependențe (aprox. +-5%)

O situație mai rar întâlnită dar cu care, din păcate, ne confruntăm uneori pe proiect, generarea de cod pentru versiuni specifice ale unor dependențe sau ale unor aplicații s-a dovedit una dintre cele mai nepredictibile utilizări. Pentru unele scenarii, Github Copilot venea cu soluții ideale, în timp ce pentru altele găsea "Soluții" nefuncționale și ducea la pierderea timpului. În medie, impactul a fost relativ mic, dar cu printre cele mai mari potențiale de variație, motiv pentru care a fost considerat un scenariu de utilizare nerecomandat.

Utilizarea în cod a librăriilor cu documentație sumară (aprox -15%)

O altă problemă cu care ne confruntăm pe proiect a fost utilizarea librăriilor mai nișate, scenariu pe care am încercat să-l testăm și pentru care am avut rezultate, din nou, variate. Media de -15% a timpului este una rezultată atât în urma testării unor scenarii de "copiere" a codului scris deja în proiect cu elemente din librăriile testate, unde AI-ul s-a descurcat bine cât și în urma încercării folosirii unor noi elemente din librăriile respective, caz în care Copilotul nu a avut așa o mare rată de succes, nici în urma furnizării documentației pentru librărie. Cu o scădere de până la 15%, cazul acesta poate, totuși să fie util, în funcție de cât de mult este deja utilizată librăria în proiect.

Refactorizarea de cod fără un model existent (aprox. -15%)

Spre deosebire de beneficiile menționate mai sus la punctul VI, refactorizarea aflată într-un stadiu incipient, unde nu avem încă modele pentru mai multe cazuri, s-a dovedit a fi un scenariu mai puțin eficient, timpul salvat fiind sub medie. În timpul acestui tip de refactorizare, Copilotul propune soluții funcționale în mare parte, dar cărora le lipsea direcția unitară și conformitatea spre care se dorea merge. De notat și că s-a remarcat și pierderea de scenarii pentru cazurile cu logică bancară mai complexă, situație care a fost mai evidentă în scenariul refactorizării fără modele existente, lucru datorat, în parte, încercării AI-ului de a supra simplifica implementările.

Mențiune onorifică pentru scăderea timpului

Chiar și dacă această utilizare nu a fost una testată cu unul sau mai multe scenarii specifice, ea s-a regăsit în majoritatea, "preluând greul" odată ce codul inițial era generat de către Copilot și începea ajustarea și modificarea lui. Funcționalitatea de completare automată inteligentă s-a dovedit a fi un factor decisiv în scăderea timpului, fiind folosită constant în scrierea codului, scăzând la fiecare utilizare câteva secunde importante, care, deși par puține, se adună și duc la o creștere tangibilă a productivității.

Verdictul: 25% - 30% scădere de timp cu ajutorul Github Copilot

În urma studiului, am ajuns la verdictul ca Github Copilot ne-a ajutat sa scădem timpul petrecut pe developement cu 25-30% Un rezultat care nu este media aritmetica a tuturor scenariilor testate, ci, factual observat, impactul avut asupra procesului efectiv de development. De ce? Pentru că, chiar dacă unele cazuri se remarcă cu numere de -90% iar alte cu procente mai rele, de +10%, majoritatea scenariilor care nu au fost "remarcabile" gravitează în jurul acestui interval.

În medie, pe parcursul acestor patru săptămâni, acesta a fost rezultatul observat în scăderea timpului actual de pe tichetele la care colegii lucrau. În urma unei observații mai amănunțite, s-a ajuns la concluzia că, chiar dacă unele acțiuni sunt ajutate substanțial de AI, ele nu necesită un timp atât de mare în mod normal, fiind ori de durată și complexitate mică, ori mai rar întâlnite decât alte utilizări neremarcabile.

Pe lângă asta, scopul a fost și evitarea conceptului de "Vibe Coding", concept care indică scrierea de cod doar cu o înțelegere superficială, prin generarea continuă și rapidă a noilor funcționalități de către AI, practică care duce la cod greu de menținut și la o lipsă de consistență. Pentru a reuși evitarea acestei practici, soluția a fost explicarea în instrucțiuni nu doar a cerinței sau a problemei, ci și a soluției găsite de către mintea umană, soluție care trebuia apoi doar scrisă într-un mod corect și rapid de către AI.

În urma studiului, am ajuns la concluzia că această nouă unealtă este una folositoare care poate aduce un plus de valoare atunci când este folosită înțelept. Am înțeles mai bine atât punctele puternice ale AI-ului, văzând cât de bine poate automatiza sarcinile repetitive și ușor de standardizat, cât și zone mai deficitare, observând impactul și precizia scăzută pe care acesta îl are când vine vorba despre sarcini complexe care necesită o înțelegere mai profundă și care nu urmează un șablon ușor de urmărit.

Mai departe, noi vom continua să analizăm impactul pe care inteligența artificială îl are asupra modului nostru de lucru, încercând să vedem cum o putem include în activitățile de zi cu zi într-un mod cât mai puțin intruziv pentru a putea beneficia de creșterea descoperită de 25-30%. Vă încurajăm și voi să experimentați și să demarați astfel de studii interne pentru că, doar explorând noi idei și fiind informați, putem să fim niște adevărați meșteri ai codului.

LANSAREA NUMĂRULUI 156

Design and human touch

Joi, 19 Iunie, ora 18:00

msg systems Romania

Facebook Meetup StreamEvent YouTube

NUMĂRUL 155 - Software Craftsmanship

Sponsori

  • BT Code Crafters
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • GlobalLogic