You are currently browsing Tiina's articles.

Aloitetaanpa siitä, että HUH, jo on ollut urakka! Nyt viedään viimeistä tehtävien osalta ja harteilta alkaa jo karista tuo koko syksyn painanut taakka. Viime syksynä olin innoissani uudesta opiskelupaikasta ja jopa ohjelmoinnista. En ollut koskaan ennen ohjelmoinut, mutta suhtauduin asiaan myönteisesti. Tykkään puuhailla tietokoneiden kanssa, mutta en vain ole ikinä harrastanut asiaa sen enempää. Olin siis innoissani kaikesta.

Kurssi kuitenkin eteni huimaa vauhtia ja tekemistä oli uskomattoman paljon. Ensimmäiset teoria ja ohjelmointitehtävät tuntuivat vielä ihan mukavilta, joskin niissäkin jo oli oma haasteensa. Yhtäkkiä vain huomasin, että olin totaalisen pihalla! Tehtävät tuntuivat todella ylitsepääsemättömiltä ja palautuspäivät vain vilistivät ohitseni. Mielenkiintoni ja uskoni tietokoneen käyttökykyihini laskivat reilusti pakkasen puolelle. Ainut lohtuni oli, että puhuessani muiden kurssilaisten kanssa lähes kaikki muutkin olivat samoilla linjoilla. Projektin teon alettua tilanne kirkastui kuitenkin hieman. Löysin itsestäni taitoja, joita en tiennyt itselläni olevan. Lopulta sain kuin sainkin jonkinlaisen projektin kasaan, jonka sitten palautin. Tilanne ei siis ehkä ollutkaan niin toivoton kuin syksyn mittaan olin kuvitellut.

Nyt miettiessäni kurssia ja sen vaiheita tunnelmat ovat todella ristiriitaiset. Ohjelmointi harjoitukset olivat hyvä tapa oppia ohjelmointia. Teoria tehtävistä sai syvempää näkemystä ja yhteiset ohjelmointitehtävät ja OLO-sessiot toivot kurssiin oman hyvän lisänsä. Blogi kirjoitukset ja tentti tulivat vielä kaiken tämän muun päälle. Kaikki osat olivat kyllä tarpeellisia ja toisinaan todella mukaviakin, mutta aika ei mitenkään tahtonut riittää kaikkeen.

Vastausten tai hyvin ideoiden sijaan mielessäni on vain iso kasa kysymyksiä: On hyvä, että opiskelijat laitetaan tekemään kunnolla töitä, mutta missä kulkee raja? Samoin on hyvä, että kurssi on laaja moneenkin suuntaan, mutta kuinka paljon voi lopulta laittaa yhteen kurssiin (onko html-kielen liittäminen java-kurssiin välttämätöntä)? Hyvää on myös se, että vastuuta opiskelusta annetaan opiskelijalle itselleen, mutta voiko kaiken laittaa opiskelijan itsensä tehtäväksi? Käytännön harjoitukset ovat hyviä, mutta voiko teorian jättää kokonaan huomiotta (luentojen puute)? Entä pitäisikö opiskelijoiden erilaiset lähtötilanteet ottaa huomioon vai voidaanko luottaa siihen, että lopulta kaikki päätyvät samalle tasolle?

Mitä siis sanoa? Vastaukset kysymyksiin tietenkin riippuvat siitä, mitä kurssilta halutaan. Itse en ehkä vieläkään ole varma oliko mikä kurssin tarkoitus lopulta oli. Kaikkeni antaneena voin kuitenkin vihdoin todeta, että kurssi on ohi. Itse en ehkä odottanut aivan tällaista kurssia, mutta näyttää siltä, että olen siitäkin selvinnyt. Ehkäpä nyt onkin aika katsoa eteenpäin ja miettiä uusia haasteita, sillä ne odottavat jo malttamattomina kulman takana. Eipä siis muuta kuin lippu korkealle – minä selvisin studio1-kurssista!

Kurssin aikana Java API tuli tuttuakin tutummaksi. Moneen ongelmaan löytyi sieltä ratkaisu ja oiva apu. Sivuja selailemalla löytyi metodeja, jotka sopivat suoraan omiin tarpeisiin. On siis selvää, että API on hyödyllinen tietopankki ohjelmoijalle. Sen avulla yksinkertaisesti säästää paljon turhaa työtä. Mutta pelkällä API:lla en varmaankaan kurssista olisi selvinnyt.

Varsinkin aluksi, kun ohjelmointi oli vielä täysin vierasta ja metodit, oliot ja näkyvyysmääreet tuntuivat heprealta, tuntui, ettei API:stakaan saanut kauheasti irti. Samoihin outoihin termeihin törmäsi sielläkin. Samoin aluksi tuntui vaikealta ottaa käyttöön uusia luokkia tai metodeita, kun ei voinut olla aivan varman niiden toiminnasta.

