ChatGPT on OpenAI:n kehittämä huippuluokan kielimalli, joka on koulutettu massiivisella datamäärällä. Tämä mahdollistaa sen vastaavan monenlaisiin kysymyksiin eri aihealueilta, mukaan lukien ohjelmistokehitys. Ohjelmistokehityksen automatisoinnin kasvavan kysynnän myötä ChatGPT:n integroiminen kehitysprosessiin voi tarjota useita etuja. Se voi auttaa kehittäjiä säästämään aikaa tarjoamalla nopeita ja tarkkoja vastauksia heidän kysymyksiinsä, mahdollistaen heille keskittymisen koodaamiseen ja ongelmanratkaisuun. Lisäksi se voi toimia oppimistyökaluna aloittelijoille ja referenssinä kokeneille kehittäjille. Tässä blogipostauksessa tutkimme ChatGPT:n hyödyntämisen etuja ohjelmistokehityksessä ja sitä, miten se voi parantaa kehitysprosessia.
Huomasitko, että yllä oleva teksti on ChatGPT:n generoima?
Ohjelmistokehityksessä Googlettaminen on yksi perus ”työkaluista” päivittäisessä työssä. Käsittelemme useita kieliä, jokaisella yhteisiä sekä omia luokkia, tyyppejä ja erilaisia metodeja. Välillä pitää virkistää muistia mitä mikäkin pitää sisällä, tai tutkia löytyykö jollekin pulmalle olemassa olevaa kirjastoa/pakettia. Kohtaamme paljon erilaisia ja eritasoisia haasteita. Moniin on jo olemassa vastaus, se pitää vain kaivaa internetin syövereistä.
Yksi perus ohjelmointiperiaatteista tunnetaankin lyhenteestä DRY – Don’t Repeat Yourself. Mutta vastaus pitää tonkia monen… ei niin hyödyllisen ehdotuksen seasta. Stackoverflowista csharpcorner threadeihin. Lisäksi pitää ohittaa mainokset ja keksi-ikkunat.
Mitä jos voisit vain kirjoittaa tekstikenttään mitä haet takaa, ja kaiken tuon linkki kliksuttelun sijaan vastaus muodostuisi hakusi alle suoraan?
Laitetaanpas kyseinen ajatus testiin; avataan ChatGPT ja syötetään muutama ohjelmointipulma eri ohjelmointikielillä ja katsotaan, voidaanko vastauksia hyödyntää. Ja mikä tärkeämpää, tekeekö se meidän työskentelystä tehokkaampaa.
Kursiivit tekstit kuvastavat syöttämiäni kysymyksiä ChatGPT:lle.
Testi #1 – SQL
Structured Query Language eli SQL on yleinen tietokantojen kyselykieli. Testataanpa string manipulointia eli tekstin käsittelyä. Haluamme erottaa tekstistä, joka sisältää pilkuilla erotetun luettelon asioita, ensimmäisen elementin SQL:llä.
How to get the first element of a comma separated string in SQL?
Vastauksena ChatGPT ehdotti seuraavanlaista koodipätkää (korostettu vihreällä), sisältäen myös kuvauksen käytetyistä funktioista sekä esimerkin toiminnallisuudesta:
Vaikuttaa pätevältä ratkaisulta, isketäänpä se sisään. Hmm, näyttäisi siltä, että SUBSTRING_INDEX ei ole tuettu funktio käytetyssä SQL versiossa. Kerrotaan se ChatGPT:lle.
SUBSTRING_INDEX is not a recognized built-in function in this version of SQL.
Ja pelkästään virheviestin perusteella saamme toisenlaisen ratkaisun:
Kokeillaan koodipätkää ja sehän toimii. ChatGPT huomioi myös ratkaisussaan virhetilanteet, jos tekstissä ei olekaan pilkkuja.
On tärkeää tuoda esille, että ChatGPT ei vain printtaa pelkkää koodia ruudulle, vaan se alustaa vastauksen ”voimme tehdä tämän esimerkiksi…” ja koodipätkän jälkeen antaa selityksen mitä on tehty ja miksi.
Mutta SQL on kuitenkin vasta lämmittelyä. Siirrytäänpä frontend puolelle.
Testi #2 – JavaScript
JavaScript on yleisesti käytetty ohjelmointikieli, mikä pyörii selaimessasi myös tätä blogia avatessa. Kysytään ChatGPT:ltä miten sidotaan ’onclick’ -tapahtuma dynaamisesti lisättyihin painikkeisiin JavaScriptissä, käyttäen jQuery kirjastoa.
How to bind an onclick event to dynamically added buttons using JavaScript and the jQuery library?
Tekoäly luo kokonaisen HTML sivun esimerkissä ja kaivoi jQuery -kirjaston käyttöön. Tuotoksen voi vaikka kopioida notepadille, tallentaa .html -muodossa ja avata selaimessa.
Testi #3 – C#
C# on Microsoftin kehittämä ohjelmointikieli, laajasti käytetty .Net -pohjaisissa sovelluksissa, web- ja Windows -sovelluksista pelinkehitys kielenä Unity pelimoottorissa.
Annetaan ChatGPT:lle seuraavanlainen kehote:
Let’s say we have the following classes in C#:
Project, which consists of int Id, string Name and DateTime Created.
Person, which consists of int Id, string Name, DateTime Created.
Role, which consists of int Id, string Name, DateTime Created
RolesInProject, which consists of int Id, Project Project, Role Role, Person Person, DateTime Created.
The RolesInProject class represents a relational table for the projects and the roles of the persons in them.
How can we get a list of the most recent person of a specific role in each project?
Eli lyhyemmin suomennettuna: meillä on Projekti luokka, Rooli luokka, Henkilö luokka ja Roolit Projektissa luokka. Jokainen luokka sisältää nimen ja päivämäärän. Haluamme kerätä viimeisimmän henkilön tietyllä roolilla jokaisesta projektista.
ChatGPT kertoo, että tämän voi toteuttaa käyttämällä C#:n LINQ kirjastoa. Esimerkissä on myös olettamus, että käytössä on Entity Framework Core, joka on yleinen tietokantakysely teknologia ASP.NET kehitysympäristössä.
Yllä olevassa esimerkissä generoitu koodi käyttää LINQ:n method syntaksia. Kysyin toisena päivänä uudestaan ja esimerkki onkin tehty query syntaksilla, tarjoten eri vaihtoehtoja samaan tulokseen.
Ja molemmat antavat saman halutun tuloksen.
Testi #4 – React, TypeScript
Nostetaan vielä tasoa. React on JavaScript kirjasto komponenttipohjaisten käyttöliittymien luomiseen ja TypeScript on taso JavaScriptin päällä tuoden kieleen vahvat tyypitykset.
Olkoon meillä kyseisillä kirjastoilla muodostettu webbisovellus. Sanotaan, että meillä on jo rajapinta tai vähintään skripti, joka kutsuu rajapinnasta listan projekteja tai yksittäisen projektin ID:n perusteella. Mutta haluamme lisätä seuraavanlaiset komponentit: projektilista sekä yksittäistä projektia klikkaamalla saamme tämän valitun projektin tiedot omana näkymänä.
Let’s say we have a React TypeScript web application. There’s an api.ts file which contains calls to an API. One of the functions is getProject(id:number): Promise<IProject> which sends a GET request to the API which then returns the project with the specified id.
We have a view that displays all projects in a list with a button element that, when clicked, opens a details view of the project by fetching the project with the API method mentioned above. How would we be able to implement this details view?
Katsotaan miten AI suoriutuu:
ChatGPT ensin listaa vaiheet:
- Luodaan uusi komponentti projektin tiedoille, joka vastaanottaa projektin tiedot.
- Projektilista komponenttiin lisätään ’onClick’ -tapahtuman käsittelijä, mikä avaa tiedot näkymän.
- Yllä mainittu käsittelijä kutsuu rajapinnan ’getProject’ -funktiota, passaten projektin ID:n
- Kun data on saatu, passataan tiedot eteenpäin projekti tiedot -näkymälle.
- Renderöidään projekti tiedot komponentti.
Jonka jälkeen tulostuu itse koodit. Ja lopuksi selitys.
Tuotettu koodi suurimmaksi osin on toimivaa, se sisältää kommentit selittäen, mihin tiedostoihin mikäkin sisältö kuuluisi.
Yhteenveto
ChatGPT:ssä on selvää potentiaalia helpottamaan ohjelmistokehittäjän työtä. Vaikka en suoranaisesti kellottanut kumpi on nopeampaa, googlettaminen vai ChatGPT:n vastauksen generointi, väittäisin jälkimmäisen olevan nopeampaa etenkin haastavammissa pulmissa – ainakin silloin kun se on saatavilla. ChatGPT:ssä on ajoittain, korkean ruuhkan myötä, käyttökapasiteetti täynnä, jolloin palvelua ei ole saatavilla. Nyt puhutaan tietenkin vain ilmaisversiosta. Palvelusta on saatavilla pay-as-you-go malleja, mitkä nostavat rajoituksia. Näistä voi lukea lisää täältä.
Kuitenkin se, että ei tarvitse etsiä Stackoverflow:sta sitä eniten äänestetyintä vastausta on jo plussaa. Ja mikäli vastauksessa on puutteita tai virheitä, siihen voi saada korjauksia osoittamalla virheet. AI:n kieliasukin on luettavampaa kuin moni forum postaus – myös suomenkielellä.
Itse tekijää AI ei vielä kuitenkaan korvaa. Sillä voi luoda yksittäisiä pätkiä koodia, mutta projektin kokonaisuutta se ei kykene sisällyttämään. Ja jos pyytää kehittämään aiempaa vastausta lisää, monesti se voi unohtaa kontekstin.
ChatGPT:tä pääsee kokeilemaan OpenAI sivulta, skrollaamalla ChatGPT osioon ja klikkaamalla ”Try ChatGPT”. Tai hakeutumalla suoraan http://chat.openai.com/chat. Käyttö vaatii kirjautumisen, jonka voi suorittaa muun muassa perus Google tunnistautumisella.
Tämän blogikirjoituksen on kirjoittanut asiantuntijamme Harto Kuukka.
Mikäli haluat keskustella ohjelmistokehitystarpeistanne, ole yhteydessä.