Ohjelmistojen toteuttamisen kenttä

Osaamistavoitteet

Tällä viikolla keskitymme abstraktion käsitteeseen. Osion jälkeen osaat selittää suuren ohjelmiston toteuttamisen perushaasteet sekä abstraktion roolin ohjelmistokehityksen mahdollistajana. Tunnet myös abstraktion eri tasojen taustat ohjelmistojen kehityksessä ja osaat selittää, mikä on rajapinta.

Ohjelmistoja ja ohjelmoitavia laitteita on kaikkialla joten ne vaikuttavat arkeemme monin tavoin. Arkemme sujuvuus siis riippuu näiden ohjelmistojen ja laitteiden laadusta eli siitä, miten tehokkaita, luotettavia ja ylläpidettäviä ne ovat ja miten sujuvaa niiden käyttäminen on. Tämä tarkoittaa myös, että yksittäisenkin ohjelmiston koodimäärä on suuri. Tähän saakka ohjelmoinnin opiskelussa on keskitytty pienten, henkilökohtaisten projektien toteuttamiseen. Tästä etuna on ollut se, että olet voinut oppia ohjelmoinnin perusasioita käytännössä: miten kirjoitetaan syntaktisesti oikeanlaista koodia, miten ohjelma ajetaan ja miten sen toiminnassa esiintyviä virheitä korjataan. Pienet, korkeintaan muutamien satojen rivien ohjelmat ovat helposti yhden koodarin hallittavissa. Yksi ihminen pystyy ymmärtämään kaikki ohjelmistoprojektiin vaikuttavat tekijät juurta jaksaen projektin alusta loppuun ja ohjelmointi keskittyy pitkälti käsillä olevan ongelman algoritmisen ratkaisun luomiseen ja sen oikean toiminnallisuuden varmistamiseen. Käytännössä ohjelmistot ovat kuitenkin monimutkaisia ja sisältävät paljon muutakin kuin koodia: mm. Googlen palveluissa arvioidaan olevan noin kaksi miljardia koodiriviä, joita kehittää yli 25000 ohjelmistokehittäjää. Yleisemmin laajoja ohjelmistoja luonnehtii:

  • Toiminnallisen kokonaisuuden laajuus: Yksittäinen tiimin jäsen ei pysty hallitsemaan tai edes ymmärtämään koko ohjelmistoprojektia tai sen koodia.

  • Suuri kehittäjätiimi: Ohjelmistoa kehittää yksittäisen koodarin sijaan kehittäjätiimi, johon kuuluu ohjelmistokehittäjien lisäksi käyttäjäkokemusasiantuntijoita, graafikoita, tuoteomistajia, data scientistejä ja muita asiantuntijoita.

  • Kommunikoinnin merkityksen kasvu: Tiimin koon kasvaessa kehittäjätiimin keskinäisen kommunikaation merkitys kasvaa.

  • Ohjelmiston suunnittelu keskeistä: Ohjelmiston rakenne vaikuttaa siihen, miten hyvin ohjelmistotiimin työnjako onnistuu. Myös ohjelmiston eri osien välillä tapahtuvan viestinnän merkitys korostuu.

Tapa koodata pieniä ohjelmia ei ole suoraan skaalattavissa suurten ohjelmistojen toteuttamiseen. Kokonaisuuden hallitsemiseksi on kehitetty prosesseja ja toimintatapoja sekä joukko työkaluja ohjelmistokehityksen sujuvoittamiseksi. Lisäksi ohjelmistokielet tarjoavat tapoja mahdollistaa ohjelmien toteuttaminen itsenäisinä palasina. Kurssilla Ohjelmointi 1: Johdatus ohjelmointiin opit pienten ohjelmien toteuttamisen kautta ohjelmoinnin perusasioita. Ohjelmointi 2: Perusteet -kurssilla opit jo pienen ohjelman toteuttamisen mittakaavassa keskeisiä perustaitoja ohjelmistokehityksestä: opit mm. jakamaan ohjelmaa helpommin hallittaviin osiin, käyttämään epäsuoruutta sekä versionhallinnan perusteita. Kurssimme nimi Ohjelmointi 3: Rajapinnat ja tekniikat antaa vinkkiä siitä, millaisilla asioilla osaamistasi nyt kartutetaan. Kurssi keskittyy suurten ohjelmien toteuttamisen ongelmakenttään. Sen aikana opit sekä ohjelmointikielen tarjoamia keinoja laajojen ohjelmistojen kehittämiseen että ohjelmistoprojektien työskentelyyn käyttämiä työkaluja tiimityöskentelyssä. Lähdetään liikkeelle meille varsin luontevasta käsitteestä: abstraktiosta.

Materiaalin laadinnassa käytettyjä lähteitä: