Arkisto tammikuu 20., 2008:lle

Siinä se sitten oli

Studio1:n viimemetreillä olen Berliinissä luistelemassa, mutta silti mielessäni pyörii kaikki projektiin ja koko kurssiin liittyvät asiat. Näin kahdelta yöllä (paikallista aikaa), kilpailujen ollessa vihdoin ohi, selaan kurssin aikana täyttämääni vihkoa ja ylitsepursuavaa muovitaskua sisältäen lähinnä koodia, OLO-monisteita ja käsitekarttoja. Tunne on haikea nyt kaikkea kurssin hienoja ja vähemmän hienoja onnistumisen, epäonnistumisen tai muuten koskettaneita hetkiä läpikäydessäni. Hieman on myös paniikinomainen, sillä nettiyhteyttä ei täällä ole saatavilla ja huomenna Suomeen palatessani jännittää, olenko kotona ennen iltaa palauttamassa kaikki puutuvat 4-5 blogikirjoitustani.

Kurssista on jäljellä Eclipse-projekteja, itse suunniteltu peli, muovitaskullinen koodia paperilla, OLO-tapausohjeistuksia, esseitä, käsitekarttoja ja reilusti yli puolivälin täytetty A4-kokoinen vihko täynnä muistiinpanoja, ranskalaisia viivoja, paperikoodausyritystä, projektisuunnitelmaa, ihmeellisiä piirrustuksia ja nyt viimeisenä blogikirjoitussuunitelmia. Muistoja siis jäljellä

Selaan läpi muovitaskullisen papereita. Koodi näyttää ihanan helpolta ensimmäisissä tehtävissä. Luokat ovat lyhyitä, mutta täysin vailla minkäänlaista kommentointia. Tämän jalon taidon opin kunnolla vasta kolmannessa tehtävässä. Toisessa oli jo yritystä, mutta hyvä, jos siinä vaiheessa itsekään tiesin, mitä koodasin. On huvittavaa katsoa, miten en osannut this.:n käyttöä tai tiennyt mikä on parametri. Toisaalta myös helpottavaa huomata miten kurssin aikana koodi, sen tyyli ja siisteys, ja ylipäänsä koko tekeminen on parantunut.

Ensiaskeleet tuntuvat kaukaisilta. Jotenkin sitä ei silloin tajunnut, mitä tämä ohjelmointi oikein on, ja mihin minä sitä tarvitsen. Mielestäni oli aivan turhaa kirjoittaa kymmenenkertainen määrä tekstiä, jotta saisi tulostettua tekstin “Hello World!” Miksei saman tien vain kirjoittaisi kyseistä lausetta? Mutta päästiin Sikobaniin ja päästiin projektiin ja nyt edessä enää loppuraportin palautus!

Neljännen tehtävän Nakyma-luokka johdatteli jo graafiseen maailmaan. Itse koodia en uskaltanut sen enempää selata tai etenkään siitä mitään ymmärtää; kauhulla vain katsoin ja mietin, että tuollaistako meillä on seuraavaksi edessä tehtävänä. Koko luokka oli minulle vain järjetön kasa oudosti nimettyjä attribuutteja ja metodeja ja importattuja luokkia. Sikoban kuitenkin valaisi asiaa, sillä graafinen toteutus aloitettiin aivan alusta luomalla peli-ikkuna(JFrame) ja siihen sisälle tyhjä harmaa paneeli(JPanel). Kohta kohdalta ohjetta seuratessa valaistuin yhä enemmän ja homma alkoikin pelittää. Projektin teko oli helppo aloittaa peli-ikkunasta ja sen sisällä olevista paneeleista, näihin JLabeleita ja niihin sisälle jotain tekstiä, ja tadaa, pohja pelille on valmiina.

 

Javasta olen purkanut tänne jo jonkin verran aiemminkin, joten nyt otan esille aiheen, mikä ei ehkä sittenkään kuulu loppupuheenvuoroon, mutta meni jo sinne, ja mitä en ole blogissa vielä hirveän paljon käsitellyt, eli esseet, ja siis mitä niistä oikein jäi käteen… Aloitan alusta.

Ensimmäinen essee Luokat ja Oliot ikään kuin johdatti Java-maailmaan. Kirjoittaminen oli lähinnä Kalakirjan tekstistä poimittujen tärkeiltä kuulostavien kohtien uudelleenmiettimistä ja tuottamista. Käsite olio oli minulle ainakin hyvin epäselvä ja kirjoittaminen vaikeaa. Luokka ja siihen liittyvät käsitteet olivat helpommin sisäistettävissä. Kurssitentissä oli ensimmäisenä tehtävänä selittää käsitteet luokka ja olio. Muistin yhä ainoan fiksun lauseen esseestäni: “Luokka on olio-ohjelmoinnin peruskäsite ja olio on jonkin luokan ilmentymä.” Muu olikin soopaa, josta en vielä kirjoittaessani tajunnut puoliakaan siitä mitä koodatessani opin. Kalakirjan avaaminne oli jonkinasteinen kynnys koko kurssin aloittamiseen. Ensimmäisen deadlinen jälkeen oltiinkin sitten jo täysin jumissa Javassa.

Javan tietotyypit johdatti käsitekarttojen salaiseen maailmaan. Ihastuin niiden tekemiseen siinä määrin, että loput kolme teoriatehtävää palautin käsitekartan muodossa. Itse aihe oli suhteellisen helposti sisäistettävissä, sillä siinä esiintyviä käsitteitä oli tullut vastaan jo ennen tehtävän julkistamista. Tietotyypeistä tuli käytettyä lähinnä ArrayListia ja ehkä jokunen Map saattoi esiintyä jossain tehtävässä. Käyttökokemukset vaikuttivat projektissa käytettäviin luokkiin, ainoa kokoelma siinä olikin juuri ArrayList.

