Mikko Uuksulaisen kotisivu

28. joulukuuta 2023

Copilot kokemuksia

Hehkutus tekoälyn ympärillä on ollut suurta ja täynnä odotuksia

Teoriassa ohjelmointiin ei tarvita muuta kuin tekstieditori ja valitsemansa kielen kehitystyökalut. Käytännössä meitä koodareita on kuitenkin vuosien kuluessa hemmoteltu elämää helpottavilla työkaluilla, joista mainittakoon esimerkkinä erilaisia työkaluja pursuavat IDEt, koodiehdotuksia tarjoilevat kielipalvelut (esim. Intellisense) ja koodia jo ennen ajoa korjaavat staattiset analyysityökalut (esim. SonarQube). Kuin tyhjästä koodia taikovat tekoälyavusteiset työkalut ovatkin varsin luonnollinen jatke tälle kehitykselle.

Hehkutus tekoälyn ympärillä on ollut suurta ja myös täynnä odotuksia. Sama on pätenyt koodaamisen tekoälyavustimiin, joiden on povattu vähintään muuttavan koodaamisen koko luonteen tai pahimmissa skenaarioissa hävittävän koko ohjelmistokehittäjän ammatin. Toistaiseksi kuitenkaan mikään ei ole järisyttävästi muuttunut, mutta pysyvän jäljen tekoäly on jo nyt koodarin työtapoihin jättänyt.

Tällä hetkellä tekoälyavustimet sekä kirjoittavat koodia että toimivat tarvittaessa työkaverin korvikkeena, toisina silminä ja kumiankkana. Kuten muidenkin työkalujen kanssa, ihan kaikkea täyspäiväinen koodari ei ehdi testaamaan, ja omat kokemukseni perustuvatkin lähinnä Microsoftin tarjoamaan GitHub Copilotiin.

Olen itse elänyt tekoälyavusteisessa maailmassa keväästä lähtien ja käyttänyt Copilotia kaverina asiakasprojekteissa ja muissa pienemmissä kehitystöissä. Siirryin tuolloin myös jonottamaan Copilotin seuraavaa X-iteraatiota, ja sen sain käyttöön syksyn tullessa. Kokemusta hyödyistä ja haasteista on siis ehtinyt jo jonkin verran kertymään.

Hallusinaatioiden harmitusta

Käytän Copilotia lähinnä koodin kirjoittamisen apuna. Kun kehitän ohjelmistoa, Copilot ehdottaa Visual Studiossa koodinpätkiä, joita se uskoo minun tarvitsevan. Valitettavasti ehdotukset ovat toistuvasti niin pahasti pielessä, että työtavakseni on muodostunut seuraava: kirjoita koodia, hyväksy Copilotin ehdotus, totea ehdotuksen olevan täysin pielessä, pyyhi se pois ja kirjoita tämän jälkeen koodi siten kuin halusin. Lähinnä ehdotukset häiritsevät näin omaa ajatusprosessia, eivätkä ne tuo mitään lisää koodin kirjoittamisen tehokkuuteen.

Suuriin kielimalleihin pohjautuvat tekoälyt kärsivät valitettavan paljon hallusinoinnista eli siitä, että ne esittävät väärää tietoa faktana. Koodin osalta hallusinaatio esiintyy niin, että tekoäly esittää suurella itsevarmuudella koodiehdotuksia, joissa logiikka sinänsä voi pitää paikkansa, mutta koodissa esiintyy esimerkiksi muuttujien tai tyyppien nimiä, joita ei ole olemassakaan. Tähän ongelmaan törmään valitettavasti jatkuvasti myös omassa kehitystyössäni.

Luonnollisin selitys hallusinoimiselle on, että tekoälymalli ei tunne tarpeeksi hyvin aihetta, josta siltä pyydetään generoimaan vastauksia. Copilot on koulutettu hyödyntäen GitHubin avoimen lähdekoodin projekteja, joista häviävän pieni määrä on kirjoitettu C#:lla. Toisekseen generoidusta koodista tulee juuri niin laadukasta kuin se aineisto, jolla malli on koulutettu, ja laatu esimerkiksi ihmisten harrasteprojekteissa voi olla vaihtelevaa. On mahdollista, että Copilot toimii luotettavammin muiden ohjelmointikielten kanssa, mutta tästä itselläni ei ole tarpeeksi kattavaa kokemusta.

Vau-hetkiä

Välillä Copilot kuitenkin osuu oikeaan, ja silloin tekoälyn todellinen potentiaali tulee esille piilostaan. Copilot esimerkiksi generoi luotettavasti listoja, oppii nopeasti toistuvat asiat, jotka refaktoroidessa saattavat nousta esiin, sekä välillä täydentää ajatusta nopeammin, esimerkiksi kommentteja.

Parhaimmillaan tekoäly toimii aivojen jatkeena silloin, kun se auttaa muistamaan asioita, joita itselle ei välttämättä heti tule mieleen. Yksinkertaisimmillaan tämä vähentää googlaamisen tarvetta, kun tekoäly täydentää pikavauhtia jotain, mitä olisi pitänyt lähteä itse kaivamaan dokumentaatioista. Olen kokeillut tekoälyn käyttöä myös sellaisten ohjelmointikielten kanssa, joiden syntaksia en muista ulkoa, ja huomannut, miten kätevästi tekoäly täydentää aukon, jossa tiedän haluavani tietynlaisen toiminnallisuuden, mutta en tiedä tarkasti, miten se tulisi kirjoittaa. Oppimisen työkaluna tekoäly siis toimii loistavasti.

Ja onhan se myönnettävä, miten siistiä se kuitenkin on, kun muutaman sanan vihjeellä tekoäly generoi kokonaisia metodeja tai luokkia ja koodia kirjaimellisesti ilmestyy rivikaupalla silmien eteen. Näissä tilanteissa ajatukset välillä kääntyvät siihen, että tarvitaanko tässä koodaria kohta ollenkaan?

Kohti tulevaisuutta ja sen yli

Tekoälytyökalut jakavat vahvasti mielipiteitä, ja käyn ajatuksissani itsekin jakolinjojen molemmilla puolilla. Toisille AI on kaivattu supervoima, jonka avulla koodia on mahdollista kehittää tehokkaammin ja nopeammin, ja toisille taas lähinnä kummastuksen aihe siitä, että mitä ihmeellistä tässä nyt sitten olikaan. Ajattelen, että erot selittyvät sillä, kuinka kokenut kehittäjä työkaluja käyttää. Näin vanhemmalle kehittäjälle työkalut eivät ehkä enää tuo niin suurta helpotusta, mutta vasta uraansa aloittava saattaa tekoälyn avulla nostaa omaa tasoaan korkeammalle.

Lopulta on myönnettävä, että itselle tekoälytyökalut ovat tällä hetkellä enemmän riesa kuin supervoima. Huonojen hetkien joukkoon kuitenkin mahtuu myös niitä suurenmoisia tilanteita, jolloin Copilot näyttää parhaat puolensa. Nuo hienot hetket saavat ajattelemaan, että kyllä sitä on ihmeellisten asioiden kanssa tekemisissä ja AI:lle on syytä vielä antaa mahdollisuuksia.

Tekoälyn hyödyt riippuvat paljon käyttötapauksesta, eikä myöskään siksi kannata antaa lopullista tuomiota, kun elämme vasta tekoälyn aamunkoittoa ja AI:n erilaiset mahdollisuudet vielä laajenevat.

Tekoälytyökaluissa on paljon potentiaalia, mutta samalla paljon ongelmia, joista suurin on ihminen itse. On mielenkiintoista nähdä, voidaanko koodaamisen yhtälöstä jättää jonain päivänä itse ihmiselle tarkoitettu koodi pois ja oppiiko tekoäly generoimaan tietokoneen ymmärtämää koodia ihmisen syöttämän luonnollisen kielen kautta. Elämme murroskohdassa, jossa on jännittävää seurata, mitä tulevaisuus tuo tullessaan, ja arvailla, miltä koko alamme saattaa vuosikymmenien päästä näyttää.

Julkaistu alunperin täällä. Kiitos Satu Kuusinen oikoluvusta ja editoinnista!