Kurssia ajatellen yksi API:n hyvä puoli on varmasti se, että se on luokkien ja metodien kirjasto, mutta sieltä ei kuitenkaan löydy kauheasti suoria koodiesimerkkejä, joista olisi hyötyä alkuvaiheen koodaajalle. Toki tämä on myös koodaajan etu, sillä kopioimalla ei opi mitään!

Jonkin harjoituksen alussa tai jollakin luennoista olisi kurssin henkilökunta voinut esitellä ja käydä läpi API:a ja sitä miten sitä luetaan. Sillä aluksi sen opetteluun meni jonkin verran aikaa. Assarit kyllä muutamaan kertaan harjoituksissa kehottivat katsomaan asioita API:sta ja saattoivat jopa avata API:n pääsivun, mutta alkuun sen käyttö tuntui hankalalta. Vasta kun muuta mahdollisuutta ei ollut käännyin API:n pariin. Mutta opittuani käyttämään sitä, en enää pärjännyt ilman sitä.

API:lla on siis selkeästi enemmän etuja kuin haittoja. Lisäksi se on varmasti pelastanut useammankin java-ohjelmoijan projektit. Mutta pitkälti kyse on varmaankin myös siitä, että java on todella käyttäjäystävällinen kieli. API:a voisi verrata sanakirjaan uuden kielenopettelussa – Se on tärkeä ja tarpeellinen, mutta ei korvaamaton apu.

Oppiminen. Olemme kaikki oppineet tämän kurssin aikana monia asioita tietysti ohjelmoinnista mutta varmaankin jotain myös itsestämme. Mutta mitä sitten olemme oppineet tai paremminkin miten olemme oppineet? Kurssi oli luonteeltaan hyvin opiskelija keskeinen. Apua toki oli tarjolla, mutta sen saamiseksikin piti tietää mihin kysymykseen vastauksen halusi.

Voisikin siis sanoa, että olemme oppineet ajattelemaan ajattelemalla – se on arvokas taito! Toisinaan minusta kuitenkin tuntui, että vapautta oli pikkuisen liikaa, jos niin voi sanoa. Itselläni tämä ilmeni epätietoisuutena ja turhautumisena. Saatoin onnistua tekemään jonkin asian, mutta en kovin elegantilla tavalla, toisaalta minulla ei aina ollut minkäänlaista käsitystä siitä, mitä minun oli tarkoitus tehdä. Ymmärrän kuitenkin kurssin tarkoituksen tältä osin. Työelämässäkään ei aina saa selkeitä ohjeita ja omille ideoille täytyy voida antaa tilaa. Olen siis oppinut tärkeitä taitoja elämää ja tulevaa työelämää varten.

Mutta entä sitten ohjelmointi? Mitä olen siitä oppinut? Kurssin tehtävät olivat todella laajoja, joten oppiminen tapahtui hitaasti taustalla. Uuden tehtävän alkaessa mentiin taas niin hurjia askeleita eteenpäin, että jo tapahtunutta oppimista ei itse huomannut. Vasta projektia tehtäessä huomasi osaavansa kuitenkin jotakin. Tuskin kukaan voi sanoa olevansa hyvä ohjelmoija jos osaa vain teorian mutta en tiedä onko sellainenkaan ohjelmoija hyvä, joka ei hallitse teoriaa ollenkaan. Tarkoitus kurssilla kaiketi oli, ettei opiskelijoille annettu mitään ilmaiseksi vaan riittävän kovasti töitä tekemällä oli mahdollisuus päästä huipulle.

Tunteeni siis tätä kurssia ja sen oppeja kohtaan ovat edelleen hyvin ristiriitaiset. On vaikea sanoa onko kurssilla vedetty raja oikeaan kohtaan. Toisaalta kaikille sopivaa tapaa pitää kurssi ei varmasti olekaan. Opiskelijoiden lähtötason voisi kuitenkin jotenkin tämän kaltaisessa kurssissa ottaa huomioon ja mahdollisesti tarjota heikommille jonkinlaista lisätukea tai apua. Ristiriitaisista tunteistani huolimatta olen kuitenkin ylpeä itsestäni, että selvitin (toivottavasti ;) ) tämänkin kurssin. En myöskään jättäisi kurssia käymättä jos saisin tilaisuuden valita uudelleen. Joskus oppiminenkin tapahtuu kantapään kautta, ehkäpä minun kohdallani tällä kurssilla on ollut kyse juuri siitä.

Ajattelin, että kun tässä loma-aikana ei niin aktiivisesti näe teitä muita koodaajia, niin olisi kiva koota tänne blogiin hieman projektikuulumisia. Eli “miltä minusta tuntui tänään koodatessa” -tyyppisiä juttuja :) Antakaahan kuulua!

