Keväällä 1996 opinto-opasta toimittaessani ehdoin tahdoin vänkäsin laitoksen hyväksymään ajatuksen, että pitäisin Java-kurssin keväällä 1997. Itse asiassa yritin vängätä Javaa peräti syksyn 1996 pakolliseksi ohjelmointikurssiksi Ohjelmointi(Java) kurssin Ohjelmointi(Pascal) paikalle, mutta (luullakseni) onneksi en onnistunut. Aion yrittää vängätä sitä syksyn 1997 pakolliseksi kurssiksi Ohjelmointi(Java). Luullakseni en onnistu. En tiedä vielä, onko se onni vai tappio.
Java-kieli teki ensi näkemällä vaikutuksen vanhaan Kieloon (Kielo oli aikanaan eräs erikoistumissuunta, nykyään ns. "suuntautumisvaihtoehto", Kopsin, Tilhin, Teräksen ja Matin ohella. (Harjoitustehtävä: Mitä nuo nimet mahtoivat tarkoittaa?))
Java oli Algol60:n, Lispin ja Pascalin jälkeen, monen, monen vuoden jälkeen yllättäen tyylikäs ohjelmointikieli. Vuosien varrella näki yleviä hehkutuksia Algol68:n, PL/I:n ja Adan tapaan ja toisaalta koneen syleilyjä C:n ja vaikkapa FAS:in tapaan, eikä niistä mikään sytyttänyt. Joko oli kerätty kaikkien kaikki hienot ideat pakettiin, joka kaatui ajattelutapojen pyttipannuun, tai sitten oli kehitelty huonosti piilotettuja tapoja ohjelmoida konekielellä. Ei purrut! Mutta Java peijakas puri!
Kerään tälle sivulle yhteismitattomia hajahuomioita Java-kurssin aikana. Ajatukset ovat pieniä tai suuria. Jokainen saa luvan valita tärkeät yhdentekevien joukosta. Luultavasti niillä ei ole mitään merkitysta useimmille. Jos ne edes jotakuta auttavat pysymään ajatuksenjuoksuni mukana, olen tyytyväinen. Kirjoitan ne silti varsinaisesti itselleni. Miksi? Ja miksi julkisina? En tiedä.
Enemmän mietityttää, että on tullut esitetyksi eri rakenteiden kohdalla ennemminkin käytön rajoja ja erikoistapauksia kuin 'tavallisia' esimerkkejä. Toivottavasti kukaan ei luule, että rajoja esittelevät luennon esimerkit ovat tavoiteltavaa ohjelmontityyliä! Täytyy harjoitusten esimerkkiratkaisuissa pyrkiä korostetun selkeisiin ohjelmiin!
Laadin juuri pikku välineitä seuraavan viikon laskareita suunnitellessani ja taas tuo kokemus: Javalla on todella näppärä ohjelmoida. Ja lisäksi kokeilin joitakin piirteitä, joita en ollut vielä opetellut: valitsin luontevan tuntuisen ilmaisun ja sehän oli juuri se, jolla Javassa ko. asia ilmaistiin!
Sähköposti juuri mainitsi:
"Ei taida olla kovin montaa Java-kurssin tekstinpatkaa, jotka olisivat
pysyneet ennallaan alusta alkaen :)".
Vastasin:
Olenkin muistaakseni ainakin luennoilla varoittanut, että vielä
käsittelemättömiä asioita saa lukea vain omalla vastuullaan!
Mielestäni on kuitenkin parempi systeemi pitää tekeillä olevatkin
asiat halukkaiden(!) luettavissa kuin paljastaa 'auktorisoidut'
sivut vasta luennon jälkeen. Vähän samanlainen asia on, että
annan kaiken kansan katsella, millaisia tehtäviä on suunniteilla.
Avoimuutta, mutta lukija vastaa lukemastaan - niinkuin internetissä
asia muutenkin on ...
[Tässä Jawa kaappaa R2:n ("Artuun")!]
On aika jännää myös, että vaikka oikeastaan tietää kurssin alun olleen erinomainen (häpeä tunnustaa tällaista edes itselleen!) - luentojen ja harjoitusten sisältö on toiminut - asialle jotenkin kaipaisi vahvistusta muilta,... milteipä kaipaisi kiitosta ja varmennusta sille, ettei itse omaan napaansa tuijottaen näe harhoja. Pimeetä. Ja vielä internettiin...
Eilen illalla huomasin merkillisyyksiä liukulukujen käsittelyssä: pieni ohjelma päättyy virheeseen kaffella ja dripattuna, mutta toimii "java"-tulkilla! Ja vielä mielenkiintoisempaa: tuo "toimivakin" toimii eri suorituskerroilla eri tavoin vaikka ohjelman ei harrasta mitään tiedosto-i/o:ta! Eikö Bytecode olekaan vapaakäyntistä? Tai sitten olen (taas?) ymmärtänyt jotakin väärin.
Taas laitoksella. Hilpeä pikku yllätys: sama ohjelma samalla tulkilla eri linux-koneessa käyttäytyykin eri tavoin!
Tätä hommaa tuntuu kertyvän aika hektisesti - kurssin sisällön lisäksi töitä on teettänyt ja teettää: tutkintovaatimusten valmistelu, abi-lehden artikkeleiden laatiminen ja valokuvien ottaminen, raportin kirjoittaminen ensimmäisestä ohjelmointikielestä, uusien päätoimisten valokuvaaminen, Pascal-loppukokeen laatiminen ja tarkastaminen (56 paperia odottaa!), a-labran hallintohommat, pian alkaa opinto-oppaan toimittaminen, ... Jo pelkästään tämän Java-kurssi laatiminen ja pitäminen olisi täysipäiväinen työ! Näyttääkin tulleen tavaksi tehdä töitä käytännössä kaikki illat ja viikonloput. (vali, vali, ..., ja sitten joskus kun ei ole kiirettä, pääsen valittamaan ettei kukaan tarvitse mihinkään ...)
Olen muuttanut hieman kurssin rakennesuunnitelmaa:
Tarkoitus on seuraavassa luvussa (4) käsitellä koko helahoito: luokat, periytyminen, interfacet, pakkaukset. Ilman koko kalustoa on vaikea puhua näkyvyyden säätelystä private-, public-, ym. määrein. Ja koska tuo algoritmien laadintakalusto saadaan 3. luvussa suurinpirtein kokonaan käyttöön (paitsi poikkeukset (ja rinnakkaisuus)), voidaan tuolla raskaalla kalustolla jo tehdäkin jotakin.
Ongelma on, että esimerkkejä, jotka "oikeuttaisivat" tuon kaiken on käytännössä mahdoton teettää. Apu voi tulla siitä, että luultavasti otan esimerkeiksi kielen valmiita välineitä jo luvussa 4 (java.lang, ...).
Toinen uutinen (ilo-?) on, että luultavasti sovelmat saavat kurssin loppupuolella enemmän painoa kuin aluksi suunnittelin. Mutta tämä on vielä salaisuus. Älkää kertoko kenellekään! ;-)
Taulukkoluku on kasvanut isommaksi kuin odotin. Mutta Javan taulukot ovat mielestäni jotain aika uutta ja hienoa ohjelmoinnissa: vahva tyypitys yhdistettynä dynaamisuuteen ja automaattiseen roskienkeruuseen muodostavat kokonaisuuden, jonka uskon jättävän jälkensä ohjelmointikielten historiaan.
Yksi laskarinpitäjä valitti, että yhdessä ryhmässänsä on kiusallinen tunnelma, kun ryhmän opiskelijat pitävät harjoitustehtäviä aivan liian helppoina! Ehkäpä ryhmään on sattunut kovin paljon C++:n suorittaneita, jotka eivät jaksa innostua Javan alkeista (vaikka jo niissä on aika paljon eroa C++:aan verrattuna). Pyysin ohjaajaa muistuttamaan kyllästyneitä siitä, että kurssi päätettiin pitää nimenomaan appron opiskelijoille tarkoitettuna. Toivottavasti tuossakin ryhmässä vielä innostuksen kipinä syttyy...
Tänään syntyi mielenkiintoista keskustelua kahvihuoneen viisaiden kanssa tyylikkyydestä ohjelmoinnissa: keskustelun erityinen kohde oli Javan luokkakäsite. Olin sitä mieltä, että Javan luokka on tyylikäs, koska samalla ja yhdellä välineellä voidaan toteuttaa niin "tietue", "rutiinikirjasto", "pääohjelma", "abstrakti kone" kuin ties mitä, eikä jokaiselle tarvita omia syntaktisia ja semanttisia ilmauksiaan. Viisaat taas pitivät juuri tuota asiaa tyylittömänä: arvelivat, että minkä tahansa static-otuksen salliminen luokassa hävittää kielen aidon olioluonteen. Minä koitin sanoa, että sitä aitoa saa tehtyä silloin, kun haluaa, mutta ne ei-aitoudetkin on toteutettu Javassa siten, että tyylikästä jälkeä on mahdollista tehdä. Ymmärrän kyllä heidänkin kantaansa, mutta silti olen sitä mieltä, että millä tahansa ohjelmointikielellä saa halutessaan aikaan ihan niin rumaa jälkeä kuin haluaa, ja että Javan välineet ovat merkillepantavan hyviä, jos haluaa aikaansaada kaunista jälkeä!
Vähemmän tärkeänä pitämäni esimerkki keskenään rekursiivisista metodeista abrasta ja kadista osoittautuikin yllättävän hyväksi: ei rekursion takia vaan joka kierroksella luotujen uusien String-olioiden takia. Ja luennolla kokeiltiin piiloon jääneiden paikallisten muuttujien arvojen säilymistä kutsun yli. Luulen että joku saattoi oppiakin jotakin. Muutin myös luennon jälkeen esimerkin luennolla improvisoidun kaltaiseksi.
Kurssin alkuosa vei yllättävän paljon aikaa, mutta luulen, että tuo sinänsä vaativahko 4. luku hoituu 2 - 2.5 luentokerrassa (voi olla toki taas väärä arvio). Sitten ehkä n. 1 luentokerta, jossa kielen valmiita pakkauksia ym. esitellään sekä esimerkkeinä, että työkaluina. Ja sitten graafisen käyttöliittymän laadintavälineitä ja sovelmia ...
Viikonloppuna oli peräti parit juhlat ja Javasta pääsi ensimmäisen kerran moneen viikkoon aika hyvin eroon, ... ehkä vähän liiankin hyvin: sunnuntaiksi suunnitellut työt jäivät viikolle. Tartun Pascal- loppukokeen tarkastamiseen vasta seuraavalla viikolla, mutta sitten sekin kyllä pitäisi hoitaa. Tällä viikolla pitäisi saada valtaosaltaan valmiiksi tuo 4. luku!
Oli hieman kiusallista heti luennon jälkeen täysissä luentoylikierroksissa joutua kuulemaan kritiikkiä pikku kirjoituksestani Javan käyttökelpoisuudesta ensimmäiseksi ohjelmointikieleksi. (Kritiikki ei kylläkään ollut suoraan minulle sellaisenaan tarkoitettu, onnettomuudekseni vain satuin paikalle)
Kirjoitus on pieni, subjektiivinen ja nopeasti laadittu, mutta en oikein ehtisi mitään perusteellisia analyysejä kirjoittamaan tai harrastamaan laitospolitiikkaa kaiken muun kiireen keskellä. Ei riitä voimat nyt! Vaikka olisihan Java ensimmäiseksi ohjelmointikieleksi erinomainen vaihtoehto ...
Oliojohdantoa on ollut mielenkiintoista ja aika vaativaa laatia. Eikä vieläkään ole aivan valmista. Luultavasti olioluvun jatko on paljon teknisempää ja sikäli helpompaa kirjoitettavaa, että kyse on tekniikasta ja käytännöstä, täsmällisemmistä asioista. Tuon johdannon hivenen filosofiaankin viiraava sisältö on aika tarkkaa rakenneltavaa (ja tarkistamisen paikkoja on vielä!). Itse asiassa humanististen tieteiden tekeminen taitaa olla aika vaativaa... Ei sillä, että tieteeseen asti olisin tuossa päässyt, mutta niin pitkälle kumminkin, että luonnollisen kielen kanssa työskentelyn vaativuus taas kerran tuli ymmärrettyä!
Tuon johdannon tekemiseen sain hyviä esimerkki-ideoita ja ennenkaikkea korvaamatonta apua oliokäsitteen luonteen ymmärtämisessä Silanderin Tomilta! Julkinen kiitos hänelle!
Viidennet laskarit tuli laadittua ehkä pikkuisen liiankin innostuneena: tuli sekoitettua Javan vahva ja tyylikäs talukkotyyppi mielenkiintoiseen puuhailuun luokkien kanssa. Enkä enää sanonutkaan joka paikassa, mitä kaikkia luokkia halutaan, miten ongelmaa ratkotaan luokkina ja olioina. Taisi vaikuttaa tuo olioluvun johdannon kirjoittelu laskari-ideoihinkin. Vaan lie tuo pikemminkin hyvästä kuin pahasta!? Nyt se sitten on vähän niinkuin alkanut se olio-ohjelmointi! Aika jännää, että noiden taulukoiden jälkeen ei oikeastaan ole enää mitään rajaa sille, mitä voidaan tehdä. Nyt vaan sitten pannaan kaikki luokkiin, pakkauksiin ja interfaceihin... Tämähän alkaa olla niin jännää, että pian appletit ja internet unohtuvat ja miten sitten suunsa panevat opiskelijat?
Täytyy kuitenkin yrittää meneillään olevan kurssin suhteen pitää pää kylmänä ja muistaa, että tavallisille opiskelijoille minulla ehkä on kuitenkin jotakin annettavaa... (kamalaa ettei tämäkään ei ole piruilua!).
Näkyy muuten viikko viikolta käyvän rankemmaksi tuo materiaalin tuottaminen. Luokkaluvun johdannon viilailu vei aivan liikaa aikaa, nyt alkaa jo viikonloppu olla edessä ja tekninen osa on ihan alkutekijöissään. Ja ensi viikon laskareihin pitäisi laatia enemmän tai vähemmän kelvolliset esimerkkiratkaisut. Ja pian maanantain luennon jälkeen sitten taas pitäisi olla harkitut(?) ja opettavaiset(?) seuraavat laskaritehtävät suunniteltuina...
Ja kurssin hoitamisen ohella pitäisi olla auttavainen ja kiinnostunut opintoneuvoja ja laatia raportteja siitä sun tästä ja hoitaa abi-lehden asioita ja valokuvata uudet päätoimiset ja suunnitella ja editoida uusia tutkintovaatimuksia ja miettiä matikan appron suosittelemista diffiksen sijaan ja vastailla ties miten moniin sähköpostikyselyihin esim. siitä että miksi en kirjoita opiskelutodistuksia tai siitä miksi D.Nespoli ei kauko-opettaessaan saa luettua opiskelijoiden www-sivuja tai siitä miksi a-labran opettaja ei pääse päivittämään tietoja tai siitä milloin ensi syksyn uusien infotilaisuus pidetään tai ... ja ihan just kohta pitää ruveta toimittamaan opinto-opasta ja alkaa patistella patistelemasta päästyä opettajia suostumaan päivittämään tulevien opetuksiensa tietoja ajan tasalle. (Ja sitäpaitsi oman elämän hoito on jo kauan sitten jäänyt tässä tohinassa aivan hunningolle ...)
Saas näkee, miten äijän käy..., mikä paikka pragaa ekana? (Ja saas näkee, kestääkö kantti vielä aamulla jättää tämä vuodatus nettiin?) (aamulla: jaa ..., on se kyllä siinä ja siinä ...;-)
Eilisillan stressi näyttää nyt aika hurjalta, mutta jääköön juttu tuohon, kun kerran kirjoitettua tuli. On muuten niin, että itse kurssin tekeminen pikemminkin helpottaa stressiä kunhan vaan muistaa unohtaa kaikki muut tekemättömät työt. On mielenkiintoista miettiä, mitkä sanat opiskelijalle aukaisevat Javan salat. Rankkaa on se, että kaikki muut asiat on melkein pakko hoitaa vähän huonosti. Ei ole tunteja vuorokaudessa tarpeeksi ...
"Täällä on ollut puhetta siitä, että on tylsää leikata ja liimata. Kaksi kommenttia noista tehtävistä:
Periytyminen on siis mallinnuksen väline, ei ohjelmointitekninen tiedostojen hallintaväline (pakkaus taas on nimenomaan jälkimmäiseen käyttöön!)"
Tänään tosissaan pyöri tyhjää uusien tehtävien generointiluovuus: Kiertelin laitoksen käytäviä yrittäen etsiä "olioita" ja niille jossakin mielessä järkeviä "luokkia". Paljon huonoja(?) ehdotuksia sain (ja kiitos niistä, kuka voisi tietää, minkä niistä lopulta ymmärrän hyväksi!). Ja teinpähän sitten kotona peijakkaanmoiset tehtävät. Saas näkee toimivatko? Taas huolettaa, että en tee approkamaa?
Eilisestä maanantaista ylipääsy oli oikeasti saavutus! Koskaan ennen ei ole tullut mahalla reagoitua. Mutta kyllä se, että vasemmalla kädellä (puolihuolimattomasti?) duunatut johtoryhmän kummalliset esittelytehtävät ja oikeasti tärkeät opetuksenvalmisteluduunit rupesivat tuntumaan mahassa asti, riipi jossakin! Ei kai näiden asiain ihan mahantärkeitä pitäisi olla!? Mutta kyllä se, että ainakin kolmessa asiassa on "esittelijänä" laitoksen johtoryhmässä ensin pari tuntia ja sen jälkeen menee heti heittämään kolmen tunnin luennon, on aika kovaa kamaa? Ei ehkä niinkään silloin kun se tapahtuu. Mutta etukäteen se raapi ..., ja yllättäen raapi ennekaikkea mahaa (liekö päätä parempi vaihtoehto?) (En kai tahtoisi olla huono ja valmistella vasemalla kädellä!? Mutta ei ole vaihtoehtoja?)
Luokan käyttö -kappale on sensijaan mukavan leppoisa. Hauska näyttää, miten joustavasti luokalla saa toteutettuja tuttuja juttuja. Toisaalta pitäisi jaksaa painottaa, ettei pidä tyytyä vanhoihin tapoihin, kun uusia ja hienompiakin löytyy.
En oikein ymmärrä, mihin viikko taas meni, kun vasta tänään lauantaina pääsin kirjoittamaan periytymisestä. Koko ajan oli kiire, mutta miksi? Luultavasti kaikkea pientä sinne sun tänne ...
Periytymisessäkin on aika paljon asiaa. En vieläkään oikein tiedä, miten rajaisin? Kaikkea ei taaskaan voi kertoa. Ja taas se sama havainto, että aikaa menee joka luvun käsittelyyn paljon enemmän kuin olettaa...
Lohdullista on, että nyt on kuusi luentoa takana ja kuusi edessä! Eiköhän aika kuitenkin riitä järkevän kokonaisuuden aikaansaamiseen. Saas näkee, mikä niitten sovelmien osuus tulee olemaan?
Lohdullista myös siksi, että onpa selvitty ainakin tänne asti. Taitaa kyllä olla niin, että koko matka on ylämäkeä ja pinnistellä pitää koko ajan. Monikohan muuten ihan oikeasti ymmärtää sen työmäärän, mitä kurssi teettää: itselle uusi asia itselle uudella esitystekniikalla, joka viikoksi uudet tehtävät ja vanhoihin mallikkaat ratkaisut. Ja kun kaikki jo alkavat varmaan tottua siihen, että kama on aina www:ssä semmoisenaan ja parilla tavalla pakattuna ja myös paperisena kansiossa, ja että uudet laskarit ilmestyvät viimeistään keskiviikkona, ja että perjantaina verkkoon ilmestyvät esimerkkiratkaisut, ... Mitä jos sitten jotain ei joskus ilmestykään, ...
Taidanpa pitää seuraavan kurssin ihan vain puhuen, ei www:tä, ei kalvoja, ei liitutaulua, ... vain pelkkää puhetta: "... ja sitten tästä luokan rakenteesta - sanon hitaasti jotta ehditte kirjoittaa - niin se luokkahan voi sisältää seuraavia osia: kenttiä eli muuttujia, jotka voivat olla joko luokkakohtaisia tai sitten ilmentymäkohtaisia ... mitä, ..., ei, en ehdi toistaa, pitää ehtä staattiseen alustuslohkoon, ..." Silloin kolme ranskalaista viivaakin liitutaululla olisi kova juttu.
Tänään sain kirjoitettua aika hyvää kamaa periytymisestä. Kiireestä huolimatta oli kiva, ettei mikään muu ihan välittömästi nyt ollut painamassa päälle. Pelkän kurssin aiheuttama paine ei edes ole ollenkaan vastenmielistä. Haastavaa kyllä.
On tässä kurssin edetessä tullut mieleen, että muutamia asioita esittäisin vähän eri tavoin kuin on tullut tehtyä: ehkä se toinenkin sipulinkuorintakierros olisi ollut paikallaan, ehkä lukuoperaatioita ja try-catchia olisi jo voinut esitellä? Nyt kulutettiin aika paljon aikaa algoritmikaluston käsittelyyn ja aika paljon menee luokkiin ja kaikkeen niihin liittyvään. No, enpä lausu lopullista arviota ennenkuin kokonaisuus alkaa erottua! Paljon riippuu siitä, saanko kurssin jälkipuoliskosta kauniin paketin.
Laitoin muuten eilen Minna Majurin suunnitteleman hienon Java-logon
kurssin kantasivulle ja pääsisällysluetteloon:
Tänään ymmärsin, että kurssista saattaa kuitenkin loppujen lopuksi tulla järkevän muotoinen: alussa kuorittiin sipulin ohut uloin kerros ja sitten aika rajusti pilkottiin sipuli kahteen osaan: algoritmien laadintaan ja luokkakamaan, jotka puolestaan silputtiin aika pieniksi. En vielä viikko sitten nähnyt, että me aletaan olla perillä! (Tai ainakin aika lähellä periä. :-) ... Jahka saadaan pakkaukset, näkyvyys ja rajapintaluokan alkeet hoidettua, jatko onkin muutamien valmiiden kalujen käyttöä. Ja se hieno pointti on, että opiskelijat luultavasti ymmärtävät, mitä näkevät, kun katsotaan valmiiden välineiden rajapintoja: publicit, staticit ja finalit yms. ovat kalustoa, jolla itsekin on ohjelmoitu!
Tänään kun iltaseitsemältä palasin laitokselle tekemään päivän toista työpäivää, juttelin espresson tippumista odotellessani laitoksen kavereille, että nyt me kurssilla aletaan päästä siihen, mistä kirjakauppojen hyllymetrejä täyttävät kirjat aloittavat: valmiin kaluston käyttöön. Mutta ero on siinä, että meidän jengi luultavasti jokseenkin ymmärtää, mitä valmiskamaa käyttäessään tekee. Ei pelkästään kirjoteta "niinkuin kirjassa" ja toivota, että omalle kuvaruudulle piirtyisi samanlainen kuva kuin kirjassa ...
Tulipa taas tässä päivänä muutamana taas puhetta siitä, että aivan sattumalta kurssin opettajajengiin on sattunut aika paljon (4/8!!) italiankielen ystäviä: E' certo, che si puo' trovare una piccola "mafia" italiano nello corso nostro. Beh, ..., ma e' uno "corso nostro", non e' "cosa nostra"...
Eilen sitten laitoksen johtoryhmä päätti uudesta perusopetuksen ohjelmointikielestä. Kerronko mitä? :-)
Aikaa meni taas siihen, että sai tämän viikon laskareiden ratkaisut johonkin kuntoon - ensimmäinen ryhmäni tiistaina joutuu aina kärsimään alustavista versioista. Paljon aikaa meni uusien tehtävien laatimiseen, niistä lisää puhetta pian. Ja sitten on näitä hallinnollisia tehtäviä: ensi vuoden tutkintovaatimuksista ja mallilukujärjestyksestä piti saada aikaan versiot laitoksen esimiehen mietittäväksi ennen viikonloppua. Kuulostaa simppeliltä, mutta kyllä tuokin aikaa pahuksesti vain vie.
Ensi viikon harjoituksiin tuli pari aika suoraviivaista tehtävää, yksi hyvin käytännöllinen ja toinen aika teoreettinen. Mutta suuri uutuus oli kirjoitelman laatiminen. Vaihtoehtoja on kaksi: aloitteleville opiskelijoille referaatti artikkelista ja pitkällä oleville tiedonhakuakin edellyttävä essee. Tämä oli keino, jolla yritän ylittää sen vaikeuden, josta 11.3. valitin: raskaasta kalustosta on mahdollista tehdä vain leikkikaluesimerkkejä. Siispä kirjoitetaan pieni juttu siitä, mihin tuota raskasta kalustoa oikeasti tarvitaan. Luulen että ne, jotka tässä jaksavat nähdä vaivaa, oppivat jotain sellaista, josta jää käteen jotakin vähän pidemmälläkin tähtäyksellä.
Tuo referaatti/essee tuntuu onnistuneen aika hyvin. Kaikki eivät toki ole halunneet sitä tehdä, mutta ne, jotka tekivät, vaikuttavat ihan tyytyväisiltä. Ja kun asia on käsitelty laskareissa, siitä voi tietenkin laatia myös koekysymyksiä...
Hauska yhteensattuma oli, että Informaatiojärjestelmien kurssilla aloitettiin juuri tällä viikolla oliosuunnittelusta puhuminen.
Aika jännä juttu, että nyt, monen viikon tiiviin ja aika vaativan opiskelun jälkeen, olemme viimein lähestymässa asioita, joista kirjakaupan hyllyjä täyttävät Java-oppikirjat aloittavat (valmiin kaluston käyttö). Mutta olemme sikäli onnellisessa asemassa, että nyt ymmärrämme, mitä teemme ohjelmoidesamme. Luokat ja oliot, luokkahierarkia, rajapintaluokka, final-luokka, abstrakti luokka, ..., tarkoittavat jotakin! Luulen että kurssin suorittavat opiskelijat ovat aika valmiita käyttämään kieltä ja sen välineitä jo aika viisaasti.
Tällä viikolla itselle loksahti jotakin tärkeää ymmärrystä paikalleen; jokin kielen iso ajatus, voimakkaiden välineiden tehtävä ja asema, löysivät paikan ymmärryksessä.
Uutta materiaalia tehdessä tuli huomattua, että poikkeusten käsittelyn alkeet olisi vallan mainiosti voinut opettaa jo kurssin alkupuolella. Osoittautui tuo perusajatus hyvin suoraviivaiseksi. Menisi luultavasti himaan jo peruskurssin opiskelijoille. We'll see.
Ärsyttävää lukea noita aikaisempia juttujani: samat fix ideé't seuraavat toisiaan. Menee nyt kai vähän samaan piikkiin, mutta ärsyttävät nämä tekemiseni ja tekemättä jättämiseni muutenkin. Mitä ihmettä esimerkiksi roikun täällä laitoksella, jossa en koskaan perustutkintopapereillani kuitenkaan mitään vakkarivirkaa saa. Tyhmä jätkä taidan olla ... mutta missä ihmeessä muualla sais tehdä yhtä mielekästä atk-duunia? Duunia, jossa saa ja pitää ymmärtää, eikä ole sidottu kenenkään myyntitoiveisiin? Saa sanoa juuri niinkuin oikeaksi tai vääräksi näkee.
Joo, totta lie - totta vie - viikset nimittäin lähti just. Ja kyllä huomenna kaduttaa. Melkeinpä jo. Mutta minkäs enää teet?
Tänään käsittelin luennolla koko 5. luvun. Se util-pakkaus jäi aika vähälle huomiolle. Täytyypä panna laskareihin tehtävä tai pari siitä.
Tänään käsittelemäni tiedoston syötön ja tulostuksen yksi toteutus oli varsinaisen aiheen lisäksi vähintään yhtä tärkeä esimerkkinä siitä, miten Javan valmiiden välineiden sankassa metsässä kuljetaan: Se että ymmärtää luokat ja periytymisen, rajapintaluokat ja abstraktit luokat, olioiden konstruoimisen, luokkametodit ja ilmentymämetodit, ym. on ainakin itselleni ihan välttämätöntä, että edes voin kuvitella ymmärtäväni, mitä oikeastaan olen tekemässä. Luulen että ainakin pitkän päälle kurssin opiskelijatkin (ne jotka vielä ovat jaksaneet pysyä mukana) näkevät pitkän matkamme hyödyn.
Kieleen on otettu mukaan luokkien lohkorakenne, so. luokissa voidaan
määritellä "sisäisiä luokkia", joilla voi olla "sisäisiä luokkia".
Ajatus olisi kaunis, jos kielessä ei olisi perintää ja pakkauksia.
Ajatus on näkyvyydensäätelyn kannalta läheistä sukua vaikkapa Algolin
ja Pascalin aliohjelmalohkorakenteelle.
Mutta ajatelkaapa ("ajattelepa hyvä päiväkirja"), mitä seuraa, kun
luokassa L on sisäinen luokkalohkorakenne kaikkine
näkyvyydensäätelymääreineen ja sitten luokalla L on aliluokkia
vastaavanlaisine sisäisine luokkalohkorakenteineen! Tässä pannaan
suloiseen(?) sekamelskaan lohkorakenteen näkyvyydensäätely
ja luokkaperinnän tuottama näkyvyydensäätely! Tällainen kompleksisuuden
lisääminen ei tarkoita, että vanhaan kompleksisuuteen ynnättäisiin
uusi kompleksisuus. Se tarkoittaa, että nuo kompleksisuudet kerrotaan
keskenään! Tilanteita joissa nimen merkitystä etsitään tulee
todella paljon lisää! Ja toinen suuri sekaannusta aiheuttava seuraus
on, että ilmentymän käsite alkaa hajota: 'this' ei olekaan enää
yksi vaan eräänlainen hierarkia.
Uusi Java (1.1) on mielestäni ehdottomasti huonompi ohjelmointikieli
kuin 1.02. Toki on helppo löytää esimerkkejä, joissa tuo uusi
laajennus helpottaa ja selkeyttää ohjelmointia, mutta se varsinainen
seuraus on, että jokainen ohjelmoija voi paljon entistä helpommin
valita ohjelmointitavat, joita kukaan muu ei ymmärrä. Nimien
merkityksen piilottamiseen on saatu hyvin, HYVIN monia uusia tapoja.
Näyttää siltä, että Sun on päästänyt Javansa sairastumaan
PL/I-, Ada- ja C++-tautiin: kun kaikki "hieno" otetaan mukaan,
tuloksena ei välttämättä olekaan parempi kieli. Kokonaisuus
voikin olla vähemmän kuin osiensa summa!
Toivottavasti standardointiprosessin päättäjillä on järkeä!
Eikä haittaa vaikka kielen nimi samalla muuttuisi Ahvenanmaaksi.
Saari kuin saari.
Taitaapa tällä viikolla esimerkkiratkaisujen laadinta jäädä
opiskelijoille; vaikkei 10. tehtävissä tosiaankaan kovin paljon
ajateltavaa ole (verrattuna erityisesti edellisiin), niissä on sellaista
perusohjelmointivääntämistä sen verran paljon, ettei taida aika riittää.
Kai täytyy tyytyä siihen, että osaa kertoa, miten hommat hoidettaisiin.
Tässä ehti olla Java-bileetkin. Viime torstaina tuo TKO-älyn
järjestämä spektaakkeli oli. Onnistui hyvin. Väkeä paljon.
Bändi soitti. Ja DJ. Valot välkkyivät ja kansa velloi.
Ja meillä oli pariinkin kertaan kuvaelma aiheesta "Jawat kaappaavat
Aartuun" (kts. yllä). Suosio oli varmaankin suuri. Ja minulle valmistettu
R2D2-puku oli tosi hieno. Taitaa olla ensimmäinen mittapukuni.
Täytyy liittää tännekin valokuva, jos joskus saadaan. Bileistä
on tulossa juttu johonkin Sunin mainoslehteen. Mahtaa kunnia mennä,
mutta maine senkun kasvaa...
On ollut ehkä ennätyksellisen kiireinen loppukiri - huomenna on
viimeinen luento. Viikolla piti opetella ja kirjoittaa tapahtumien
käsittelemisestä ja innostuin tekemään vähän liiankin hauskoja
sovelmia: Suosikkini on
CatchMe.
Ja tänään siis "nappulaoppia". Huomenna pitäisi vielä ehtiä
kirjoittamaan vähän nappulatapahtumien
käsittelemisestä. Kaikenkaikkiaan koko applettioppi jää kyllä
pakostakin aika katsauksenomaiseksi. Mutta toivottavasti
selviän siitä johtoryhmästä nopeasti, olisi kiva voida
rauhassa keskittyä viimeiseen luentoon.
Oli aika omituinen, puusta pudonnut olo luennon päätyttyä.
Viikkokausia on ollut jatkuva huoli ja kiire seuraavan viikon
luentojen ja harjoitusten laatimisesta. Koko elämä on
liioittelematta pyörinyt lähes pelkästään kurssin ympyröissä.
Olen ennekin havainnut, että luentokurssi on vähän kuin
ihmissuhde tai ehkä kuin matkaromanssi (aika pitkän matkan!):
Alussa on ihmettelyä ja ihastusta, sitten tavallistakin oloa,
mutta myös monia huippuhetkiä. Joskus voi olla hankalaakin,
paljon useammin kuitenkin innostusta. Mutta lopun tulemisen tietää.
Sitä saattaa odottaakin, mutta kun se se sitten tulee, on
mieli aika haikea.
No jaa, taisi mennä turhan runolliseksi. Kirjoitinkohan tuon
äskeisen verkolle enkä itselleni? On siinä jotain perää, mutta
ei tuo analogia taida kuitenkaan ihan toimia. Totta on, että
kaihomieli jää. Juuri tätä meidän jengiä ei enää koskaan ole
olemassa juuri tänä jenginä. Jokin sosiaalinen kokonaisuus on
kertakaikkiaan lakannut olemasta.
Mutta nyt pitäisi osata palata siihen tavalliseen elämään.
(Ei, en sano, että "aliohjelman suoritus on päättynyt
ja pitää palata kutsuneeseen ohjelmaan", en varmasti sano, koska
se nyt jo lattealta kuulostaisi!) (Eikä se edes kuvastasi tunnelmaa
oikein.)
Mutta oikeita kysymyksiä on: Mitäs nyt? Mitähän olinkaan tekemässä
ja minnepäin pyrkimässä ennen kurssia? Mitähän kaikkea olen unohtanut
ja jättänyt hoitamatta?
Otankohan opetuksen vähän liian tosissani? Eihän sillä uraa yliopistolla
luoda. Mutta toisinkaan en halua tehdä, enkä luullakseni edes voi.
Ja mahtaisikohan se nyt niin mukavaa olla vaikka professorina tai
edes vakkarilehtorina. Eivät nuo nyt niin poikkeuksellisen onnellisilta
vaikuta...("happamia sanoi...").
Opiskelijoiden innostus tuossa harjoitustyössä lämmitti sydäntä -
niin kliseiseltä kuin tuollainen ilmaus kuulostaakin.
Ja kun näkee jonkun innostuneena selittävän, millaisten etsintöjen ja
vaiheiden kautta ratkaisu johonkin ohjelmointiongelmaan löytyi,
mieleen tulee vielä "kliseisempi" ajatus: silloin opetus on onnistunut
kun opettaja tekee itsensä tarpeettomaksi. Olisikohan niin ihan
oikeastikin? Pitäisikö sittenkin varoa kyynistämästä kaikkea?
Joka tapauksessa moni on nähnyt paljon enemmän vaivaa kuin "kymmenen
merkityn tehtävän" saaminen olisi vaatinut. Ja kai on uskottava,
että monelle tekeminen sinänsä on ollut motivaation lähteenä.
No, onhan sen itsekin huomannut, että vaatimattomankin ohjelman
tekemisestä saa selvästi mielihyvää: 'tämä on ihan itse tehty'.
Voi ajatella, että ohjelmointi on aikamme käsityötä. Samaan tapaan kuin
hyvin veistetty kirveenvarsi tuotti aikanaan veistäjälleen iloa ja
tyydytystä, itse laaditun ohjelman toimintalogiikka ja 'tuntu käteen'
palkitsevat tekijäänsä.
Tänään työkavereiden kanssa syömään mennessäni hehkutin näitä iloisia
ajatuksia opiskelijoiden motivaatiosta ja paljosta oppimisesta.
Tunnettuun tapaansa kaverit - kriittiset yliopistoihmiset -
ilman innostuksen pilkahdustakaan alkoivat muistutella kurssille
ilmoittautuneiden määrästä (520) ja kyselivät, että moniko näistä nyt
sitten sen harjoitustyön tekee; eihän se ole juuri mitään, jos töitä
tulee kymmeniä, miksei harjotustöitä ole viittäsataa. Ilonpilaajat.
Vaikka kyllähän puheissaan perääkin on. Tosin tuossa 520:ssä oli
varmaan sellaisia, jotka vain varmuuden vuoksi ilmoittautuivat
kurssille. Jo ensimmäisissä harjoituksissa väki oli vähentynyt
kolmeen ja puoleen sataan. Minimi taisi olla 9. laskareissa: tasan 100.
Koska harjoitukset ovat vapaaehtoisia, on hyvin vaikea tietää, moniko
todella on mukana. Näitä sivuja luetaan aika paljon: pääsivua
pyydettiin laitoksen palvelimelta viime viikolla 876 kertaa,
sisällysluetteloa 624 kertaa. Vaikea tietysti tietää, montako
eri lukijaa on ollut. Ja toisaalta jotkut ovat kopioineet materiaalin
pakatun
version (tarjolla ovat tar ja zip) kodinkoneelleen paikalliseksi.
Tästäpä pääsenkin melkein aasinsillatta koeasioihin. Ei ole harmainta
aavistusta, tuleeko ensi maanantain kokeeseen 100 vai 400 opiskelijaa.
Kaikki ovat saaneet ohjeen tulla yliopiston suureen luentosaliin,
jonne saadaan tenttisijoitellen mahtumaan n. 240 opiskelijaa. Valvojat
on varattu myös Metsätalolle ja johonkin Geologian(?) laitoksen saliin
kävelyetäisyydelle pääpaikasta. Saapas näkee, miten sählinki onnistuu.
Valvon itse tuossa suuressa. Onnistuisikohan muuten jokin kapakkareissu
opiskelijoiden kanssa tenttipäivän iltana? Pitäisiköhän tentissä luvata
päivystävänsä (illastavansa?) jossakin julkihuoneessa?
Kokeen
laatiminen vaikutti vielä toissapäivänä vaikealta, mutta
eilen illalla inspiraatio iski ja ideoita syntyi. Ja tänään puolille
päivin sain tehtyä aika jännät koekysymykset. Ruotsintajakin
ehti jo tänään kääntää tekstin. Pitäisi vielä itse kääntää
englanniksi. (Oikeastaan olisi pitänyt ruotsintaakin itse, luulen että
ainakin melkein osaisin, ja siitä saisi hyvän mielen, mutta kun
laitoksella on asian hoitamiseen virallinenkin systeemi ja niin
menee vaivattomammin ja laatu on taatumpi... (sivumennen: ruotsinkieli
on oleellinen osa suomalaista kulttuuria))
Eilen illalla lähetin kurssin uutisryhmään seuraavanlaisia
koevihjeitä:
"... painopiste kokeessa on nimenomaan Javan oliovälineiden
ymmärtämisessä, ei niinkään nokkelassa ohjelmoinnissa",
"Keksin muuten myös hauskan(?) välimuodon esseen ja ohjelmoinnin
välistä ... (you'll see ...)",
"Niistä perusasioista, joista ei tule soveltamistehtävää, tulee
vähintään "selitä lyhyesti" -essee. Mitä ovat perusasiat, on
sitten taas itse ymmärrettävä",
"Yksi harjoitustehtävä tulee (näillä näkymin!) sellaisenaan
koetehtäväksi" (tuli).
Luulen että koe on aika hyvä, mutta en ollenkaan osaa arvioida,
tuoko se minulle ystäviä vai vihollisia ...
Huomisillaksi olen kutsunut kurssin opettajat kylään. Tiedossa
on pastaa (omaani, parasta Suomessa syömääni) ja mm. Java-kotiviiniä.
"Kuten otsikko sanoo, saalis oli 222.
Se tuntuu vähäiseltä verratuna ilmoittautuneiden määrään 520,
mutta ihan jo järkevältä verrattuna ensimmäisissä harjoituksissa
käyneisiin 350.
Harjoitusaktiivisuus on muuten ollut seuraavanlaista (harjoitustyö,
11. laskarikerta puuttuu vielä):
(Sittemmin tuo määrä osoittautui muutamaa pienemmäksi, en ollut
ensilaskussa huomannut muutamaa sisäkkäinpanematonta
vastauspaperinippua.)
Mielestäni
koe
oli myös aika onnnistunut - mittasi tarkoitettuja asioita - ja
sai opiskelijoiltakin kiitosta uutisryhmässä:
Jari Juslin: Onnittelut muuten Arto hyvin laaditusta
kokeesta. Koe ainakin tuntui mittaavan monipuolisesti Javan eri puolia,
vaikkakaan "essee"-tehtävät eivät oikein ole makuuni (käsi tulee kipeäksi).
[tosin Jarin mielestä myös: "Ohjelmointitehtävät oli ehkä liian
helppoja, ..."]
Petteri Pesonen: Koe oli loistava!! Ei turhaa
koodaamista/kirjoittamista, vaan testattiin osaamista näppärillä
tehtävillä. Kiitokset.
Jyrki O Saarinen: ...testattiin juuri sitä mitä pitikin.
Tosin pyyhkeitäkin tuli (työkaverilta, ei mukana kurssilla):
Auvo Häkkinen: ...222 kuuluu paremminkin luokkaan melko
tavanomainen määrä. Appron pakollisilla kursseilla on välikokeissa
huomattavasti enemmän porukkaa. Myös Cumun pakollisissa kursseissa (Rio
ja Tira) kokeeseen osallistujamäärät hyppäävät reilusti yli 200:n.
Sen sijaan osallistujakato ilmoittautuneista kokeisiin tulleisiin ei ole
koskaan ollut noin huippuluokkaa.
Koe
oli aika helppo niille, jotka osasivat oleelliset asiat.
Enkä osaa oikein olla huolissani siitä, että se näyttää menneen
aika hyvin. Vilpittömästi pyrin testaamaan mielestäni
oleellisia asioita. Jos ne oli opittu hyvin, emme me kurssin opettajat
voi olla muuta kuin tyytyväisiä... Ja me olimme ymmärtääkseni myöskin
aivan poikkeuksellisen motivoituneita ja teimme aika lailla töitä!
Ja tällä appron kurssilla oli aika paljon cumun ja jopa lavin
opiskelijoita. Tietoisesti siitä huolimatta pyrin pitämään kurssin
mahdollisena myös viime syksynä aloittaneille appron opiskelijoille.
Katsotaan nyt, millaisiksi tulokset lopulta muodostuvat...
Vielä siis ainakin yksi täydennys tähän aika erikoiseen juttuun on
odotettavissa...Kai?
Tilastot ovat ihan mielenkiintoisia:
Koe
oli aika lyhyt kirjoittaa, eikä se ollut vaikea niille,
jotka asiat osasivat. Mutta tässä on mielestäni jutun clue:
oleellisen osaavia oli paljon niiden joukossa, jotka loppuun asti
jaksoivat.
Eikä tätä tietenkään voi mahdollisille epäilijöille mitenkään
todistaa - epäilijöitä ehti jo löytyä kahvihuoneen kriittisistä
työkavereista, ovat aika kärkkäitä lausumaan mielipiteitä...:-)
- mutta tällä kertaa minulla on harvinaisen vahva usko siihen,
että kurssilla menestyneet ovat todella oppineet oleelliset asiat.
Jotenkin tämän kurssin kohdalla on poikkeuksellisen paljon semmoinen
olo, että me - kurssin opettajat ja ehdottomasti myös
opiskelijat - teimme tästä kurssista niin hyvän kuin siitä tuli.
Enkä ole ollenkaan varma, haluanko enää koskaan
(luullaksesi en) käyttää näin valtavasti aikaa ja
jotakin, jota voisi tunteeksikin kutsua, jonkin "atk-kurssin" tekemiseen.
Kukaan tuskin voi koskaan ihan kunnolla ymmärtää, miten tämmöinen
kurssi syntyy. En minä ainakaan.
LOPPU(?)
Vivete felice!
350, 287, 245, 241, 205, 188, 182, 116, 100, 134
Tuo 222 on 63% 350:stä, eikä se nyt ole kovin kohtuutonta..."
Ilmoittautuneita: 533
Osallistuneita: 395, joista kokeissa 259
Hylättyjä: 161
Hyväksyttyjä: 234, (59% osallistuneista, 90% kokeissa olleista)
Arvosanajakautuma:
1-: 11 ***********
1 : 17 *****************
1+: 19 *******************
2-: 33 *********************************
2 : 33 *********************************
2+: 34 **********************************
3-: 27 ***************************
3 : 60 ************************************************************
Luulen kyseen olevan siitä, että karsiutuminen tapahtui jo kurssin
kestäessä - loppuun saakka jaksaneet olivat hyvin motivoituneita -
ja toisaalta siitä, että harvalla appron kurssilla on ollut näin
paljon cumun ja lavin opiskelijoita.
Arto Wikla