Säästä rahaa seuraavassa projektissasi valitsemalla tiukempi tyypitys
29 Lokakuu 2024
Antti Luukka
Senior Developer
Johdanto
Tiesitkö, että ohjelmointikielen (tai sen tyyppijärjestelmän) valinnalla voi olla merkittäviä taloudellisia vaikutuksia projektiinne pitkällä aikavälillä? Vaikka päätös saattaa tuntua tekniseltä yksityiskohdalta, se voi ratkaisevasti vaikuttaa kehityksen tehokkuuteen ja ylläpitokustannuksiin. Tässä artikkelissa keskitymme erityisesti tiukempien tyyppijärjestelmien hyötyihin ja siihen, miksi tiimisi tulisi suosia niitä tulevissa projekteissa.
Dynaamisesti tyypitetyt kielet ovat hallinneet web-kehitystä, osittain vaihtoehtojen puutteen vuoksi, mutta ennen kaikkea niiden lähestyttävyyden ja joustavuuden takia. Tällä joustavuudella on kuitenkin etunsa ja haittansa, ja joidenkin dynaamisesti tyypitettyjen kielten osalta on ollut pyrkimyksiä lisätä mahdollisuus käyttää tiukempaa tyypitystä, jotta pystyttäisiin vastaamaan nykyajan tarpeisiin.
Kielen valinta uuteen projektiin
Kun on aika aloittaa uusi projekti, tai lisätä merkittävä osa olemassa olevaan, nousee esille keskustelu kielivaihtoehdoista ja mieltymyksistä. Jokaisella kielellä on omat vahvuutensa, heikkoutensa, ja niillä voidaan monesti saavuttaa samankaltaisia tuloksia omassa ympäristössään. Yksi keskeinen päätös kieltä valittaessa on huomioida kielen tyyppijärjestelmä. Joustavuus voi tuoda nopeutta, mutta pitkällä aikavälillä tiukempi tyyppijärjestelmä voi säästää aikaa ja rahaa
Tiukemman tyypityksen hyödyt
Joustavuus on hyvä asia, sillä se tuo nopeutta, eikö? Nopeus on hyvä lyhyessä juoksussa, mutta pitkässä maratonissa tilanne muuttuu. Tyypillinen kompastuskivi on, että joustavuuden myötä kehityksessä voi syntyä epäselvyyksiä ja virheitä, jotka vaikeuttavat projektin edistymistä. Jos tavoitteena on rakentaa jotain suurempaa kuin pieni sovellus tai nopea prototyyppi, kannattaa alussa uhrata hieman nopeutta, jotta pystytään pitämään siedettävää vauhtia pidemmälläkin matkalla.
Suuremmissa projekteissa on tärkeää rakentaa turvaverkkoja, joiden avulla virheiden päätymistä tuotantoon voidaan vähentää ja sinne päätyneet voidaan pikaisesti korjata. Tiukasti tyypitetty kieli toimii osana tätä turvaverkkoa vähentämällä inhimillisiä virheitä, sillä kehitystyökalut voivat huomauttaa tehokkaammin virheistä kehityksen aikana.
Tiukat tyypit hidastavat kehitystä, sillä koodia syntyy enemmän ja tyyppien kanssa joutuu “taistelemaan”, mutta tämä pätee pääasiassa pienemmissä projekteissa tai yksin toimivissa kokonaisuuksissa. Kun projektiin kuuluu paljon liikkuvia osia, jotka kommunikoivat keskenään, alkaa olla entistä tärkeämpää, että nämä osat käyttävät yhteistä, tiukkaa kieltä (tyyppejä) välttääkseen väärinkäsityksiä, sillä muuten projekti saattaa ajan myötä kallistua yhä enemmän virheiden metsästykseen ominaisuuksien kehittämisen kustannuksella.
Tyyppien hyödyntäminen tekoälyn ja automaation parissa
Puhuttaessa ihimiliisistä virheistä, yksi merkittävä tekijä on tekoälytyökalut joita toimivat huomattavasti tehokkaammin tiukemmin tyypitetyn kielen parissa. Tyypit mahdollistavat tekoälyn toimivan edellistä tehokkaampana apurina ja saattaa auttaa suorittamaan asioita hieman nopeammin, edelleen kompensoiden tyypitykseen “hukattua aikaa”. Tyypit antavat suurille kielimalleille (Large Language Model) enemmän kontekstia, mikä auttaa niitä tuottamaan parempia tuloksia. Aivan kuten tyypit auttavat työkaveriasi (ja tulevaa itseäsi) ymmärtämään koodiasi, ne tekevät samoin myös tekoälytyökalujen kanssa.
Pitkän aikavälin säästöjä tyyppien avulla
Tiukemmat tyypit säästävät aikaa ja rahaa pitkällä aikavälillä, kun projekti kasvaa. Kehittäjät todennäköisesti nauttivat enemmän työskentelystä laajemman koodipohjan kanssa, koska muutoksia on turvallisempi tehdä. Uusien kehittäjien perehdyttäminen on myös helpompaa, sillä tyypit antavat enemmän kontekstia ja toimivat sisäänrakennettuna dokumentaationa. Tietyt työkalut toimivat huomattavasti paremmin, mikä puolestaan nopeuttaa kehitystä. Kun aikaa kuluu vähemmän virheenkorjaukseen, saavutetaan myös sivussa tuloksia, joita on vaikea mitata; menetettyjen käyttäjien määrä saattaa olla suurempi, jos jokin ei toimi odotetusti. Kuulet varmasti turhautuneista käyttäjistä, mutta on vaikeampi laskea käyttäjiä jotka ovat poistuneet samointein, kun asiat eivät toimineetkaan odotetulla tavalla.
Alan suuntaus kohti tiukempia tyyppijärjestelmiä
Jo jonkin aikaa on ollut kiihtyvä suuntaus kohti tiukempia tyyppijärjestelmiä. Jotkin kielet ovatkin ottaneet käyttöön tapoja joilla pakottaa tyyppien käyttöä. JavaScript, Python ja PHP ovat esimerkkejä suosituista kielistä, jotka ovat luonnostaan dynaamisia, eivätkä välttämättä suunniteltuja suurien projektien toteutukseen. Silti näiden kielten suosio on suuri, koska ne ovat helposti lähestyttäviä uusille kehittäjille, joustavia sekä hauskoja käyttää pienissä projekteissa. Saavutettavuuden ansiosta nämä kielet ovat saaneet ympärilleen valtavia yhteisöjä, mutta menestyksestä huolimatta on syntynyt tarve vakaudelle sovellusten kasvavan monimutkaisuuden hallitsemiseksi.
Yhteenvetona ja yksinkertaistettuna keskitason ja suurien projektien etuja ja haittoja:
Hyvät puolet:
- Tekoälyn ja muiden työkalujen parempi hyödyntäminen
- Dokumentaation automaatio sekä “sisäänrakennettu” dokumentaatio
- Toimivampi tiimityöskentely
- Turvallisempi muokata ja lisätä koodia
- Vähemmän virheenkorjausta ja ylläpitokustannuksia vähentyneiden inhimillisten virheiden ansiosta
Huonot puolet:
- Hidastaa kehitystä aluksi
- Vähemmän ketteryyttä, esim. pienet projetit, prototyypit tai muu kokeilu kehityksen yhteydessä (joissain kielissä tyypitykset voidaan ohittaa tarvittaessa)
- Jyrkempi oppimiskäyrä
- Voi monimutkaistaa yksinkertaisia tehtäviä
Nämä voi pitkällä tähtäimellä kiteyttää: tyytyväisemmät kehittäjät, tyytyväisemmät käyttäjät ja kehittäjät sekä merkittävät säästöt.
Yhteenveto
Projektin kieltä valittaessa on tärkeää huomioida projektin laajuus unohtamatta tulevaisuuden tarpeita. Monissa tapauksissa ei ole perusteita käyttää dynaamisesti tyypitettyjä kieliä, sillä menetät monia edellä mainituista eduista. Jotkut kielet, kuten JavaScript, tukevat siirtymistä tyyppeihin myöhemmässä vaiheessa (TypeScript). Joissain tapauksissa tämä voidaan tehdä jopa vaiheittain, mutta jos projekti on jo kasvanut ja sillä on useita kehittäjiä, se tulee olemaan vaikeaa, ja tuloksena on todennäköisesti tyytymättömiä kehittäjiä, hukattuja työtunteja ja koodikanta, jossa sekoittuvat löyhästi ja tiukasti tyypitetty koodi, josta ei välttämättä koskaan päästä täysin eroo. Tässä tapauksessa on myös riskinä, että tyypityksen hyödyt jäävät kyseenalaisiksi.