Tarkvaraarenduse maailm on pidevas muutumises, kus uued meetodid ja tehnoloogiad kujundavad arendusprotsesse. Paarisprogrammeerimine, mis sai populaarseks 1990ndatel koos agiilsete metoodikate, eriti Extreme Programming (XP) tõusuga, on olnud üks selline meetod. Tänaseks oleme jõudnud sinnamaale, kus tarkvaraarenduses tuleb üha enam arvestada tehisintellekti poolt pakutavate võimalustega ehk et lähtekoodi loomist on võimalik aina rohkem delegeerida AI võimekusega programmidele. Oma kogemusi selles vallas jagab SMITi äriteenuste valdkonna arhitekt Mart Järvi.

Minu isiklik kogemus paarisprogrammeerimisega ulatub aastasse 2001, kui nägin oma töökohal kahte arendajat kõrvuti istumas ja koos PL/SQL-i kirjutamas (üks kommenteeris ja teine reaalselt kirjutas). See oli minu esimene kokkupuude selle metoodikaga ja oli huvitav näha, kuidas nad koostööd tegid, aktiivsed arutelud jms. Kindlasti aitas selline lähenemine kaasa tehnoloogia omandamisele ja koodi kvaliteedi parandamisele, kuna kaks inimest suutsid üksteise vigu märgata ja parimaid praktikaid jagada. Siiski jäi mulje, et produktiivsuse vaates ei olnud see kõige optimaalsem lahendus. Kuigi teadmiste jagamine ja vigade vähendamine olid selged eelised, tundus, et kahe inimese samaaegne pühendumine ühele ülesandele võis aeglustada üldist töövoogu. Seetõttu ei viljeletud seda praktikat meie meeskonnas pikalt.

Täna asendavad seda enamikes tiimides koodi ülevaatused, mis võimaldavad asünkroonset ja paindlikku koostööd, eriti meeskondades, kus tiimid töötavad erineval kellaaegadel ja asukohtades. Samuti võimaldab see dokumenteeritud argumenteerimisi ja põhjalikumat ning detailsemat koodi analüüsi.

Viimastel aastatel on AI areng toonud tarkvaraarendusse uusi tööriistu, mis aitavad programmeerijaid koodi kirjutamisel ja refaktoreerimisel. Need tööriistad võivad suurendada efektiivsust 10-30% võrra, pakkudes samas olulist kvaliteeditõusu. Näiteks suudavad need tööriistad olemasolevat koodi klassi või meetodi kaupa paremaks muuta ja genereerida ühikteste, mis on olemuselt lokaalsed ning ei vaja üldist rakenduse konteksti. Visual Studio Code ja IntelliJ kasutajad saavad selleks kasutada näiteks continue.dev või CodeGPT pluginaid, mis pakuvad oma API võtmega kasutamist. Siiski ei anna need veel eksponentsiaalset produktiivsuse kasvu, mida justkui võiks AI-lt eeldada. Näiteks kui infosüsteemis on vaja lisada uus väli, nagu „e-post“, võib see võtta hulga tunde, kuna muudatused tuleb teha kõikides kihtides alates andmebaasist kuni kasutajaliideseni, lisaks automaattestid ja validatsioonireeglite loomine. Tavapärased AI abilised saavad aidata, kui igas failis täpselt öelda, mida genereerida, saavutades sellega eelpool mainitud paarikümne protsendise kasuteguri.

Uuemad agent-tüüpi AI lahendused, mis käituvad oma olemuselt kui paarisprogrammeerijad, suudavad mõista teatud piirangutega kogu rakenduse konteksti ja teha koodi muudatusi üle failide. Sisuliselt on paarisprogrammeerimine nende rakendustega tagasi, kus üheks osapooleks on tehisintellekt. Need võimaldavad esitada tervikfunktsionaalsuse soove ja AI realiseerib need kogu koodibaasis, mida saab siis üle vaadata ning vajadusel lasta parandada nii nagu traditsioonilises paarisprogrammeerimises see toimuks. Alati võib ka tsükli pooleli jätta ja minna kirjutada tavapäraselt koodi edasi, seega saab siin balansseerida tavalise koodikirjutamise ja AI abil koodi genereerimise vahel, et efektiivselt tulemuseni jõuda. Lisaks aitavad agendid genereerida dokumentatsiooni ja integratsiooniteste lähtekoodile või lihtsustada võõra koodibaasiga tutvumist. Koodi kirjutamisele täiendavalt on võimalik astuda n-ö vestlusrežiimi ja arutleda rakenduse arhitektuuri või olemasoleva koodi disaini üle, enne kui hakata reaalseid muudatusi tegema.

