Arkisto tammikuu 5., 2008:lle

Learning to learn Java

Miten toimin opiskellessani ohjelmointia? 

Tämän kurssin alkaessa osasin mielestäni oppia. Olinhan opiskellut koulussa muun muassa historiaa, kieliä ja matematiikkaa. Olin harrastuksessani oppinut oppimaan erilaisia liikesarjoja ja koreografioita. Ne oppii parhaiten toistamalla ja yhdistämällä liike musiikin rytmiin ja vivahteisiin. Kouluaineissa opettajan kuunteleminen, harjoitustehtävien tekeminen ja raaka lukeminen olivat useimmiten hyödyllisimpiä tapoja oppia. Ennen ylioppilaskirjoituksia huomasin, että oli hyödyllistä ymmärtää, millä tavalla yo-lautakunta haluaa tänä vuonna johtaa kokelaita harhaan.

Toisinaan huomasin, miten robottimaista ajatteluni oli. Koko ajan piti miettiä, mitä korkeampi taho haluaa minun osaavan tehdä. Yllättävän suuren osan ajasta oppiminen oli mekaanista mieleenpainamista ilman omaa ajattelua. Luulin elämäni jatkuvan samanlaisena yliopistossakin, kunnes eteeni tuli kurssi nimeltään Studio 1.

Yritin aluksi tehdä niinkuin ennenkin. Vaikka olenkin aina tiennyt, että kaikki koulussa opetettavat asiat sisältävät logiikkaa ja ovat ihan oikeasti totta, alitajuisesti pyrin vain etsimään lyhimmän reitin tyydyttävään oppimistulokseen ajattelematta asioita sen syvällisemmin. Kurssin teoriatehtävät hoituivatkin lähinnä kyseisellä periaatteella. Ohjelmointitehtävien kanssa taas oppiminen oli aluksi lähes toivotonta. Oletin, että tietokone toimii lähes täysin sattumanvaraisesti, eli kääntäjän XEmacsin bufferiin heittämät virheilmoitukset ja poikkeukset eivät voineet olla minun syytäni. Näin jälkeenpäin ajateltuna tiedän, että javan kielioppi oli ensimmäisessä ohjelmointitehtävässä minulta vielä täysin hukassa. Minua ei kiinnostanut virheiden syy, vaan se, miten saan ne pois häiritsemästä koodaustani. Tavoitteena ei siis ollut ymmärrys, vaan oikotie onneen.

Ohjelmointi on kuitenkin asia, mitä on vaikea oppia ilman todellista yritystä ymmärtää sen sisältämiä elementtejä ja toimintaa. Teoriatehtäviä tehdessä ei voinut välttyä oppimasta Javan perusasioita ja niihin liittyviä käsitteitä. Asioita pelkästään kirjasta ja internetistä lukemalla ja muutaman esseen tai käsitekartan tekemällä ohjelmointitaito jää kuitenkin hyvin pinnalliseksi. Kirjan lukeminen tuki oppimista, mutta todelliset ohjelmoinnin ahaa-elämykset voi kokea vain koodin ääressä.

Ohjelmoinnin oppimisessa ehdottomasti tärkeintä oli järjen käyttö. Kurssin aikana olenkin huomannut, että senkin käyttöä pitää ilmeisesti opetella. Koska tietokone oikeasti tekee juuri niin kuin sitä on käsketty tekemään, virheet johtuvat aina ohjelmoijasta itsestään. Javan logiikka selkiytyi minulle vasta kun olin tehnyt monen monta virhettä. Perusteiden oppiminen ja syvällinen ymmärtäminen ei olisi voinut onnistua muuten kuin yrittämisen ja erehtymisen kautta.

Sitten, kun opin ymmärtämään Javaa, oli minulla siitä vielä paljon opittavaa. Valmiiden luokkien, kokoelmien, poikkeusten ja Swingin käyttö piti opetella käytännön kautta. Useimmiten siinä vaiheessa, kun tiesin mitä minun piti ohjelmaan tehdä, etsin perustietoa asiasta oppikirjasta, internetistä ja Java-API:sta. Etsin järkevältä vaikuttavan koodinpätkän, muokkasin sitä omiin tarkoituksiini sopivaksi ja kokeilin. Jos tuli ongelmia, selvitin, mistä ne johtuvat ja katsoin tarvittaessa lisätietoa tietolähteistä. Paras työtapa oli siis lukemisen ja kokeilemisen yhdistäminen. Vaikka onnistunut ratkaisu voi löytyä suoraan netistä tai oppikirjasta, asian oppiminen tapahtuu vasta silloin, kun sen toimintaa joutuu oikeasti pohtimaan ja kokeilemaan eri ratkaisujen toimivuutta. Luonnollisesti virheiden tekeminen ja niistä vaarin ottaminen johtavat varmasti oppimiseen.