Poikkeukset oli mielenkiintoinen aihe. Hauska oli nähdä, mitä kaikkea voi ilmestyä ja vähän opetellakin tulevaa varten, mistä niitä NullPointerexceptioneja ja StackoverFloadErroreita oikein syntyy, ja miten niitä voi välttää. Entä mitä tehdä kun vaarana on että koko ohjelma kaatuu, enkä löydä virhettä: opin luomaan ja heittämään oman poikkeuksenkin. Ja ihan huipennokseksi päädyin sitten viidennessä Java-tehtävässä ottamaan NullPointerin kiinni, ihan vain varmuuden vuoksi…

Swing oli aiheistä, no ei nyt tärkein, mutta hyvin tärkeä kuitenkin nyt kun miettii projektin toteuttamista ja sen graafisen käyttöliittymän pohjautumista täysin Swingiin. Aiheen tärkeyden huomaa vasta käytännössä, sillä ainakin minulle tämä älyttömän laaja kokonaisuus jäi tässä vaiheessa vielä yhteiskuvaltaan hajanaiseksi. Kokonaisuus ja kaikki sen sisältämät upeat hienoudet sain kuitenkin selville Sikobanin, ja viimeistään projektin, myötä.

Ja vielä viimeisestä eli säikeistä. Ehdin pitkästä aikaa perehtyä esseeaiheeseen kunnolla. Jäi itseasiassa harmittamaan, sillä en ehtinyt kokeilla säikeiden käyttöä ennen kuin vasta projektissa. Projektissanikin käytin ainoastaan yhtä säiettä äänitehosteiden soittamiseen ja siis yhtä säikeiden metodia(start()). Nyt siis olen perillä tästä hienosta ja varmasti erittäin monipuolisestakin aiheesta ainoastaan pintapuolisesti ja senkin lähinnä teoriatasolla. olin kuitenkin positiivisesti yllättynyt, kun osasin sellaisen tehdä jä vielä kaiken lisäksi käynnistääkin! Oli siis senkin aiheen opiskelusta hyötyä.

Yleisesti voin todeta, että vasta jälkikäteen huomaa asioiden opiskelun tuottaman hyödyn. Näin kävi lähes kakkien teoriatehtävien kohdalla. Jotenkin Java-tehtävien kanssa painiessa aivot syrjäyttivät täysin kaiken teoreettisen ja esseen/käsitekartan tekeminen jäi viimetippaan ihan joka kerta. Teoriatehtävät tukivat hyvin koodaustehtävissä onnistumista, ja viimeisiä tehtäessä pystyi jo päättelemään seuraavan uuden asian Java-tehtävässä. Ne aiheet, jotka olin opiskellut hyvin teoriatasolla toteutuivat paremmin myös koodissa.

Noniin, ja takaisin aiheeseen eli itse kurssiin. Fiilis on helpottunut, muuta ei voi sanoa! Omalta osaltani voin todeta, ettei tämä ollut minulle paras tapa opetella ohjelmointia. Olisin kaivannut jotain oppituntien tai miniluentojen tapaisia lisää. Omat aivoni eivät olleet aivan koko kurssin aikana käytettävissä, joten vaikka itseopiskelemalla ja kokeilemalla oppii paljon, ei se minun kohdallani tällä kertaa toiminut.

Hassua oli mielestäni se, että yhteistyö kurssin aikana oli kiellettyä ja ilmassa leijui uhkaus plagiointiyritysten paljastamisesta. Toki on äärettömän tärkeää, että jokainen kirjoittaa koodinsa itse ja oppii, mutta jo ensimmäinen tehtävä osoittautui monille sen verran haastavaksi, että pelkillä assariharkoilla ei siitä olisi yksin selvitty! Minä en ainakaan saanut aivojani vielä siinä vaiheessa yhtään Java-tasolle. Paljon helpompi oli miettiä ongelmia ja niihin ratkaisuja porukassa. Ja alkuvaiheessa tämä tarkoitti suhteellisen samankaltaista lopputulosta koodissa. Myöhemmin, taitojen ja opittujen asioiden karttuessa, toteutustapavaihtoehdot lisääntyivät ja yhdessä pohdituista algoritmeistä tuli kirjoitettuna todella erilaisia.

Vuodatusosiokin piti tähän mahduttaa, mutta nyt lopuksi haluan kiittää kaikkia assareita hyvästä assaroinnista ja kanssaopiskelijoita hyvästä hengestä! Hajoamissessiot Paniikissa ja Maarilla jäävät muistoihin hyvinä sessioina. Porukassa hajoaminen oli paljon helpompaa kun vertaistukea löytyi. Kurssin järjestäminen näin syksyllä kyllä yhdistää toisilleen vierasta phuksiporukkaa jollain tasolla ehkä ikävällä, mutta mielestäni kuitenkin mahtavalla tavalla. Ehkä joskus tulen jopa kaipaamaan paniikkikoodaussessioita Maarin luokassa, jossa samaan aikaa 20 phuksia repii hiuksiaan päästä Javan takia.

-Meri

Mitä hyötyä on siitä, että metodeilla on argumentteja?

Metodien argumentit, tuttavallisemmin (ainakin minulle) parametrit, esiintyivät ohjelmointitehtävissämme alusta alkaen. Kesti hetken aikaa ennen kuin ymmärsin niiden syvällisemmän merkityksen. Tehtävissä sanottiin, että laita tämä metodi ottamaan parametrinaan kokonaislukumuuttuja ja helppoahan se oli sokeasti totella ohjeita. Ensimmäisen harkan aikana opin jo ymmärtämään, että parametreilla pystytään vaikuttamaan metodin palatusarvoon, mutta sen syvällisemmin en asiaa pohtinut.

