You are currently browsing the category archive for the 'Java-tehtäväkierrokset' category.
Neljännessä ohjelmointitehtävässä oli läsnä suolaisen merituulen kirpeä kosketus sekä mustanpuhuvien soturien salamyhkäinen olemus. Ninjoihin, merirosvoihin ja sieniin keskittyvät tehtäväkierrokset olivat saamassa ansaitsemaansa huipennusta. Tämän Grande Finalen toteuttaminen tulisi vaatimaan aiempien tietojen lisäksi tietämystä rajapinnoista ja kykyä laittaa merkkijonot halki, poikki ja pinoon. Loppuhuipennuksena piti vielä olla aidosti luova, ja keksiä pelille jokin tavoite. Eikä tässä vielä kaikki, (lähes) koko komeudelle täytyi vielä toteuttaa JavaDoc-dokumentointi! Huhhuh!
Kaikenkaikkiaan neljäs tehtävä oli itselleni aikaavievin, mutta samalla myös antoisin javaharkka. Motivaatio oli vielä tallella, ja useamman harkan ajan hyystettyyn peliin alkoi jo kiintyä. Jaksoin (ainutta kertaa kurssilla) tehdä kaikki bonustehtävät, ja jopa lisätä hieman omaa bonusta mukaan.
Aikaa harkan tekoon oli tutut kaksi viikkoa, mikä tuottti hieman ongelmia pidemmän kolmosharkan jälkeen. Muistan tehneeni viimeisen osatehtävän (pelin tavoitteen luonti) sekä JavaDocit + muun kommentoinnin kokonaan viimeisenä yönä, ja nukkumaan pääsinkin mukavasti siinä ammukymmenen kieppeillä. Turhautumaankin pääsin melkolailla, kun etsin omasta koodista monta tuntia virhettä, joka paljastui tehtävänannossa valmiina annetussa Nakyma-luokassa sijaitsevaksi bug… *kröhöm* featureksi. Toisaalta tämän jälkeen fiilis oli varsin hyvä, kun tajusin ettei virhe oikeasti ollutkaan omassa koodissa.
Mutta mitä tehtäväkierroksesta sitten loppupeleissä jäi käteen? Minulle rajapinnat jäivät ehkä hivenen epäselväksi vielä tuossa vaiheessa (seuraavat tehtäväkierrokset selvensivät asiaa varsin tehokkaasti). Sen sijaan käyttäjän syötteen tulkitseminen sekä merkkijonojen käsittely olivat tehtäväkierroksen parasta antia. Näistä tietoja tarvitsi paljon seuraavissa tehtävissä sekä projektia tehdessä. Nelosharkassa oli myös jotenkin sellainen fiilis, että ensimmäistä kertaa tähän mennessä koodataan jotain aidosti konkreettista, oikeaa ohjelmaa, ehkä juuri käyttäjän interaktion takia. JavaDoc-sivujen tekeminen ei välttämättä tämän kurssin pienimuotoisten tehtävien puitteissa ollut vielä kovin oleellista, mutta onhan se hyvä tietää, kuinka koodi tulee dokumentoida.
Jostain syystä nelosharkan jälkeen motivaatio otti melkoisen Deep Diven, enkä oikein jaksanut enää innostua Swingistä ja Sikobanista, saati projektista. Minulle nelosharkka oli Studio1:n parasta aikaa.
Näin siis, hieman myöhässä, tulee minun sepustukseni siitä, kuinka meidät tömäytettiin swingillä ja käyttöliittymillä pois pikkuhiljaa turvallisen tuntuiseksi muuttuneilta raiteilta. Toisinsanoen uusi ohjelmointiaihe, Sikoban, ja sen graafinen toteutus lätkäistiin neniemme eteen juuri, kun tuntui siltä, että hei, minäpä taidan osatakin hieman javaa.
Tämä valekuva rikottiin (tai paremminkin häivytettiin, olematonta on vaikea rikkoa ja valekuvathan eivät ole olemassa) viidennessä ohjelmointiharkassa J-alkuisilla luokkanimillä eli käsittämättömän monilla erilaisilla valmiskomponenteilla, joilla piti luoda kehykset, paneelit, ruudukko ja valikko Sokoban-pelille, jossa seikkailivat siat ja betonipossut. Pelissä työnnettiin betonipossuja tieltä samalla kun suunnattiin kohti maaliruutua. Onneksi pelilogiikan väsääminen oli hieman tutumpaa puuhaa – hieman.
Oli tietenkin mielenkiintoista oppia swingin luokkarakenteen käyttöä ihan koodauksessakin, ja olisihan sitä kuvitellut, että aiheesta kirjoitettu essee olisi valmistanut edes jotenkin, mutta minä ainakin olin melko hukassa, kun katselin ensimmäisiä osatehtäviä. Saattoi tietenkin johtua minun tapauksessani siitä, että englanti ei ole kovin hyvin hallussa ja swing-luokkista selvää saaminen tuskastutti melkoisesti.
Swing-svengailun lisäksi muuta erikoista tässä javatehtävässä oli osatehtävien suuri määrä (10kpl), johon ei oikein tiennyt, miten suhtautua; ne kun sattuivat olemaan aika erilaisia kooltaan, joten oli vaikea arvioida kauanko pitää varata aikaa niistä mihinkin.
Tehtävänannon alussa oleva kehotus lukea osatehtävä kokonaan läpi ennen koodin kirjoittamista tuntui ensin omituiselta, mutta kyllä sen hetken päästä tajusi järkeväksi. Ohjeosan lopusta löytyi yleensä jotakin selventävää, yhtenäistävää tai idean esille tuovaa, ja itse ainakin päädyin tekemään metodeja eri järjestyksissä kuin ne oli lueteltu, koska kuvittelin, että joidenkin oikeat muodot olisivat olleet monimutkaisempia kuin mitä keksin. Usein kyllä selvisi muutaman myöhemmin mainitun metodin tekemisen jälkeen, että eihän tämä olekaan tätä vaikeampi; harhaan johtava vain. Esimerkiksi Peliruudukko-luokassa, kuten melkein kaikissa muissakin luokissa, loin muita yksinkertaisempia metodeja ennen kuin aloin ihmettelemään konstruktoria.
Myös bonustehtävät olivat jotain uutta, johon oli vaikea suhtautua: Onko niitä pakko tehdä, jos haluaa hyvän arvosanan? Kuinka paljon täytyy tehdä, jotta ne vaikuttaisiva? Voiko niistä olla haittaa?
Ehkä voisin tässä vielä mainita, että minusta vaikeimmat asiat ymmärtää tässä tehtävässä olivat kuuntelijat sekä FileChooser. Vaikka siis muunkin uuden omaksuminen oli haastavaa. Ja omaksuttavaa kyllä riitti.
Nyt on sitten studio1-kurssi projektia vaille valmis. Java – ja essee tehtävät on palautettu ja java-kielen pitäisi olla kuta kuinkin hallussa projektia ajatellen.
Viiminen ohjelmointi tehtävä rakentui edellisen, eli vitosen päälle. Tähän tuli lisätä timerilla pelin aika sekä näkyvä tulostaulukko, joka lukee jo olevassa olevat tulokset ja lisää siihen uuden rivin, jos se on tarpeeksi hyvä. Vitosessa otettiin käyttöön swing-komponentit ja niitä käytettiin myös tässä. Kutonen koostui neljästä osaehtävästä, joista ensimmäinnen keskittyi aikaan ja sen näyttöön ja loput tulostaulukon luontiin.
Kaksi ensimmäistä osatehtävää tuli tehtyä suht koht nopeaa. Kolmas osoittautui hieman kinkkisimmäksi, mutta kaiken kaikkiaan tämä tehtävä tuli ehkä “helpoimmalla” kaikista. Johtuiko se sitten tehtävän tasosta vai taitojen karttumisesta en tiedä. Oli paljon mukavampi tehdä jotain konkreettista , jonka tuloksen näkee heti ja jota pääsee heti testaaaman. Varsinkin tiedostoista luku ja sinne kirjoittaminen oli mielenkiintoista askartelua. Vaati hieman työtä saada kaikki haluttuun kuntoon, mutta onnistuihan se lopulta joten kuten. Aina tietenkin olisi vielä voinut hioa, ja esim. muuttaa taulukon paikkaa, mutta siihen ei enää motivaati riittänyt.
Se oli aikavierasta alkuun, mutta valkeni sitten ajan myötä.
Uskon, että erityisesti näissä kahdessa viimeisessä osassa opitut asiat ovat todella hyödyksi tulevassa projektissa.
Vaikka ohjelmointi tehtävät olivat tuskaisia ja ärsyttäviä ja kaikkea muuta ja jäivät aina viime tinkaan, olivat ne jollain tavalla myös mukavia ja tuntuu hieman oudolta ettei niitä enää ole. No eiköhän projekti kohta korvaa sen tunteen.:D
Kolmas Java-tehtävä lähti käyntiin tuttuun tapaan: hyvä olo, joka oli jäänyt edellisen tehtävän palautuksesta, katosi kuin tuhka tuuleen heti seuraavana päivänä kun eteen aukeni uusi, niin hirveän pitkältä ja vaikealta tuntuva tehtävänanto. Onneksi tällä kertaa tehtävän tekemiseen oli aikaa ruhtinaalliset kolme viikkoa, josta saamme kiittää mennyttä tenttiviikkoa.
![]()
Tämänkertainen tehtävä tuntui aiheensa puolesta edellisiä tehtäviä mielenkiintoisemmalta. Ainakin yksi syy lienee siinä, että tällä kertaa siirryimme staattisen maailman rakentelusta pelin toiminnallisempiin osiin. Teimme mm. muutamille eri olentotyypeille kuten merirosvoille (yarrrr!) toimintamalleja, joihin olentojen liikkuminen maailmassa perustuu.
Tehtävässä vaadittiin taas kourallinen uusia temppuja, mutta ihme kyllä ne eivät osoittautuneetkaan tehtävän pahimmiksi möröiksi. Abstraktit luokat ja mureenapoikkeukset luonnistuivat yllättävän vähillä ponnistuksilla. Sen sijaan päänvaivaa aiheutti ohjelman paisunut koko ja tehtävänannon monimutkaistuminen. Nyt kun mukana olivat kaikki tähän mennessä tekemämme luokat, tuli välillä suuria ongelmia hahmottaa ohjelman toimintaa kokonaisuudessaan.
Vaikka aikaa tehtävän tekemiseen olikin kolme viikkoa, jostain kumman syystä silti meinasi tulla kiire. (Johtuu mahdollisesti omasta laiskuudesta ja taipumuksesta jättää kaikki aina viime tippaan.) Varsinkin kun vähän ennen deadlinea saimme ylemmältä taholta epävirallisen testiohjelman, jolla pystyi tarkastelemaan oman ohjelman toimivuutta. Sen avulla ohjelmasta löytyi useita kohtia, jotka vaativat pientä viilailua.
Lopulta tehtävä tuli palautettua ja sen jälkeen tuli taas tyytyväinen olo. Aina kun vertaa edellistä tehtävää juuri palauttamaansa huomaa kuinka paljon kehitystä on todella tapahtunut vaivaisessa muutamassa viikossa. Tästä on taas hyvä jatkaa seuraavaan tehtävään…
Toinen ohjelmointitehtävämme liittyi pelimaailman rakentamiseen; eli meidän tuli luoda karttaruutuja, sektoreita ja maailmoita, jonne ensimmäisessä tehtävässä tehdyt esineet voisi myöhemmin sijoittaa.
Alkuun nousi heti kylmä hiki pintaan, kun ei päässyt ensimmäisiin harkkoihin ja muut tuntuivat olevan jo hyvässä vauhdissa ohjelmiensa kanssa itse vielä pähkäillessä Mapin ja HashMapin käytön kanssa. Mutta kun vauhtiin pääsi sujui ohjelmointi huomattavasti ensimmäistä tehtävää jouhevammin, tosin työn painottuen viimeisille tunneille ennen deadlinea. Onneksi tämä kuitenkin siirtyi lähes päivällä ja siitäkin huolimatta omat tehtäväni lähtivät kotikoneeltani 11.59… Eli aivan ajoissa! Sen jälkeen oli kyllä tyhjä olo, eikä matikan luvusta tullut oikeen mitään, mikä näkyikin valitettavasti tämän päivän välikokeessa. No, onneksi niitä tulee lisää.
Nyt ei sitten muuta kuin poikkeusten kimppuun ja vähän kattelemaan kolmos ohjelmointitehtävää, mihin onkin jopa ruhtinaalliset kolme viikkoa aikaa!
Kohta on jo puoli viikkoa ehtiny kulua ensimmäisen Java-tehtävän deadlinesta, ja jokainen meistä on (toivon mukaan) yhden Java-ohjelman verran rikkaampi. Nyt uskallankin jo sanoa, että olen raottanut aivan pikkuriikkisen tuota Java-ohjelmoinnin maailman suurta ja raskasta ovea, ja olenpa jopa vähän kurkistanut sinne sisäänkin.
Minulla, ja kuten useimmilla muilla ryhmäläisillämme, ei ollut juuri ollenkaan kokemusta ohjelmoinnista ennen tätä kurssia, niinpä oppimiskynnys tuntuikin alussa olevan varsin korkea. Kokonaisen Java-ohjelman kirjoittaminen tyhjään emacs:iin tuntui järkyttävän haastavalta vielä pari viikkoa sitten. Koulun tarjoama opetus tuntui liki mitättömältä, ja koin ettei minulla ollut mitään aavistusta miten kirjoittamani ohjelma toimii. Etenkin ensimmäinen osatehtävä tuntui “copy-paste” -harjoitukselta, minkä lähteenä oli kurssin kotisivu.
Suureksi onneksi tämä tunne kuihtui hyvin nopeasti. Pikku hiljaa alkoi Javan syntaksi aueta, ja käsitteet kuten attribuutti, metodi ja parametri eivät enää tuntuneet niin heprealta. Suurin syy tähän on ehdottomasti loistavat Studio-harkat, ja niitä vetäneet assarit. Assareiden mittaamattomalta tuntuva tietotaito Java-ohjelmoinnissa tuli nopeasti esille kun täysin mahdottomalta ja järjettömältä tuntuvat ongelmat ratkesivat pienessä hetkessä studioharkoissa. Toivottavasti assareiden tietotaito säilyy yhtä valtavan tuntuisena eikä lopu kesken jatkossakaan
Vaikka olemmekin oppineet paljon Java-ohjelmoinnista, niin itse ohjelmoinnin oppiminen ei ollut mielestäni ensimmäisen ohjelmointitehtävän ainoa ulosanti. Vähintäänki yhtä tärkeää kuin ohjelmoinnin opimminen, oli itse oppimisen opettelu. Java-ohjelmointia ei pysty opiskelemaan täysin samalla tavalla kun lukiossa olin tottunut oppimaan. Pelkkä luennoilla käynti, ja yhden kirjan lukeminen eivät johda kovin pitkälle. Sen sijaan itsenäinen tiedonhakeminen, assareiden hihan nykiminen, Java-kirjojen lueskelu ja keskusteleminen muiden “ohjelmoijien” kanssa tuottavat yhdessä huomattavasti parempaa tulosta. Itse opin muun muassa sen, että oppitunteja varten on syytä valmistauta, eikä vain mennä paikalle kahta kättä heiluttaen. Ei ole kovin järkevää mennä studioharkkoihin, ja käyttää sielä kaikki aikansa googlettamiseen ja kirjojen lukemiseen, kun saman pystyy tekemään jo ennakkovalmistautumisena kotona.
Ensimmäinen Java-tehtävä on varmasti tuottanut itse kullekin suuren määrä harmaita hiuksia, ja sitäkin varmemmin tuon ah-niin-ihanan hajoamisen-tunteen. Mutta juurikin tämä teki tehtävästä niin antoisan. Ei sitä voi kuin hymyssä suin muistella sitä hetkeä kun lähetti .jar paketin palautuskoneelle.
