Tapaus 3: Tietorakenteet

Tapaus 3: Tietorakenteet

Edellisen tapauksen purun jälkeen ryhmämme sai eteensä uusia jänniä asioita. Käsiteltävä tapaus liittyy Javassa oleviin eri tietorakennetyyppeihin – taulukkoihin, joukkoihin, listoihin ja sanakirjarakenteisiin – joista yritimme parhaamme mukaan saada ideaa irti. Työotsakkeen ”Tietorakenteet” keksimisen jälkeen edessämme oli tutuksi tullut aivoriihi.

Aivoriihi, eli Post-It lappujen intohimoinen taululle läiskiminen, meinasi saada heikon alun kun kaikille ryhmän jäsenille ei ihan vielä auennut, mitä ihmettä tietorakenteet tarkoittavat. Ymmärrettävää, kun aiheesta järjestettävä luento on vasta seuraavana päivänä edessä niin melkein tyhjältä pöydältä on varmasti hankala aloittaa.

Allekirjoittanut kuitenkin pääsi viimeinkin hääräilemään lappujen kanssa ja mukavan ryhmittelyn jälkeen taululle muodostui seuraavan näköinen järjestys.

Hommat jakautuivat seuraavasti:

  • Annukka ottaa selvää taulukoista
  • Justus joukoista
  • Kaisa sanakirjarakenteista
  • Hanna listoista

OLOvirikkeisiin kuuluivat myös kuusi eri luokan suunnittelutehtävää. Ne jakautuivat seuraavasti:

  • Luokan Pala suunnittelu:
    1. Emmi: Maailman paloissa voi kussakin sijaita useita olentoja.
    2. Jaakko: Maailmassa on osiin jaettuja paloja. Kussakin palan osassa (esimerkiksi eteläosassa) voi sijaita yksi olento.
    3. Pauli: Maailmassa on osiin jaettuja paloja, ja kussakin osassa voi sijaita useita olentoja.
    4. Vesa: Maailmassa on yhdeksään osaan jaettuja paloja. Kussakin osassa voi sijaita useita olentoja ja esineitä. Kullakin osalla on myös oma nimi, maastotyyppi, sää ja tunnelma.
  • Luokan Maailma suunnittelu:
    1. Aarne: Maailma koostuu neliönmuotoisista paloista, ja maailmalle on määritelty suurin mahdollinen leveys ja korkeus. Maailmassa ei sijaitse olentoja – tarvitsee vain tietää, missä kohden maailmassa on laattoja ja missä ei.
    2. Miikka: Kuten kohdassa 1, mutta maailman kokoa ei rajoitettu

Päätimme kollektiivisesti että Miikka saa kärsiä hankalimman tehtävän kanssa nautittuaan Rooman lämmöstä. Tervetuloa takaisin Suomeen.

Mainokset

Tapaus 2 purkaminen

Edellisellä kerralla olimme määritelleet jokaiselle parille suunniteltavan ”ohjelman”. Suunnitteluun käytetty runsas aika toi tulosta ja ohjelmat olivat toimivia ja esitietovaatimukset ainakin osittain pitäviä.

Turtles-ohjelmasta totesimme seuraavaa: epäonnistumisen mahdollisuus huomioitu (jos lipastossa ei olekaan turtles-paitaa) ja lipasto tyhjennetään loogisesti läpikäyden lattialle (totesimme sen vastaavan hyvin ihmisten käytöstä lukuunottamatta Vesaa joka pitää vaatteitaan jo valmiiksi läjässä).

Teen keittäminen pseudokoodia noudattaen todettiin mahdolliseksi, vaikkakin vaatii paljon koodia.

Hipasta oli tarjolla kaksi eri koodia, joista yksinkertaisempi oli suunnilleen muotoa ”jahtaa tai pakene” ja poliisia ja rosvoa simuloiva versio olikin jo haasteellisempi. Onnistuimme listimään yhden bugin vaatimalla esitietoihin osallistujamäärän, jotta poliisit eivät jää jahtaamaan tyhjyyttä.

