Senior Software Developer Mikko Uuksulainen osallistuu keskusteluumme tekoälystä ohjelmistokehittäjän työkaluna.
Blogiartikkelin kuvitus: Mikko Uuksulainen ja tekoälytyökalu Stable Diffusion.
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 ja niiden 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 myös muiden 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 koodin pä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ä ja pyyhi se pois ja tämän jälkeen kirjoita koodi siten kuten 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ää paikkaansa, 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 siitä 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 millä malli on koulutettu ja laatu esimerkiksi ihmisten harrasteprojekteissa voi olla vaihtelevaa. On mahdollista, että Copilot toimii luotettavammin muiden ohjelmointikielien 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, joita refaktoroidessa saattaa 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 ohjelmointikielien kanssa, joiden syntaksia en muista ulkoa ja huomannut miten kätevästi tekoäly täydentää aukkoa, 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 metodeita 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 puolin. Toisille AI on kaivattu supervoima, jonka avulla koodia on mahdollista kehittää tehokkaammin ja nopeammin ja toisille taas lähinnä kummastuksen aihe, että mitä ihmeellistä tässä nyt sitten olikaan. Ajattelen, että erot selittyvät sen kautta, että 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 aloitteleva 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 ja myöskään siksi ei 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ää joku päivä 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ää.
![Mikko Uuksulainen](https://adafy.com/wp-content/uploads/2022/05/mikko_uuksulainen.png)
Senior Software Developer
Mikko Uuksulainen
Adafy on näkemyksellinen ohjelmistokumppani, jonka Microsoft-teknologiaosaaminen on tunnustetusti Suomen huipputasoa.