Soovituslik on neid agente täna kasutada Anthropic Sonnet 3.5 mudeliga, kuid nad saavad hakkama ka OpenAI ja teiste mudelitega. Täpsema info nende võimekustest leiab Aiderist.

Kuigi tänased agent-tarkvarad teevad loomulikult ka vigu, on tagasiside ring kiire ja vead saab kiiresti lasta parandada. Paljud võivad arvata, et töötavat tarkvara sellises stiilis pole võimalik genereerida, mis oleks ka kvaliteetne, kuid AI-le sobilikus formaadis nõuete dokumentide loomine aitab sinna suunda liikuda, et genereeritud kood vastab teie enda arendus- ja arhitektuurinõuetele. Kes soovivad Visual Studio Code'i sees kindlasti toimetada, saavad seda tüüpi funktsionaalsust katsetada Cline nimelise pistikuga. IntelliJ või muu koodieditori kasutajatele, kes eelistavad käsureapõhist lahendust, on soovitatav proovida Aider-nimelist rakendust.

Mõlemad kirjeldatud lahendused on olemuselt vabavarad ja ainuke kulu on kasutatud „tokenite“ hulk, mille eest tuleb maksta mahupõhiselt. On olemas ka eraldi spetsiaalsed koodieditorid nagu näiteks Cursor, kuhu on vastav võimekus sisse ehitatud, aga need on kontopõhise kuutasuga ja lisaks tekitavad täiendava välise teenuskihi AI teenusepakkuja ja sinu arvuti vahel, mis paljudele ei pruugi sobida. Ise olen Cursorit testinud mõnda aega ja see toimib enamjaolt hästi, aga vahel on ka probleeme olnud koodimuudatuste sisseviimisel, kuid kuna tarkvara on aktiivses arenduses, siis usun et need ka varsti parandatakse.

Arvestades et kõik lahendused on alles väga värskelt loodud ja aktiivses arenduses, võib eeldada, et aasta pärast on küpsus hoopis teisel tasemel ning ilmselt näeme veelgi laiemat valikut seda tüüpi lahendusest. Aideri arendaja lasi just välja uue versiooni, kus oli märkmetes välja toodud, et Aider ise kirjutas 49% enda viimastest muudatustest, seega trend on selgelt näha.

Mida suuremaks lähevad laiatarbe mudelite kontekstiaknad, seda võimekamaks muutuvad ka agendid korrektse funktsionaalsuse genereerimisel. Täna on väiksemates komponentides tervikfunktsionaalsuste genereerimine juba täiesti teostatav, kuid mahukamates rakendustes on mõistlik teha muudatusi sisemiste moodulite kaupa, et hoida maht, mida AI mudelisse saadetakse, kontrolli all, sest see kajastub ka otseselt teie igakuisel arvel ja aitab vältida nö- hallutsineerimist, kus mudel enam ei hooma kogu sisu ja hakkab vigu tekitama. Antud agendid võimaldavad nii muudetavate failide skoopi kui kulusid efektiivselt jälgida.

Kokkuvõttes liigub tarkvaraarendus aina enam suunas, kus põhifookus hakkab liikuma korrektsete masintöödeldavate nõuete ja arhitektuuri loomisele ning kood genereeritakse selle alusel AI poolt, vähendades nii kordades konkreetsele arendusele kuluvat aega. Tulevikus peavad kõik rollid, kes tarkvaraarenduse protsessis osalevad, oma töö ja tulemused ümber mõtestama, arvestades meeskonnas uue, teistsuguse liikmega – tehisintellektiga. See areng toob kaasa uusi võimalusi ja väljakutseid, muutes tarkvaraarenduse maastikku oluliselt.

Mart Järvi AI-ga genereeritud pilt