Yhteenlasku oli tylsän matemaattinen ja esitietoja tarvittiin lisää se että ohjelma ymmärtää lukujen ”pituuden”.

Voileivän tekeminen onnistuu, mutta jäi epäselväksi tiskautuuko astiat, kun ne laitetaan takaisin siihen kaappiin mistä ne otettiin. Paljon koodia arkisesta asiasta.

Viimeisin ohjelma ei ollut mitään pseudokoodia vaan aivan toimiva HSL-simulaattori. Koko ryhmä oli Olowi-luukku auki kun Vesan pikkuveli osasi nousta 102, maksaa (tai palata hakemaan rahaa), mennä istumaan ja jaksoi odottaa ennen tätä noin 15 kpl 510-busseja.

Lopputulemana: kaikille saattoi syntyä alitajuinen kuva ohjelman suunnittelusta, vaikka ei tätä olisi tajunnutkaan.

Tapaus 2: Toiminnan määrittely

Tiistain tapauksen käsittely alkoi selkeällä tavoitteen asetuksella: syömään on lähdettävä viimeistään kello 11:45. Tämän jälkeen päästiinkin ripeästi asiaan.

Seitsemän askeleen menetelmä oli iskostunut hyvin kaikkien mieleen edellisestä sessiosta. Tehtävänanto esimerkkeineen oli kuitenkin jokseenkin erilainen kuin ensimmäisessä tapauksessa. Tällä viikolla esimerkkinä oli pikkuveljelle annettavat ohjeet bussiin menoa varten. Esimerkki sai ryhmän hymähtelemään, mutta muistutti myös ryhmän koodaustaustaisten mukaan koodia.

Tutustuttuamme esimerkkiin siirryimme tehtävien silmäilyyn, työotsakkeen määrittelyyn ja yhteiseen stormaukseen. Otsake muotoitui hyvän keskustelun jälkeen, ja koska se ei heti miellyttänyt kaikkia, sovittiin, että sitä voidaan pohtia uudelleen vielä stormauksen jälkeen.

Ajatuksia heiteltiin taululle melko samalla metodilla kuin edellisellä viikolla. Lappuja kirjoiteltiin omalla paikalla ja ojennettiin sihteerille, joka luki laput ääneen. Tämän jälkeen taululla olevista lapuista käytiin keskustelua, jonka avulla niistä pyrittiin hahmottamaan jäsennelty kokonaisuus.

Taululle muodostui suuri kokonaisuus otsakkeella ”Vaaditaan”, jonka alaotsikkoina olivat ”Kaikenkattavuus”, ”toteutustapa”, vaihtoehtoisuus” ja ”esitiedot”. Näillä kaikilla viitattiin näkökulmiin, jotka ohjelmoidessa on ryhmän mukaan otettava huomioon. ”Vaaditaan”-pilven lisäksi syntyi kaksi muuta otsaketta: ”Vinkkejä” ja ”FAIL”. ”Vinkkejä” sisälsi vinkkejä ohjelmointiin, ja ”FAIL” näkökulmia ohjelmoinnin epäonnistumiseen ja sen välttämiseen.

Lopuksi jaettiin oppimistavoitteet. Tällä kertaa tehtävänannot jakautuivat kaikille selkeinä, kun päätettiin pareittain tehdään ohjeet kuhunkin eri tehtävänantoon ja pohditaan oman tehtävänannon ongelmia. Lisäksi sovittiin, että Vesa koodaa itse esimerkin eli pikkuveljen menon bussipysäkille.

Alla vielä oppimistavoitteet:

Vesa: koodaa bussipysäkille menon
Jaakko ja Pauli: Turtles-paidan etsiminen
Kaisa ja Hanna: voileipien tekeminen
Annukka ja Miikka: teen keittäminen
Emmi ja Justus: hipan leikkiminen
Aarne: yhteenlasku allekkain

Tapaus_1: Alun loppu

Toisen OLOwi-session alkupuolisko käytettiin ensimmäisen session purkamiseen. Edellisellä kerralla sovitut oppimistavoitteet olivat viikon aikana kokeneet monentyyppistä ja -tasoista analyysiä päätyen vihdoin OLO-ryhmän armottoman raadin eteen.