Tässä vaiheessa minulle oli vielä täysin hämäränpeitossa, mitä pääohjelmametodin String[] args oikein tarkoittaa. Olin aina vain kirjoittanut sen sulkujen sisälle kiltisti vailla sen kummempaa ymmärrystä sen tarkoitusperistä. Neljännessä Javatehtävässä vihdoinkin käsiteltiin sitä. Kyse onkin komentoriviparametrista. Omassa ohjelmassamme komentoriviparametreiksi määritettiin nimi ja nopeus. Käynnistettäessä ohjelma kysyi näitä määritettyjä arvoja ja tallensi ne muistiin. Näin ohjelman käyttäjä sai määritellä aluksi oman nimensä ajaessaan ohjelmaa.

Main-metodi on kuitenkin poikkeustapaus. Kurssin edetessä oppia kertyi ja metodien parametritkin tulivat tutummaksi ja tutummaksi.  Ne muodostuivat itsestäänselvyyksiksi. Suuri askel oli kun osasi itse määrittää metodille tilanteeseen sopivat parametrit. Varsinkin lopputehtävissä tuli pelailtua konstruktorien parametrien kanssa, kun monen luokan piti tuntea moni muu luokka ja parametrejä kertyi lukuisia tehtävän edetessä.

Parametreilla voi siis vaikuttaa metodin palautusarvoon. Kuvitellaan, että metodi ottaa parametrinaan boolean-muuttujan ja metodin sisällä määritellään erilaiset palautusarvot sekä true-arvolle, että false-arvolle. Nyt metodi palauttaa arvon, joka riippuu annetun parametrin totuusarvosta. Tässä tulee juuri ilmi parametrien eli argumenttien hyödyllisuus – ei tarvitse tehdä jokaiselle tilanteelle omaa metodiansa.

-Olli

Miten ajatukseni ohjelmoinnista on muuttunut kurssin aikana?

Iki-ihana kurssimme (näin pystyn jo melkein ajattelemaan näin kurssin viimemetreillä) Studio1 starttasi syyskuun puolivälin tienoilla. Elokuun lopussa saimme kotiin kirjeen mukana esitteen, jonka tarkoitus oli antaa hieman esimakua tulevasta syksystä ja Java-ohjelmoinnista. Minulle tämä ei kuitenkaan sanonut yhtään mitään. Ajatus koko hommasta oli vain että “TÄH, koodausta, no okei sitten..”. Pahaa-aavistamattomat phuksit kerääntyivät TUAS-talon luentosaliin aloitusluennolle. Tällöin kuulimme myös ensikertaa Kalakirjasta ja tajusimme, mitä koko syksymme tulee tästedes olemaan.

Ensimmäinen harjoitus sujui vielä hyvin tietämättömänä mitään itse koodauksesta tai siitä, mihin kaikkeen sitä voi hyödyntää. Yhteys Java-peleihin oli erittäin häilyvänä mielessä. Jotenkin Java ei ohjelmointikielenä, tai ylipäänsä ohjelmointi, sanonut minulle mitään! Mielestäni oli kummallista kirjoittaa kymmenen riviä tekstiä, jotta saisi tulostettua tekstin “Hello World!” Miksei saman tien vain kirjoittaisi kyseistä lausetta?

En lähtenyt tähän hommaan riittävän hyvällä asenteella. En ajatellut ohjelmointia mitenkään helppona hommana, mutten toisaalta sellaisenakaan, mitä haluaisin tai ylipäänsä voisin vielä joskus osata. Kurssin alkuvaiheessa näin pari kurssilla toteutettua projektia, nämä olivat pelejä, enkä ikimaailmassa osannut kuvitellakaan itse tekeväni mitään senkaltaistakaan. Tuossa vaiheessa opetteluni oli lähinnä ohjeen sokeana seuraamista ja assareilta saamien neuvojen mukaan koodin kirjoittamista. Eli sisäistetty asia jäi ehkä kymmeneen prosenttiin tavoitteesta. Jotenkin suljin Javan kokonaan pois kaiken muun tieltä. En ymmärtänyt, miksi jotain tällaista pitää opetella.

Koodaus alkoi synkän harmaalla Emacs-editorilla. En koskaan oppinut käyttämään kaikkia sen ominaisuuksia, sillä hajosin jo copy-pasten aiheuttamaan jumitustilaan. Eclipse helpotti elämääni sekä fyysisesti että henkisesti. Jotkut tuntevat nostalgiaa nyt myöhemmässä vaiheessa käyttäessään Emacsia. Jotenkin en itse koskaan oikein ihastunut Emacsin käyttöön. Eclipsen avulla opin paljon lisää ja paljon hyödyllistä, muunmuassa parametreista ja valmiiden luokkien tarjonnasta. Aloin oikeasti, ehkä jollain tuntemattomalla tasolla, välillä jopa pitämään koodaamisesta.

Vihdoin, kaikista kolmesta ensimmäisestä tehtävästä selvinneenä, neljäs tehtävä toi mukanaan jo jotain ihan konkreettista näkuviin ikuisen puurtamisen jälkeen. Pääsi jo seuraamaan omaa tuotostaan ja pelaamaan “itse tehtyä” peliä. Sikobanin myötä pääsin luomaan oman graafisen käyttöliittymän. Mielenkiinto lisääntyi koko ajan, kun halusi saada lisää toiminnallisuutta, vielä enemmän juttuja näkyviin!