Itselläni projekti lähti hieman tahmeasti käyntiin, mutta tänään sain vihdoin ensimmäiset onnistumisen tunteet ja halusin heti päästä jakamaan ne teidän kanssanne ;) Nyt vain täyttä höyryä eteenpäin!

OLOssa suunnitellessamme bottiamme, nousi sen tärkeimmäksi piirteeksi hulvaton huumori ja käyttäjiensä ilahduttaminen. Myös bottimme vitsit, sitaatit ja lait ajavat tätä samaa asiaa. Poikien tehtyä hyvän pohjatyön, oli meidän muiden helppo lisäillä omia luokkia ja komentoja bottiin. Vitseissä, sitaateissa ja laissa on kaikissa suunnilleen sama toiminta idea. Niissä on toteutettu random arpa, joka arpoo, mikä vitsi milloinkin palautetaan.

Positiivista koko botti-projektissa oli mielestäni se, että saimme melkein kaikki suunnitelmamme toteutettua ja jokainen löysi itselleen jotakin mielekästä tekemistä, myös taitojen puolesta. Toisaalta uskon meidän kaikkien saaneen myös hyvän kuvan botin perustoteutuksesta. Samalla oli mukava seurata miten jokaiselle löytyi jotakin ja miten erilaisia asioita kaikki tekivät.

Mitä esitykseemme tulee, olisi sitä varmaankin voinut hioa paremmaksi. Esitykseen käytettävä aika oli kuitenkin melko pieni ja siksi olikin tärkeää antaa nastan (bottimme nimi) puhua puolestamme, sillä sehän oli työmme tulos. Itse olen ylpeä botistamme monella tapaa; siitä mitä se tekee, mutta myös siitä millaisia perusominaisuuksia sillä on. Toivon, että nasta säilyy omalla irc-kanavallamme vielä pitkään. Tosin nastan aitouden takia, pelkään taas pikkuisen enemmän koneita

Kahdeksannessa OLO-tapaamisessa aiheena oli laivanupotuspelin suunnittelu. Hyvin nopeasti ideoita alkoi tulvia taululle. Jokainen oli joskus pelannut laivanupotusta ja muodostanut pelistä itselleen jonkinlaisen kuvan. Löytypä netistä äkkiä malliesimerkki javalla tehdystä laivanupotuspelistä.

Ideointi ei ottanut loppuakseen ja eteenpäin pääsy oli hankalaa. Laivanupotukseen olisi hienoa kehittää vaikka minkälaisia animaatioita ja taustoja. Emme siis päässeet pelin suunnittelussa kauhean syvälle. Mietimme hieman sitä minkälaisia luokkia peliin tarvittaisiin ja miten mikäkin pelin osa tulisi toteuttaa. Muta yhä edelleen ajauduimme näistä pohdinnoista yleiseen ideointiin.

Tehtävän tarkoituksena oli varmaankin valottaa hieman tulevaa ohjelmointiprojektia. Siinä joudumme aivan itse määrittelemään sen millaisen ja kuinka laajan projektistamme teemme. Suunnitelmasta tulee helposti liian laaja ja sitten toteutus jääkin puolitiehen. Tärkeää varmasti olisikin aloittaa aivan perusteista, joita ilman projekti ei toimi. Perusteissa olisi hyvä mennä tarpeeksi alas, eli aivan yksittäisiin metodeihin asti. Tämän jälkeen voi vielä ideoida uudelleen sitä, mitä projektissa voisi muuttaa ja kehittää.

Vaikka java-tehtäviä on vielä muutama jäljellä ja yhden teoriatehtävän palautuskin on vielä tulossa, karkaa ajatukset jo tulevaan projektiin. Ainakin itse olen jo päässäni alustavasti hieman kaavaillut sitä, mitä tekisin ja millaiselta lopputuloksen tulisi näyttää. Ehkä ennen varsinaisen projektin aloitusta olisi kuitenkin hyvä miettiä muutamia käytännön asioita omaan projektiin liittyen; aikatauluja, työtapoja jne. Tässäkin työssä maltti on varmasti valttia.

Käytimme tehtävän pohdintaan dialogikarttaa. Kartta selkiytti jonkin verran ajatuksia. Toisaalta karttaan oli myös helppo eksyä, ja samoja asioita tule helposti moneen paikkaan. Kuitenkin projektia ideoidessa on hyvä pitää kysymykset mielessä; mitä oikeastaan tarvitsen, miten sen toteutan, mitä tarvitsen toteuttamiseen jne. Näihin vastatessa myös hyvät ja huonot puolet on syytä ottaa huomioon, kuten kartassa.