”Tapaus ykköstä” lähdettiin purkamaan aluksi filosofiselta näkökannalta. Platonin ideaoppi todettiin alustuksen jälkeen yhteistuumin jokseenkin toimivaksi. Filosofista ihanuutta seurasi tieteellinen sytematiikkaa lähestyvä näkökanta luokittelun syvälliseen maailman. Hyvin tyhjentävän systematiikkaa käsittelevän esityksen jälkeen oli aika siirtyä kohti haastavampia tilanteita. Luokittelun ongelmia lähestyttiin niin yleiseltä kuin kultturiselta tasolta, jotka molemmat osoittautuivat hyvin samankaltaisiksi. Tärkein huomioitava asia tästä purkuosuudesta oli kenties se, että luokittelussa ei ole suuria kulttuurillisia eroja ja harvemmin eri kultturien erot aiheuttavat ongelmia.

Kun ongelma oli luotu ja esitelty, pääsimme käsiksi luokittelun tavoitteisiin. Luokkaa ”Syötävä” edustavien olioita nauttiessa ryhmämme tuli hiljaisessa yhteisymmärryksessä tulokseen, että luokittelun tavoitteena on yksinkertaisesti helpottaa erilaisten sovellusten ja asioiden käyttöä ja luoda niille yhteisiä rajapintoja, sekä vähentää työtä, kun jokaiselle yksittäiselle asialle ei tarvitse luoda kaikkea uudelleen alusta.

Koko purkuosuutemme kliimaksi oli koko viikon kaikkien mieltä kutkuttanut Javan luokkien, olioiden ja periytymisen eksistenssi. Luokat ja oliot jäivät toisen OLO-ryhmän jäsenen terrorin (tai katoamisen) takia vähemmälle huomiolle, mutta se ei estänyt Javan voittokulkua periytymisen esittäydyttä kahden anonyymin ryhmäläisemme toimesta (PP-esitys on tuleva yleisön pyynnöstä myös tänne blogiin).

Loisteliaan purkusession jälkeen uljas OLO-ryhmämme oli viimein valmis tarpomaan kohti yhä korkeampia huippuja.

Tapaus1: Loogisen hierarkian löytäminen

Tapaus1: Loogisen hierarkian löytäminen

Tapauksen aineistona ja virikkeenä oli esimerkki Platonin ideaopista, Aristoteleen logiikasta ja lainaus Ola Larsmon esseestä ”The Animals that belong to the emperor. Three issues on the Library of Babel”. Lisäksi viitteitä siitä että aihealuetta (hierarkia, ylä/alakäsitteet, luokittelu) voidaan liittää Java-ohjelmointiin.

Ryhmä päätyi (liian hiljaiseksi ja yksilölliseksi havaitun) stormaamisen jälkeen seuraaviin osakokonaisuuksiin (jotka koettiin kuitenkin hieman liian laajoiksi) Olen yksinkertaistanut nämä kokonaisuudet seuraavasti:

Keinot (miten/millä luokitellaan)
Tavoite (miksiluokitellaan, mihin sillä pyritään)
Ongelmat (mitä ongelmia syntyy luokittelemisestä)

”Loogisen hierarkian löytäminen” päätettiin sitoa (assarien kehoituksesta) myös Javaan. Oppimistavoitteiksi asetimme lopulta seuraavat:

1 Selvittää valmiina olevia luokittelun keinoja

a) Platonin ideaoppi
b) systematiikka
c) muut luokittelun keinot

2 Luokittelun ongelmat

a) yleiset
b) kulttuuriset

3 Luokittelun tavoitteet

+ tilanne jossa luokittelua ei ole

4 Ohjelmointi/Java

a) luokat ja oliot
b) periytyminen javassa

4-aiheen sisällä jako tehtiin siten että asiaa pohtii henkilöpari joista toisella on jo valmis käsitys aiheesta ja toisella ei ole mitään tietoa. Tällöin parin työskentely olisi hedelmällisempää asiaan perehtymättömien kannalta. Muut aiheet jaettiin vapaaehtoisemmin.