Omaa aikaa ei ollut käytettävissä koodille, eikä se alkuvaiheessa vielä haitannutkaan. Kuitenkin algoritmit olivat monimutkaisia jo alkuvaiheessa ja näin tuntuivat hyvin hyvin hankalilta vielä myöhemminkin. Jälkeenpäin harmittaa kuinka paljon enemmän olisin voinut alkuvaiheessa perusasioista opetella, ja kuinka paljon enemmän nyt osaisin, kuinka hienon projektin olisinkaan voinut saada aikaiseksi.

Projektin voisin sanoa muuttaneen käsitystäni ohjelmoinnista varmasti eniten. Kun ei ollut käytettävissä assareita, joiden hihasta olisi voinut nykäistä epävarmassa tilanteessa, oli vain pakko uskaltaa kokeilla! Omat ratkaisut eivät aluksi tuottaneet onnistunutta lopputulosta läheskään aina, mutta pienetkin onnistumiset kohottivat itsetuntoa ja auttoivat eteenpäin! Projektiini olen lopulta tyytyväinen . Opin yhteensä varmasti enemmän kuin koko kurssin aikana. Opin itse perehtymään virheisiini ja niiden aiheuttajiin sekä ratkaisuihin. Nyt tiesin jo hieman etukäteen jotain siitä, mitä tulee tapahtumaan ohjelmaa ajettaessa. Projektissani käytin tietenkin tuttuja (Javan valmiita)luokkia ja looppeja. For-lauseesta tuli suosikkini ja ArrayList oli esiintynyt jo niin monta kertaa, että ne olivat selvät valinnat, kun mietin eri silmukka- ja kokoelmavaihtoehtoja.

Nyt kun sain projektinikin tehtyä ja sen myötä huomattua, kuinka paljon loppujen lopuksi itseasiassa osaa koodata, (paljon olisi tietysti opeteltavissa vielä, jos haluaisi) on käsitys koko kurssia kohtaan hieman muuttunut. Projektin aikana koodin kirjoittaminen ei tuntunut hirvittävän ylivoimaiselta paria poikkeusta lukuunottamatta. Luulenpa, että asiaan vaikutti eniten juuri se näkyvän tuloksen aikaansaaminen. Helpompi ajatella, keksiä uusia ideoita ja korjata virheitä, kun lopputulos on nähtävissä. Itseluottamus oli myös kova tekijä tässä, oli paljon mukavampi tehdä jotain, kun tiesi, että siinä voi myös onnistua!

Kyllä näin lopuksi on pakko sanoa, että on se kivaa kun sen osaa :) . Kaverit ja sukulaiset ovat innoissaan pienistäkin ohjelmista, mitä on saanut aikaiseksi. Monta tilausta olen saanut koodattavaksi, mutta katsotaan nyt, avaanko Eclipseä enää tänä vuonna, niin mukava kaveri kun siitä onkaan tullut.

-Meri

Koodieditorit ohjelmoinnin apuna

Tuntuu vähin nurinkuriselta kirjoittaa vielä päätöspuheenvuoron jälkeen, mutta täältä tulee nyt vielä se toinen portfolioessee.

Kurssin aikana tuli käytettyä monenlaisia ohjelmia. Aivan uutta olivat koodieditorit, tai jos nyt vähän hienostuneemmasta ohjelmasta puhutaan, kehitysympäristöt. Ensimmäiset ohjelmointitehtävät tuli paahdettua läpi Xemacsia käyttäen. Xemacs tuntui todella näppärältä ohjelmalta, se pystyi jopa korostamaan tekstiä tuoden suuren avun koodausarkeen.

Liikkui kuitenkin huhuja vielä hurjemmasta sovelluksesta. Eclipse pystyisi näyttämään suoraan virheitä reaaliaikaisesti kääntävällä virtuaalikoneella. Se sisältäisi myös sisäänrakennetun API-hakemiston, jolloin varsinaista Sunin API-sivustoa ei tarvitsisi aivan jatkuvalla syötöllä selailla.

Kokeillessani Eclipseä ensimmäisen kerran olin jonkun verran epäluuloinen: se tuntui vähän monimutkaiselta kaikkine pikkuikkunoineen ja pikanäppäimineen. Epäluulot haihtuivat kuitenkin nopeasti: Eclipse nopeutti ja helpotti koodausurakkaa suuresti. Ei tarvinnut enää leikkiä komentorivin kanssa vaan Eclipse laittoi classit huutamaan hoosiannaa yhdellä hiirenklikkauksella.

Projektin jälkeen Eclipsestä oli tullut jo niin kiinteä osa koodausprosessia, että ihan helpolla en sitä vaihtaisi takaisin XEmacsiin. Toisaalta saattoi olla ihan hyvä asia, että ensimmäiset Java-kotitehtävät tuli tehtyä Xemacsilla. Se pakotti miettimään todella oikeaoppista Java-syntaksia – näin ainakin assareiden mielestä.

Sun Microsystemsillä on myös oma vastineensa Eclipselle: NetIde Javabeans. Tätä ohjelmaa ei tullut koskaan käytettyä (ei ollut varmaan tarpeenkaan).

Käsitekarttojen teossa tuli tutustuttua myös uuteen ohjelmaan – CmapToolsiin. Se oli kaikenkaikkiaan positiivinen yllätys. Käyttöliittymä oli yksinkertainen ja ohjelma teki nättiä, antialiasoitua jälkeä. Tutustuimme myös dialogikarttaohjelmaan, joka jäi vaisuksi tähdenlennoksi Sitä käytettiin ainoastaan yhdessä OLO-sessiossa.

Käytin myös omia grafiikkaohjelmia blogikirjoituksissa ja teoriatehtävien viimeistelyssä. Parhaan lopputuloksen sai usean eri ohjelman parhaita puolia hyödyntämällä.

