Palataan vuoteen 2000, ensimmäiseen työpäivään. Opiskelut VAMK:ssa olivat loppusuoralla ja keskustelu mahdollisesta insinöörityöstä oli poikinut vakituisen työpaikan Wapicella. Java-ohjelmistokehittäjänä ensimmäinen editori oli Ultraedit, ihan tavallinen tekstieditori, mutta Notepadia parempi siinä mielessä, että se väritti tekstiä, sisensi funktiot automaattisesti, ja osasipa se ehdottaa jo kirjoitettuja metodeita ja muuttujiakin. Apuna oli selaimessa auki JavaDocs, eli dokumentaatio Javaan sisäänrakennetuista toiminnallisuuksista. Koodin virheiden selvittäminen oli pääasiassa konsoliin logittamista, joka rivin jälkeen. Mikä on minkäkin muuttujan arvo, mitä funktio palauttaa, missä kohdassa virhe tapahtuu. Näillä eväillä kuitenkin suvereenisti digitalisoitiin tilaus-toimitusprosesseja, tehtiin sarjanumeroiden generointi- ja seurantatyökaluja, ohjekirjojen käännöstyökaluja, jopa niitä wap-sovelluksia ja paljon paljon muuta. En tietänyt paremmasta, enkä silloin edes kaivannut parempaa. Kaikki oli omissa käsissä ja uuden oppiminen oli jatkuvaa.
Pari vuotta myöhemmin aukeni ihan uusi maailma, kun otimme käyttöömme Eclipse-kehitysympäristön (IDE), joka vei kehittämisen ihan uusiin ulottuvuuksiin, nimensä mukaisesti. Ei tarvinnut enää kääntää ohjelmia komentotulkissa erikseen, monet rutiinityöt sai siirrettyä työkaluun. Pelkästään hakuominaisuudet olivat pelkkään tekstieditoriin tottuneelle huikeat. Haun sai laajennettua hakemaan kaikista projektin tiedostoista kerralla. Oli mahdollista siirtyä tiedostosta toiseen, kun halusi selvittää, mitä koodissa tapahtuu. Virheiden etsiminen tapahtui debuggaamalla koodia rivi kerrallaan, hyvästit konsoliin logittamiselle. Java-luokkien perus get- ja set-metodit sai luotua automaattisesti. Kun työkalun sai otettua haltuun, kaikki oli huomattavasti paljon helpompaa. Käytinkö vielä Ultraeditiä sen jälkeen? En todellakaan. Toki, on tunnustettava, että niin syvälle se kuitenkin meni selkärankaan, että käyttäessäni tekstieditorina nykyään Notepad++:aa, joka toinen kerta silti kirjoitan koneeni sovellushakuun Ultr… ja muistan, siitä on jo yli 20 vuotta.
Nyt eletään vuotta 2024, ja historian siipien havina sikseen. Eclipse on toki Wapicellakin yhä käytössä, ja sitä käytetään oppilaitoksissa Java-ohjelmoinnin opetuksessa edelleen. Työkalu on kehittynyt ja koodaaminen helpottunut ja tehostunut entisestään. Ja nyt, suurten kielimallien (LLM), kuten esimerkiksi ChatGPT, myötä, koodaaminen on entisestään helpottunut ja tehostunut. LLM, eli Large Language Models, ovat syviä neuroverkkomalleja, jotka on koulutettu suurella määrällä tekstimateriaalia ja kykenevät tuottamaan luonnollisen kielen tekstiä, vastaamaan kysymyksiin, tekemään käännöksiä ja suorittamaan muita luonnollisen kielen käsittelytehtäviä. Se mihin olemme OpenAI:n ChatGPT:n tai Microsoftin Copilotin kanssa jo tottuneetkin. Näillä esimerkkityökaluilla kuka tahansa voi teettää koodia ja saada yksinkertaisia ja vähän monimutkaisempiakin sovelluksia aikaan. Näiden työkalujen avulla esimerkiksi virheiden etsintä on helpottunut. Nyt meneillään olevalla Johdatus ohjelmointiin kurssilla yksi opiskelija kehui ChatGPT:tä nimenomaan kirjoitusvirheiden löytämisessä. Hänellä oli ollut virhe koodissa, jota ei omat silmät löytäneet millään, mutta kopioimalla koodi ChatGPT:lle ja kysymällä siltä mikä voisi olla vikana, kun koodi antaa virheen x konsoliin, oli ChatGPT löytänyt virheen ja opiskelija saanut koodin korjattua.
Mutta mitä ohjelmistokehittäjät tekevät, mihin ja miten he hyödyntävät tekoälyä? Ihan vastaaviin asioihin kuin muutkin ammattilaiset, tehostamaan tekemistä, etsimään virheitä, sparrauskaverina, erilaisten vaihtoehtojen selvittämiseen. Aputyökaluna, samalla lailla kuin vaikkapa hakukoneita, keskustelufoorumeita tai ihan vaan kollegoita tähänkin saakka. Harvoin löytyy sellaista ongelmaa, johon ei joku olisi jo löytänyt ratkaisua, ja mitäpä sitä keksimään pyörää uudelleen. Meillä senioreilla, ja nyt en tarkoita ikää, vaan kokemusta, on tietysti se etu, että osaamme perusteet, hallitsemme substanssin, ymmärrämme ja osaamme lukea koodia nopeasti. Osaamme haastaa tekoälyn tekemiä usein liiankin monimutkaisia ratkaisuja, osaamme poimia tekoälyn vastauksista sen oleellisen tiedon. Eri ohjelmointikielten haltuunotto on nykyään huomattavasti helpompaa, kun on tekoäly apuna. Toisaalta myös viihdytämme itseämme kokeilemalla ja haastamalla, kiusaamallakin tekoälyjä, hakemalla sen rajoja. Lapsihan on terve, kun se leikkii -sanonta pätee myös meihin insinööreihin. Innostumme, kokeilemme, käytämme, hylkäämme, kehitämme, keksimme uutta.
Tuoreimpana työkaluna ohjelmistokehittäjille ovat tekoälypohjaiset ”koodausavustajat”, esimerkiksi GitHubin Copilot. Se on kehitetty yhteistyössä ChatGPT:n kehittäjän OpenAI:n kanssa. Copilot käyttää valtavaa määrää dataa, kuten koodiesimerkkejä ja dokumentaatiota opetellakseen miten ohjelmointikieliä käytetään ja miten koodia voidaan kirjoittaa. Copilot on integroitu GitHubin kehitysympäristöön ja se siis tarjoaa ohjelmistokehittäjille avustajan, joka voi ehdottaa koodia kirjoittamisen aikana. Copilotia voi käyttää toisten tekemän koodin selittämiseen ja ymmärtämiseen, siltä voi esimerkiksi kysyä koodiin liittyviä kysymyksiä. Sitä voi käyttää myös yksikkötestien tekemiseen, ja siinä on yksistään valtava potentiaali koodin kirjoittamisen tehostamiseen.
Vuosi sitten huhtikuussa Italia esti ChatGPT:n käytön kuukaudeksi. Tutkimuksen [1] mukaan ohjelmistokehittäjien tuottavuus putosi noin 50% kahden ensimmäisen päivän aikana. Seuraavien päivien jälkeen se palautui normaaliksi, todennäköisesti siitä syystä, että kehittäjät löysivät keinot käyttää työkalua estoista huolimatta. Mitä se todistaa? Sitä että omien kokemusten ja myös tutkimusten mukaan tekoälyn käyttö todellakin tehostaa tekemistä. Mutta emme saa unohtaa, että olemme itse kuitenkin sen käytöstä vastuussa, tekoälyn kanssa on oltava tarkkana.
Mihin tekoälyä sitten ei käytetä? Edelleenkään julkisiin versioihin ei syötetä tuotantokoodia sellaisenaan. Jos projekti on suuri, satoja tiedostoja, satojatuhansia koodirivejä, ei tämänhetkiset työkalut vielä oikein riitä tehokkuudeltaan tai lukukyvyltään tuottamaan tuotantokelpoista koodia. Aiemmin mainittu Copilot on toki tietoturvallinen, sillä siitä saa omaan organisaatioon paikallisen version, eikä se jaa mitään ulospäin, ja sen käyttö laajenee koko ajan.
Tulevaisuus, se on vielä luonnollisesti auki. Työkalut kehittyvät jatkuvasti. Low-code ja no-code ratkaisut kehittyvät, ja todennäköisesti jollain aikataululla tulevat valtaamaan alaa. Varmaa on kuitenkin se, että meitä kehittäjiä tarvitaan vielä pitkään, vuosikymmeniä. Teollisuudessa ohjelmistojen elinkaari on pitkä, eikä olemassa oleviin koodipohjiin noin vain saada tekoälyä koodaamaan toimivaa ja tuotantokäyttökelpoista koodia. Uusien sovellusten kehittäminen jollain aikataululla muuttunee, mutta mihin, se jää nähtäväksi. Joka tapauksessa tässä pätee sama sääntö kuin muissakin, tekoäly ei vie ohjelmistokehittäjän työtä, mutta tekoälyä hyödyntävä ohjelmistokehittäjä vie työt niiltä, jotka eivät hyödynnä tekoälyä.