Olen tämän syksyn opettanut itselleni uutta PC osana mittausjärjestelmää -opintojaksoa, josta käsittelyssäni on tullut pitkälti ohjelmoinnin jatkokurssi. Hommassa kiintoisinta on ollut ohjelmistosuunnittelun välineiden tärkeyden hahmottaminen ja tämän välittäminen opiskelijoille.
Tilakone on periaatteessa (peruskäyttöä tarkastellessa) hyvin yksinkertainen väline, tai formalismi. Se auttaa hahmottamaan ohjelmiston, no, tilojen rakennetta ja suhteita toisiinsa. Opettaminen laittaa aika pienelle paikalle, kun opiskelijoiden oppiminen tuntuu itsestä joskus hitaammalta kuin sitä itse olettaisi.
Opiskelijoiden hitaudessa on pitkälti kyse näköharhasta: Itse olen jo oppinut asian aiemmin; en enää muista kuinka monta askelta oppiminen itse asiassa vaatikaan. Asian kuvittelee helposti yksinkertaisemmaksi, kuin se onkaan kaikkine lähestymiskulmineen.
Itse opintojakson vetäminen kyllä auttaa tämän näköharhan voittamisessa. Kun alkaa miettiä asiakokonaisuutta pala palalta, usein huomaa asian haarautuvan moneen teemaan, ja pienet osa-askeleet, jotka on jo unohtanut tai joita ei kunnolla ole edes huomannut, askeleiden välissä paljastuvat. Vaikeinta näyttää olevan eri UML:n tilakonekaavion elementtien – tilojen (laatikot) ja siirtymien (nuolet) suhteiden hahmottaminen.
Sen, että tilasta ei pääse toiseen ilman, että tilakone vastaanottaa jonkin tapahtuman, hahmottuminen on ottanut aikansa. Tähän liittyy myös se, että tilat olisi tarve suunnitella oikeanlaajuisiksi: Mikäli ei ole kuviteltavissa sopivaa ulkoista tapahtumaa, jolla tilaan siirryttäisiin tai jolla tilasta siirrytään pois, tilan yhdistämistä toiseen kannattaa ehkä harkita.
Se, mitä tapahtumat ja toisaalta tilojen sisäiset komennot ovat, näyttää myös olevan vaikeaa hahmottaa. Tilalaatikon sisällä on toisaalta tilan nimi, ja toisaalta saapumiskomentoja ja poistumiskomentoja. Nämä ovat tyystin eri asia kuin tilakoneeseen ulkopuolelta tulevat tapahtumat.
Tilojen tuomat käyttöliittymähaasteet ovatkin sitten ihan oma leikkikenttänsä. Niistäkin aion pitää vielä yhden opintokerran.