Syksyn aikana tuli vietettyä (liian) paljon aikaa tietokoneen ääressä. Myös IRC:n käyttö juurtui selkäytimeen. En nyt tiedä onko se kovin hyvä asia…  Laadukkaat ohjelmat auttoivat huomattavasti syksyn urakkaa. Eclipse saa nyt kuitenkin levähtää jossakin syvällä kiintolevyn uumenissa – ainakin hetken.

 

- Teemu

Suuri ja Mahtava

Otsikko ei viittaa pelkästää kurssiin, joka kieltämättä kyllä on kuvailun arvoinen. Otsikko viittaa lähinnä helpotuksen tunteeseen, jonka kurssin päättyimnen minulle aiheuttaa. Kesällä sunnitellessani syksyn ohjelmaa tulin nielaisseeni kolme aikaavievää asiaa elämässäni, joista kuitenkin kaikista suunnittelin selviäväni. Nyt kun katsoo taaksepäin, niin kyllä, selvisin kaikista, mutta en läheskään haluamallani tavalla. Vaikka jo viime syksynä näin kanssaphuksieni hajoilut koodaamiseen, niin en siltikään tajunnut kurssin vievän näin paljoa aikaa. Ja sanotaanko vielä vaikka että Studio 1 ei ollut edes se kaikkein aikaavievin rauta syksyni takkatulessa.

Vaikka hikikarpaloita on pudoteltu takarajojen lähestyessä ja stressiä on välillä tuntunut olevan enemmän kuin lääkäri sallii, niin ei niin paljon huonoa ettei jotain hyvääkin. Koodaaminen oli välillä perhanan mukavaa. Varsinkin kun koki saavuttaneensa jonkin suuren läpimurron ongelmassa, jota oli pohtinut useita tunteja tai sai kymmeniä tunteja naputetun projektin ensimmäistä kertaa näkymään ruudulla. Silloin käsi haki jo nenäliinapakettia. Ennenkaikkea.

Blogin kirjoitus ja OLO-toiminta kokonaisuudessaan jäi minun osaltani luvattoman heikoksi ja olen kyllä asiasta pahoillani. Välillä tuntui, että tukka putkella painamisen jälkeen oli vaikeaa raivata aikaa jollekkin asialle, joka ei ollut kuitenkaan täysin elinehto kurssin suoritukselle.

Päällimmäisenä kurssista jäi varmasti käteen tunne, että koodaaminen ei olekaan niin pelottavaa ja mahdotonta, kuin miltä se tuntui vielä puolisen vuotta sitten. Luulen, että tämä kurssi ja sen näinkin kunnioitettava läpivienti syksyni aikataululla valaa ehkä uskoa myös koko jatko-opiskeluilleni. Ja etenkin kursseihin, jossa tarvitaan ohjelmointitaitoja. Viime syksynä luodut haamut alkaa olla pikkuhiljaa kukistettu ja elämä jatkuu. Ja oletettavasti jossain vaiheessa myös koodaus jatkuu.

-Ville

Mitä hyötyä on perinnästä?

Ensimmäisissä ohjelmointitehtävissä tehdyt luokat kuten Esine ja sen aliluokat Arkku ja Kolikkokasa ym. eivät mitenkään kertoneet minulle perimän tarkoituksesta – mitä hyötyä tästä oikein on? Mitä mieleeni ensimmäisenä tuli oli, että onpas hauska kun kytketään jokin luokka toiseen periyttämällä se toisesta luokasta. Onhan se nyt selvää, että kolikkokasa ja arkku voidaan laskea esineiksi. Mitä pidemmälle kurssi eteni, sitä useammin luokan nimen perään kirjoitettiin sana extends ja jokin toinen luokka. Tämä oli mielestäni vain hauskaa ja loi luokkien välille jonkinlaista yhteenkuuluvuuden tunnetta.

Perinnän tarkoituksesta selvisi minulle eniten viidennessä Java-tehtänässä, jossa luotiin Sikoban luokka, joka siis peri JFramen ja sai näin käyttöönsä kaikki JFramen ominaisuudet ja metodit. Koin elämyksen kun joku assareista harjoituksen aikana neuvoi käyttämään this-sanaa JFramen metodeja kutsuttaessa. Ensin näitä päästiin tietysti etsimään JavaAPIsta ja “How to use” -kohta oli äärettömän valaiseva. Tässä vaiheessa tajusin, että tämähän itseasiassa tarkoittaakin sitä, että Sikoban-luokka on JFrame ja olisi sama kuin jos Sikoban-luokka pitäisi sisällään kaikki JFramen metodit. Ja taas tunnelmia: oli vain mahtava fiilis kun ikkuna aukeutui näytölle, ja tällä kertaa ihan itse aiheutettuna!

Jos minun nyt pitäisi selittää tärkeimmät asiat perinnästä, sen hyödyt ja käyttötarkoitukset sun muut siitä mitään tietämättömälle puhuisin varmasti ja luottavaisesti, en epäröisi asiassani. Aloittaisin kertomaan luokista ja niiden aliluokista, jotka “periytetään” näistä yliluokista, ja siitä kuinka aliluokat saavat yliluokkiensa ominaisuudet. Luokalla voi siis olla vain yksi yliluokka, kuten ihmiselläkin vain yksi äiti (isää ei nyt saa ottaa mukaan), mutta monta aliluokkaa, kuten äidillä lapsia. Koetilanteessa joutuisin kuitenkin miettimään sana- ja lausevalintojani, niin selvää perintä kokonaisuudessaan ei minulle vielä ole.

