GitHub Copilot – koneoppimisen hyödyt nykypäivän ohjelmoinnissa

Ohjelmointi on lähtökohtaisesti luovaa työtä, ja koodauksen myötä syntyvät ratkaisut erilaisissa projekteissa ovat yleensä hyvinkin tapauskohtaisia. Yhteen tarpeeseen suunniteltu koodi ei siis suinkaan toimi kaikkialla vaan ainoastaan sille tarkoitetussa kontekstissa. Softa-alalla onkin pohdittu, miten koneellisten työkalujen käyttö voisi auttaa käytännön koodaustyössä.

Ympäristön, käyttötarkoituksen ja muun kontekstin lukuun ottavan koodiratkaisun generoiminen koneellisesti on toki mahdollista. Ongelma on oikeastaan siinä, että generaattorille on äärimmäisen vaikeaa luoda tarpeeksi monimuotoinen säännöstö ja ehdot, jotka ottaisivat kaikki mahdolliset kontekstit ja ympäristön vaatimat nyanssit huomioon. 

Tämän sijasta on toki olemassa paljon toteutuksia, jotka generoivat jollakin tasolla yleiskäyttöisempiä ratkaisuja niille määritellyn yksinkertaisemman säännöstön mukaan. Näin generoidulla koodilla kuitenkin on aina selkeät rajansa, sillä generoitu ratkaisu ei suinkaan sovi kaikkiin tapauksiin, ja yleensä ihminen joutuu joka tapauksessa luomaan käsin yhteyden generoidun ja räätälöidyn koodin välille.

Koneoppiminen on tekoälyn osa-alue, jolla pyritään softa-alalla helpottamaan ohjelmointityötä sen omaksuman suuren datamäärän sekä ohjelmistokehittäjän aiemman toiminnan perusteella. Tekoälyä käyttävä toimiva ohjelma oppii ehdottamaan valmiita koodiratkaisuja keräämänsä tiedon pohjalta, mikä nopeuttaa ja helpottaa merkittävästi sekä mekaanista koodausta että ongelmanratkaisua.

Miten koneoppiminen toimii käytännössä, ja millaiset edellytykset sillä on helpottaa jokapäiväistä ohjelmointityötä?

Koneoppimisalusta pähkinänkuoressa

Eräs suhteellisen uusista keinoista hyödyntää tekoälyä ohjelmoinnissa on GitHubin kehittämä Copilot-koneoppimisalusta. Koneoppimisalusta osaa kouluttaa itseään sekä tarjota työkaluja erilaisiin käyttötarkoituksiin kehittyvällä tavalla, eli se pyrkii jatkuvasti parantamaan sekä omaa toimintaansa että ohjelmoijan työtä keräämänsä tiedon avulla.

GitHub Copilot avustaa ohjelmointia siten, että se ehdottaa kokemuksensa perusteella ratkaisuja sille kuvattuihin ongelmiin. Alustaa on koulutettu todella laajalla datamäärällä, jota on kerätty maailmanlaajuisesti ohjelmoijien koodaamista ratkaisuista. Datan pohjalta työkalu osaa ehdottaa ohjelmoijan käyttöön samaan koodiympäristöön teknisesti soveltuvaa koodia. 

Koneoppimisalusta myös tunnistaa ohjelmointikielen, käytettävän teknologian sekä koodattavan projektirakenteen ja ennustaa, millä ratkaisuilla koodin pitäisi toimia, koska kaikki muu on toteutettu sen ympärillä samalla tavalla. Yksinkertaistettuna koodaajan ei siis tarvitse itse kirjoittaa kaikkea, vaan kone ennustaa parhaansa mukaan sellaista jälkeä, jota ohjelmoija itse koodaisi. Näin ohjelmoija pääsee miettimään itse tavoiteltavaa ratkaisua vähemmällä fyysisellä työllä.

Koneoppimisalustan käytössä ohjelmoijan täytyy opetella, mitä kaikkea kone ymmärtää ja millä tavoilla asiat tulee kuvata, jotta se ymmärtää komennot ja kysymykset oikein. Koska alustan avulla voidaan hyödyntää huomattavasti aiempaa laajempaa ja monimuotoisempaa dataa, myös alustan tulkkaaminen on lähtökohtaisesti hieman aiempia työkaluja monimutkaisempaa: teknisen toteutuksen lisäksi ohjelmoijan tulee ymmärtää ja sanoittaa itse käyttötarkoitus eli se ihmiselle yleinen konteksti, jossa koodia tullaan käyttämään.

Edut käytännön koodauksessa

Koneoppimistyökalun käyttö mahdollistaa parhaimmillaan sen, ettei ohjelmistokehittäjän tarvitse osata kaikkia ohjelmointikieliä tai monimutkaisia algoritmeja täydellisesti, vaan käyttäjän tarvitsee vain osata kertoa koneelle haluttu toimenpide, jonka kone yrittää täyttää mahdollisimman hyvin ja halutulla tekniikalla.

Suurimpana etuna GitHub Copilotin käytössä voidaankin nähdä pyrkimys siihen, ettei ohjelmoijan tarvitse opiskella jatkuvasti Stack Overflowssa sovellukseen tarvittavaa tekniikkaa tai vaikkapa tarkistaa Googlesta syntaksia jostain ohjelmointikielestä, vaan koodaaja voisi keskittyä itse ongelman ratkaisuun ja vastaanottaa tekniset työkalut siihen alustalta. 

Joskus ohjelmoinnissa tulee myös vastaan tilanteita, joissa on hankala keksiä, miten jokin tavoite lähdetään saavuttamaan konkreettisesti. GitHub Copilotissa koodiriville voi kirjoittaa myös täysin selkoenglannilla, miten ja millä keinoilla ongelman voisi ratkaista. Jos halutaan koodata vaikkapa yksinkertainen funktio, joka suorittaa kertolaskun, koneen moottori lukee kysymyksen, tulkkaa sen parhaimmalla mahdollisella tavalla oppimansa mukaan ja tarjoaa siihen ratkaisun. Näin ohjelmoija voi saavuttaa tavoitteensa ja pääsee projektissa eteenpäin ilman, että on googlannut yhtään mitään.

Alusta ei kuitenkaan osaa itse tehdä kokonaisia ratkaisuja alusta loppuun, vaan se ainoastaan auttaa niiden tekemisessä – itse ohjelmoijien työpaikat eivät siis ole vaarassa. Kun kone oppii ennustamaan luotettavasti oikein, sen käyttö nopeuttaa merkittävästi työtä ja säästää mekaaniseen kirjoittamiseen ja koodirivien toistamiseen käytettävää aikaa. 

Koneoppimisen hyödyntäminen ja tulevaisuudennäkymät softa-alalla

Koneoppimistyökaluja on kehitetty jo hyvinkin pitkään, mutta ei ainakaan yleisesti GitHub Copilotia vastaavalla laajuudella. Tekoälyä on kuitenkin hyödynnetty aiemmin yksinkertaisemmissa ja pienemmän mittakaavan ohjelmointitöissä. Koneoppimisalusta on siis tässä skaalassa suhteellisen uusi ilmiö ja ensimmäisiä kaupallisia ja kehittäjille avoimia alustoja. Aiemmin vastaavanlaiset työkalut ovat olleet esimerkiksi tiettyjen tutkimuslaitosten yksityisessä käytössä.

Metatavulla alusta on ollut kokeilussa puoli vuotta. GitHub kerää alustasta aktiivisesti asiakaspalautetta, jotta palvelua voidaan kehittää jatkuvasti paremmaksi. Kaikkea alustan käsittelemää dataa, sen ennustamia ratkaisuja sekä sen avulla kirjoitettua koodia voidaan myös lähettää GitHubille jatkokehitykseen hyödynnettäväksi. 

Tällä hetkellä suurien kokonaisuuksien, kuten kokonaisten palvelujen kuvaaminen on GitHub Copilotille vielä hankalaa. Yksittäiset pienet kokonaisuudet, funktiot ja tietorakenteiden kopioinnit onnistuvat alustalla kuitenkin erittäin hyvin. Tämän päivän koodauksessa ongelman ratkaisemisen lisäksi varsinainen ratkaisu täytyy tuottaa itse myös fyysisesti. Toiveena alustalle olisikin, että jatkossa alustalle voitaisiin kuvata yksinkertaisesti ongelmia ja mahdollisia ratkaisumalleja niihin, ja alusta voisi sen perusteella tuottaa kokonaisen ja konkreettisen ratkaisun valmiina ulos. 

Koneoppimisen hyödyntämisen tulevaisuus ohjelmoinnin saralla näyttää kuitenkin erittäin valoisalta.