Oppimistavoitteiksemme asetimme monia swingin käytännön toteutukseen liittyviä asioita ja laivanupotukseen tarvittavien luokkien uudelleen organisoinnin. Luulenpa, että näiden kautta pääsemme purkusessiossa paremmin perille, siitä, miltä pelimme tulisi oikeasti näyttää. Otetaan siis sama käytäntö omiin projekteihimmekin, ensin rohkeaa ideointia ja sitten paluu ruohonjuuritasolle. Eiköhän siinä saa loman kulumaan :)

Muistan vielä oikein hyvin sen, kun ensimmäistä kertaa jotakin koodia kääntäessäni eteeni hyppäsi NullPointerException. Siinähän sitä sitten oltiin silmät ymmyrkäisinä ja sormi suussa ihmettelemässä mistä oikein oli kyse. Sitten NullPointereita tuli myöhemmin uusia ja taas uusia ja ne tuntuivat lähinnä vihollisilta, ilkeiltä kommenteilla, jotka kertovat, että koodissani on jotain vikaa. Lyhyellä koodaus urallani olin siis heti saanut aikaan vihollisia.

Kolmannen teoria tehtävän myötä pääsin tutustumaan poikkeuksiin sitten hieman tarkemmin. Kirjaa ja netti tutkiessani huomasin, että poikkeukset eivät olekaan ilkeitä veijareita, jotka ilmestyvät koodaajan kiusaksi vaan ne ovat oikeasti hyödyllisiä! Pakkohan se on myöntää, että on kätevää, että joku muu tarkistaa minun virheitäni ja ilmoittaa sitten niistä minulle. Poikkeukset ovat siis tärkeitä apuvälineitä, jos niitä osaa käyttää oikein ja oppii niitä ymmärtämään. Niiden avulla vältetään monia ongelmatilanteita ja jopa ohjelman kaatumista.

Samalla selvisi siis vielä jotakin java-kielestä. Joku on ehkä oikeasti miettinyt sitä, miten kieli olisi hyödyllisintä rakentaa, jotta se olisi käyttäjä ystävällinen. Eli ehkä jatkossa minun tulisi suhtautua koko java-kieleen kaverina tai apuvälineenä ennemmin kuin koodaajien työn vaikeuttajana.

NullPointereita tulee varmaan jatkossakin eteeni, ja onhan se sillä hetkellä hieman ärsyttävää, mutta ehkä osaan nyt myös arvostaa niitä hieman enemmän. Kone “ajattelee” minun parastani heittäessään poikkeuksia eteeni.

Sanonpa vielä muutaman sanan teoriatehtävän toteutuksestakin. Itse olen aina kokenut esseen kirjoittamisen melko mielekkääksi. Syy siihen on ehkä se, että se on tutuin muoto kirjoittaa jotakin. Kuitenkin on mielestäni mukava kokeilla uusia tapoja ja siksi olin innoissani käsitekarttojen tekemisestä. Ensimmäisellä kerralla en kuitenkaan oikein päässyt käsiksi siihen, millainen käsitekartan tulisi olla. Assareilta saadun palautteen jälkeen päätin, että kokeilisin karttaa uudelleen. Nyt koin saavani kartasta jo paljon enemmän irti, mutta en silti ehkä aivan kaikkea, mitä olisin voinut saada. Luulenpa, että karttojen teossakin oppii tekemällä, joten voi olla, että kokeilen sitä jatkossakin.

Koska pidimme ylimääräisen OLO-ryhmämme tapaamisen liittyen robotin oppimistavoitteisiin, ei jäljellä ollut enää paljoa purettavaa. Nopeasti kertasimme vielä läpi robottimme strategian. Puhuimme myös siitä, mitä ja miten robottimme haluaa muistaa asioita.

Purku sujui paljon letkeämmin kuin jotkut aiemmat kun olimme oikeasti miettineet asioita ja vieläpä yhdessä. Yksin ei siis kannata jatkossakaan jäädä pohtimaan OLOjen oppimistavoitteita vaan miettiä niitä toisten kanssa. Aiheesta saa näin paljon enemmän irti ja oma motivaatiokin on parempi.

Tässä vielä muutaman sanan ylimääräisestä tapaamisestamme. Sen lisäksi, että saimme robotillemme hienon strategian paransimme mielestäni myös roimasti ryhmähenkeämme! Kaikki olivat innolla mukana ideoimassa. Samalla mietimme myös tapoja hyödyntää blogiamme paremmin ja niitäkin löytyi mukavasti. Jokaiselle löytyi jotakin kirjoitettavaa.

Sovimme vielä, että kaikki kynnelle kykenevät tapaavat keskiviikkona 10.10. klo 14.00 OLOhuonella miettien tarkemmin robottimme toteutusta, jottei perjantain robotin teko hetki mene hukkaan. Tästä on siis hyvä jatkaa eteenpäin. Toivotaan robotillemme parasta mahdollista menestystä kilpailuun!