Selittäisin varmasti eläimistä, kissoista ja koirista, ja näiden ilmentymistä eli Mirristä ja Turresta. Luodaan siis luokat Eläin, Kissa ja Koira. Luokat Kissa ja Koira laitetaan perimään luokka Eläin. Eläin-luokan ilmentymät saavat luomisvaiheessa nimen ja painon. Näin on täten myös Kissa ja Koira -luokkien kohdalla. Näille voi kuitenkin antaa nyt jotain uusia ominaisuuksia ja määritellä metodeja, jotka tekevät näiden kahden ilmentymistä eläintä tarkempia ja toisistaan eroavaisia. Koira-luokan ilmentymät voisivat nyt nimen ja painon lisäksi saada ominaisuuden “uskollisuus” ja metodin “hauku”. Kissat taas omiaisuuden “hännän pituus” ja metodin “kehrää”. (Tämähän alkaa kuulostaa jo ensimmäisissä OLO-sessioissa käydyltä keskustelulta tai lähinnä assarin selitykseltä suu auki ja silmät pyöreinä katsoville phukseille).

Mielesstäni perinnän suurin hyöty tulee esille siinä, kun halutaan pitää samantyyliset, mutta kuitenkin erilliset asiat/ilmentymät/jotainihanmuuta(?) erillään, mutta silti kytkettyinä toisiinsa. Luokkien kokoa voidaan pienentää, kun jokaiseen ei tarvitse erikseen kirjoittaa samoja ominaisuuksia ja metodeja. Samalla hahmottuu kokonaisuus paremmin, kun nähdään, mitkä luokista kuuluvat yhteen. Peli-ikkunaakaan luodessani minun ei tarvitse kirjoittaa luokan sisälle viittäkymmentä metodia, erikseen koon asettamiselle, värin vaihdolle jne. vaan voin käyttää valmiita JFramen metodeja tähän.

Kurssin aikana olen oppinut paljon, ja niinkin yksinkertainen asia kuin tämä perintä oli käsitteenä ja kaikkine ominaisuuksineen suhteellisen vajaa. Näkyvyysmääreen protected tarkoitus selvisi minulle käytännössä koodatessa, ja osoittautuikin varsin näppäräksi ratkaisuksi. Toisaalta käytännössäkään en sisäistänyt super.:n käyttöä tai lähinnä sen eroa this.:seen. This:iä käytetään kun kutsutaan jotain luokan metodia ja superia kun kyseessä on yliluokan metodi. Kuitenkin yliluokankin metodeja voi käyttää suoraan this. Tämä hämmensi täysin.

Projektissakin, nyt innostuneena tästä perinnästä loin ensin uokalle Esine viisi alaluokkaa, ja nämä toteuttamaan samat metodit. Sittemmin muutin luokan Esine abstraktiksi ja ylikirjoitin sen metodit jokaisessa sen aliluokassa. Huomasin kuitenkin kaikkien luokkien olevan niin identtisiä, että viisi luokkaa yhden enumeraation sijaan olisi ehkä sittenkin aika huono vaihtoehto. Muuten en perintää sitten hyödyntänytkään “omilla” luokilla. Sen sijaan periytin luokkia Javan valmiista luokista kuten JFrame, JPanel ja Thread.

-Meri

 

vielä projektistani

Tein tänään vielä loppuraporttia projektistani, joka oli muuten Palapeli, ja siinä miettiessäni sen toiminnallisuutta ja teknistä toteutusta en voinut muuta kuin tuntea iloa ja ylpeyttä saavutuksestani. Siitähän oli tullut paljon toiminnallisempi ja hienompi kuin olisin vielä viime vuonna osannut kuvitellakaan. Silloin epäilin, saisinko sitä edes toimimaan palapelinä, enkä ainakaan osannut odottaa, että saisin tehtyä myös kaikenlaisia lisätoimintoja. Eivät ne nyt niin mahtavia ole, mutta omilla taidoillani ihmettelen, miten sain ne aikaan. Lisäksi kun ottaa huomioon, että projektin tekeminen alkoi vasta tammikuun ensimmäisenä viikonloppuna, eivät odotukseni olleet kauhean korkealla.

Palapelin teemana oli menneiden vuosien Hollywood-tähdet, joista löysin hienoja kuvia Palapeliin. Muutenkin pelistä tuli ulkoisesti ihan nätti, koska keskityin aika paljon graafiseen käyttöliittymään. Oli kiva suunnitella paperille, mitä haluan tehdä ja selkeytti kovasti, kun siihen kirjoitti, mitä komponentteja mihinkin tulee. Projekti ei ollut ollenkaan niin pelottava ja stressin partaalle ajava kuin mitä pelkäsin muiden juttujen perusteella. Se oli jopa kiva kokemus, ja sen aikana koin ehkä ensimmäisen kerran, että taidan osata sittenkin koodata.

-Anu

Viimeinen naula Studio 1:n arkkuun

Nyt on viimein tullut se päivä, jolloin voimme kaikki jättää 14 opintopisteen suuruisen kurssin taaksemme. Studio 1 koostui informaatioverkostojen ohjelmointikurssista ja OLO-menetelmällä suoritettavasta Studio 1-nimisestä kurssista. Kurssin aloittamisesta tuntuu kuluneen vuosia. Se on ollut matka, jolle en ehkä mielelläni lähtenyt. Silti nyt, kaiken jälkeen, tiedän että se kannatti. Olen viimeisen 5 kuukauden aikana oppinut paljon, vieläpä itselleni aikaisemmin täysin tuntemattomasta asiasta, ohjelmoinnista. Ehdottomasti eniten olen kuitenkin oppinut itsestäni.