En mielelläni kuluta aikaa asian huolelliseen tutkimiseen etukäteen. Vaikka ohjelmointiongelma olisi suurempi, kokeilen ensin mahdollisimman yksinkertaisella tavalla esim. jonkin rakenteen toimintaa ja käyttöä ennen varsinaista päätöstä siitä, miten toteutan suuremman kokonaisuuden. Ohjelmoinnissahan pyritään aina jakamaan ongelmat pienempiin osiin, jotta niitä olisi helpompi lähestyä. Mielestäni sama pätee myös oppimiseen.

Olen päätynyt siihen lopputulokseen, että oikeanlainen oppimistapa auttaa ohjelmoinnin opiskelussa huomattavan paljon. Totta kai ihmiset ovat erilaisia oppijoita, mutta yksi asia, mitä kaikki tarvitsevat, on järjen käyttö. Niin yksinkertaiselta kuin se kuulostaakin. Nyt, lähes yhtä Studio 1:ä rikkaampana voin ylpeänä todeta, että olen oppinut käyttämään nimenomaan järkeäni. Kuten “lähes” kaikissa ihmisen keksimissä asioissa, myös Javassa on logiikka.

- Asta

Jaavan meren tuolla puolen (kuudes ja viimeinen javatehtävä!!)

Jospa nyt olisi aika palata blogin äärelle venähtäneen tauon jälkeen. Joulu ja uusivuosi takana, toivottavasti kaikki söivät hyvin, saivat mieluisia lahjoja ja selvisivät vaurioitta uudenvuoden vietosta. Itse kotiuduin juuri Rukalta, missä vietin javatonta joululomaa viikon verran. Pääkoppa on javan suhteen hieman tyhjänä ja pitäisi pikkuhiljaa yrittää palauttaa kaikki oleellinen mieleen, jotta viimeisetkin kurssin keskeneräiset osiot valmistuisivat ajoissa. Päätin aloittaa muistinpalauttamisen kirjoittelemalla blogiin fiiliksiä viimeisestä javatehtävästä (ajoissa, kuten aina) sekä yleistä pohdiskelua javatehtävien syvimmästä olemuksesta

6. ja viimeinen javatehtävä oli jatkoa 5. tehtävässä aloitetulle Sikoban-pelille. Tehtävänä oli täydentää Sikobania tulostaulukolla, johon pääsisivät vain parhaimmat parhaista. Tehtävä oli mielestäni hieman lyhyempi ja helpompi kuin edeltäjänsä, mutta huomattavasti tylsempi, joka taisi näkyä lopputuloksessa. Tärkeintä on kuitenkin, että studio1-sivujen tulokset-linkki paljastaa klikkaamisen jälkeen taulukon täynnä numeroita. Viimeisessä tehtävässä uutta oli lähinnä tekstitiedostoon tallentaminen sekä tulosten vertailu. Nämä tulevat todennäköisesti tarpeeseen jossain muodossa omassakin projektissani. Kuitenkin päällimmäisenä viimeisestä tehtävästä jäi mieleen, että ne on ohi nyt!

Kokonaisuudessaan javatehtävistä voisi sanoa sen verran, että ne olivat äärimmäisen opettavaisia. En ole varmaan ikinä oppinut näin lyhyessä ajassa jotakin täysin uutta asiaa näin hyvin. (Joku voi olla tuosta “näin hyvin” hieman eri mieltä.) No mutta kuitenkin voin sanoa rehellisesti, että javan alkeet/perusteet on hyvin hallussa ja varmasti projekti vielä hieman lujittaa niitä. Itse tekemällä oppii parhaiten, ainakin itse opin. Olen suhteellisen hidas oppimaan kunnolla uusia asioita. Kolme ensimmäistä tehtävää meni vähän ihmetellessä (ja kiroillessa). Vasta neljännessä tehtävässä tuntui siltä, että perusteet olivat painuneet syvälle takaraivoon ja koodaaminen sujui ilman assareitakin suhteellisen ongelmitta. Viides tehtävä oli jo melkein kivaa (en myönnä sanoneeni noin). Kuudes taas rupesi jo puuduttamaan, mutta ei sekään maailmaa kaatanut. eikä muuten kaada projektikaan!!!!!

-Olli