Mikään suorittamani kurssi ei ole ollut yhtä monipuolinen ja samalla työläs. Tuskin mikään muu kurssi tulee ikinä olemaankaan. Ohjelmointitehtävien sienet, merirosvot ja muut oliot tulivat uniin, jotka eivät useimmiten edes olleet painajaisia. On vaikeaa kuvitella, millainen syksy olisi ollut ilman Studio 1:ä. Se yhdisti phuksit tiiviiksi ryhmäksi. Kummallista, kuinka haikea olo minulla nyt on, vaikka moneen kertaan kurssin aikana kirosin sen syvimpään manalaan.

Kurssi koostui viikottaisista OLO-sessioista, viidestä esseestä tai käsitekartasta, kuudesta Java-ohjelmointitehtävästä, blogikirjoituksista ja projektista. Tässä vaiheessa voi tietysti spekuloida, kuinka paljon paremmin kaikki olisi pitänyt hoitaa. Valitettavasti minulle tärkein tavoite oli päästä kurssista läpi. Syksyn edetessä ja ymmärryksen lisääntyessä tavoitteet asettuivat korkeammalle. Tästä opin ainakin sen, että ikinä ei kannata heti aluksi päättää, että suoriutuu rimaa hipoen. Koko kurssin onnistunein osio oli ehdottomasti projekti, vaikka juuri se pelotti minua etukäteen eniten. Kuitenkin sen koodaaminen tuntui helpolta ja samalla sopivan haastavalta. Projektin tekemällä todistin itselleni, että minäkin voin saada aikaiseksi jotakin niin hienoa kuin toimivan tietokoneohjelman.

Kurssin järjestelyistä voisin sanoa, että pääpiirteittäin ne olivat toimivia. Kuitenkin alussa, kun ohjelmointitaidot ja itseluottamus olivat alhaisimmillaan, muutama demoluento olisi ollut hyödyllinen. Aluksi en ymmärtänyt virheilmoituksia tai XEmacsin käyttöä Javan syntaksista puhumattakaan. Toki tekemällä oppiminen oli tehokasta, mutta alussa valitettavan hidasta. Assistentin apu oli välttämätöntä, mutta vaikeaa saada, koska lähes kaikki tarvitsivat apua. Myöhemmin assistenttien avusta ei ollut läheskään niin riippuvainen kuin ensimmäisinä viikkoina.

Esseet ja käsitekartat olivat asioiden sisäistämisessä varsin hyödyllisiä, joten niiden painoarvo arvostelussa olisi voinut olla suurempi. Edellisen teoriatehtävän arvosanaa ei innostanut lähteä parantamaan, kun tiesi yhden tehtävän painoarvon olevan vain 2 %.

OLO-menetelmään tutustuminen oli mielenkiintoista, mutta tuntui että siitä ei ollut suurempaa hyötyä ohjelmoinnin oppimisen kannalta. Jonkin toisen aihepiirin parissa menetelmä on todennäköisesti toimiva ja hyödyllinenkin. Menetelmän käyttö tuntui välillä jotenkin luonnottomalta ja turhalta, varsinkin kun sen seitsemää kohtaa yritettiin aluksi noudattaa liian kirjaimellisesti, eikä uskallettu “antaa tajunnan virrata”.

Päällimmäisenä mielessä on kuitenkin tyytyväisyys siitä, että sain käytyä kurssin kunnialla loppuun. Kokemus oli todella avartava ja tajunnan räjäyttävä :) Kiitos siis assistenteille ja opiskelijatovereille ikimuistoisesta kurssista!

- Asta

Javan oppiminen

Aloitin Studio1:n ensimmäisen kerran jo vuoden 2006 syksynä. Kuukauden myöhässä ja tarkoituksena lukea muut kiinni. Sitä riemua kesti viikon verran, jonka aikana ehdin muodostaa vahvan ennakkoluulon koodaamisen epäsopivuudesta minulle. Tämä ennakkoluulo kummiteli koko vuoden hartioillani ja oli vielä jossain määrin seuranani viime syyskuussa Studio1:n aloitusluennolla. Nyt kun kuitenkin pääsin aloittamaan puhtaalta pöydältä. Ja ehkä tuon vuoden aikana jotain tietoa ohjelmoinnista oli tihkunut myös suojakuoreni läpi, sillä alusta asti kaikki tuntui melko luontevalta ja jos ei nyt helpolta, niin ainakin luontevalta. Erityisesti alkuluennoilla (jotka siis viimevuonna missasin) asiat selvitettiin tarpeeksi yksinkertaisesti, että tajusin ettei homma ollutkaan niin vaikeaa.

Usein minulla onkin tapana uusia asioita opetellessani antaa ennakkoluulojeni vaikuttaa liikaa opiskelumotivaatiooni. Sitten kun oikeasti tarun härkää sarvista ja rupean töihin, niin yleensä huomaan ennakkoluulojeni olleen täysin tuulesta temmattuja. Niin kävi siis nytkin. Luulen myös, että kurssin rakenne, jossa ensin tehdään itse, sen jälkeen tehdään itse, sitten kysytään jokin pieni vinkki ja lopuksi taas tehdään itse, sopi minulle kuin pipo hattuun. Varsinkin kun tehtävänannot olivat melko mielenkiintoisia. Myös tarkat takarajat ja niiden rikkomista seuraavat sanktiot toimivat sopivina ruoskina työmotivaation ylläpitämiseksi.

Vaikka äsken mainitsin, että opin parhaiten tekamällä, niin sekään ei ole mielekästä, mikäli asiasta ei tiedä yhtään mitään etukäteen. Mielestäni essee-tehtävät olivat mainio tapa antaa aikaa perehtyä vaikeisiinkin asioihin ennen varsinaista aiheen käsittelyä harjoitustehtävässä. Itselläni on paha(?) tapa ryhtyä suin päin tekemään kaikkea ennen kuin otan selvää mitä ja miten pitäisi tehdä.  Voisin väittää, että ilman esseiden kirjoitusta olisin ollut paljon pahemmin hukassa harjoitustehtävissä ja aikaa niihin olisi kulunut vähintään yhtä paljon enemmän kuin mitä esseiden kirjoittamiseen meni. Vaikka lopullinen oppiminen tapahtuukin vasta itse tekemällä, niin useamman tunnin etukäteisperehtyminen helpottaa tätä oppimisprosessia huomattavasti.

Vastaavasti OLO-sessiot eivät tarjonneet välttämättä samanlaista hyötyä ohjelminnilleni. Syitä siihen on varmasti useita. Päällimmäisin syy on varmasti laiskuus. En rehellisesti sanoen panostanut yhteenkään oppimistavoitteeseen kahtakymmentäminuuttia enempää. Mutta tämä kahdenkymmenen minuutin satsaus riitti, eli pystyin selittämään jotain kummallista purkusessioissa niin että homma meni täydestä. Ehkä jonkinnäköinen kirjallisena vaadittava tuotos oppimistavoitteista olisi saattanu toimia pienenä boostina. Toisaalta olin myös ehtinyt turhautumaan koko OLO-menetelmään edelliskevään Studio2-kurssilla. Jotenkin melko usein tuntuu, että silmittömällä lappujen roiskimisella taululle ei saavutettu mitään muta kuin sekaannusta.  Tästä on taas muodostumassa yhdenlainen ”perusennakkoluulo”, joista olisi syytä päästä varmaankin eroon (kun nyt näitä OLO-kursseja nyt vielä sattuu olemaan jäljellä).

Myös tämä blogiinkirjoittaminen ei oikein tuntunut täysin luonnistuvan. Kyseinen toimitus oli aina helppo heittää priorisoinnissa viimeiselle sijalle, koska ei ollut mitään ns. ”pakollisia” kirjoituksia, eli kirjottaa sai aina kun ehti. Ehkä omaa oppimistani leimaa jonkinnäköinen ruoskan tarve. Tarvitaan joku taho, joka ravistelee tietyin uhkavaatimuksin tekemään hommia ajallaan.

-Ville

Loppu.

Nyt kun mietin tänään loppuvaa kurssia, jonka tosin jätin ajatuksissani menneisyyteen jo jonkun aikaa sitten, ensimmäinen mieleen tuleva asia on sen työläys. Se vei syksyllä niin paljon aikaa, että melkein kaikki syksystä mieleen tulevat asiat liittyvät studio1:en. Silloin kun ei konkreettisesti puuhannut kurssin, lähinnä ohjelmointitehtävien parissa, oli vähintään ajatukset siinä. Konstruktoreita ja attribuutteja ja muita kamalia sanoja putkahti aina mieleen ja pilasi usein koko fiiliksen samalla. Koko ajan oli joku deadline puskemassa päälle ja koko ajan tuntui, että tipun vain enemmän kärryiltä. En heti alussa päässyt kunnolla mukaan ohjelmoinnin maailmaan, ja niin meni monet muut asiat syksyn edetessä ihan ohi. Kurssista meni maku siinä sähellyksessä, ja niin syntyi kovin negatiivisia tunteita ohjelmointia kohtaan..

Kurssiin on ahdettu aika paljon kaikkea erilaista asiaa, OLOista alun html-harjoitukseen ja tietysti hulluun koodaamiseen, sekä kaikkea muuta siitä väliltä. Ryhmätyötäkin löytyi melko paljon, mikä on ihan mukava asia, mutta mielestäni se ei oikein sovi ohjelmointiin. Siinä kun kohtaavat niin monet eritasoiset ohjelmointitaidot, että tasapuolinen työnjako ei oikein onnistu ja muutenkin homma menee kyvykkäimpien käsiin, sillä kaikkihan, myös nämä osaavimmat, haluavat työstä parhaan arvosanan. 

Osa monipuolisen kurssin tarkoituksesta sitten jäi vähän hämäräksi, mutta päätarkoitus taisi olla opettaa kaikille paljon Javaa.. Epäilemättä kurssi myös yhdistää ja luo yhteishenkeä phuksien keskuudessa, kun turvaudutaan toisiin ongelmissa ja ahdistuksessa, joten kurssin sijoittuminen tänne ensimmäiseen syksyyn on kiva asia. Vaikka sen takia välillä synkkinä hetkinä jo alanvaihtokin kävi mielessä. Silloin piti vain yrittää muistaa, ettei toista studio1:tä enää tämän jälkeen tule ja että onhan elämässä  vielä jotain muutakin.

Onneksi lopuksi tuli projekti, jonka ansiosta muistot kurssista ainakin vähän kaunistui. Projektissani sain aikaan paljon enemmän, mitä olin odottanut. Tuntui välillä, että mähän taidankin osata koodata! En siis ehkä olekaan viettänyt koko syksyä turhaan ohjelmoinnin parissa kärsien. On kiva, että kurssista jäikin käteen muutakin kuin opintopisteitä, joita tosin tulee ihan mukava määrä palkintona. Se, että on oppinut näinkin uutta ja ihmeellistä asiaa kuin ohjelmointia,  josta ei ole aikaisemmin tiennyt yhtään mitään, tuntuu aika kummalliselta. Varsinkin kun se tuntui käyvän niin nopeasti. On hienoa jättää kurssi taakse yhtä uutta taitoa ja monta kokemusta rikkaampana! Vaikka useimpia kokemuksia koneen äärellä en jääkään kaipaamaan, enkä eclipseä.

-Anu

Seuraava sivu »