Laitoksen blogissa käsitellään ajankohtaisia tietojenkäsittelytiedettä tai laitosta koskevia asioita. Blogia toimittaa provokatorisistakin kirjoituksistaan tunnettu professori Jukka Paakki. Kommentointi ja keskustelu on toivottavaa ja suorastaan pakollista.

International department blog

Summer Trip to Porvoo, 14 August 2015
The CS Blog Task Force
10
1

Perusohjelmointikurssit ja pajatoiminta

Perusohjelmointikurssien tavoite ei oikeasti ole jonkun yksittäisen ohjelmointikielen kieliopin oppiminen ja sen mahdollinen soveltaminen. Kaiken alkuvaiheen opinnoissa tehdyn ohjelmoinnin taakse on piilotettu huomattavasti yleishyödyllistä harjoittelua. Ongelmanratkaisutaidot, kuten ongelmien osiin pilkkominen ja ratkaisun löytäminen osaongelmien summana, abstrakti ajattelu ja järjestelmän erilaisten osien hahmottaminen, sekä matemaattinen ajattelu ja yksittäisten algoritmien ymmärtäminen ja soveltaminen - ovat kaikki tietojenkäsittelytieteilijöille (ja oikeasti muillekin) hyödyllisiä taitoja -- niin laitoksella kuin laitoksen ulkopuolella.

Tietojenkäsittelytieteilijät aloittavat opintonsa usein perusohjelmointikursseilla, joten ohjelmointikursseihin on rakennettu myös itseensä tutustumista. Tavoitteena on mahdollistaa onnistumisen tunteet, ilo, ja itseluottamuksen kasvu kun joku ongelma ratkeaa. Toisaalta, itseen ja omiin turhautumisiin tutustuminen on myös kasvattavaa - kun jotain ratkaisua ei vain löydy tai oman sovelluksen antama tulostus on täysin erilainen kuin mitä tehtävässä toivotaan. Syksyn 2011 perusohjelmointikursseilla on kokeiltu sijaiskärsijänä ja frustraatioiden kohteena "automaattista paja-apinaa", joka on toiminut hyvänä turhautumien vuodatussuuntana. Jokainen tarina tarvitsee pahiksen, ja ohjaajien kanssa on usein ollut hauskaakin taistella palautusautomaattia vastaan: "Kyllä tää mun ohjelma toimii oikein, mutta toi sanoo että se ei toimi!!".

Tietojenkäsittelytieteen laitoksen kursseja tutkiessa törmää usein rakenteeseen, jossa tehtävät (noin 4 - 6 viikkoa kohti) tulee tehdä kotona ennen erillistä harjoitustilaisuutta. Harjoitustilaisuudessa tehtävät käydään läpi, ja ohjaaja selittää vaikeimpia käsitteitä ja ongelmia uudelleen. Harjoituksia saattaa päästä esittämään myös luokan eteen, joka on mainio tilanne oman esiintymistaidon ja ryhmän edessä olemisen kehittämiseen. Valitettavan usein aikaa ei jää oman ratkaisun ja esitettävän ratkaisun vertailuun -- mitä eroa ja mitä yhtäläisyyksiä niissä oli? Oliko se oma ratkaisu oikein vai oliko siinä jotain vikaa? Jos jättää kysymättä, ei vastausta saa tietää kuin vasta joskus myöhemmin -- kun asian oikeasti sisäistää -- jos sisäistää. Tässä hukataan huomattavasti aikaa.

Perusohjelmointikursseilla on keväästä 2010 lähtien pyritty soveltamaan kisällioppimiseen perustuvaa opetusmallia. Kisällioppiminen perustuu mestari-oppipoika -ajatukseen, jossa oppipoika seuraa mestarin tekemistä ja tekee itse perässä. Ideana on se, että mestari -- tai mestarin edistyneemmät oppipojat eli kisällit -- valvovat oppipoikien edistymistä ja neuvovat ongelmatilanteissa kun opiskelijat tekevät työtä pajassa.

Kisällit ovat läsnä jotta heiltä voidaan pyytää apua niin ohjelmointitehtäviin kuin ohjelmointitekniikkaan ja -taitoihin liittyvissä asioissa. Oppipoikien saaman hyödyn lisäksi tämä toimii erinomaisena harjoituksena kisälleille: heidän omat taidot ja tiedot joutuvat tulikokeeseen kun asioita yritetään selittää muille. Kisällit ovat myös oppipoikia, mutta edenneet omissa opinnoissaan jo seuraaviin haasteisiin. Piilotavoitteena -- tavoitteena joka ei ole vielä ihan täysin onnistunut -- kursseilla on myös auttaa opiskelijoita huomaamaan että tekemistä ei kannata jättää viimeiseen päivään. Tällöin henkilökohtaista ohjausta ei käytännössä ehdi juurikaan saamaan, ja interaktiot kisällien kanssa jäävät vähemmälle.

Ehkäpä tähän löytyy ratkaisu joltain lukijalta? Miten tasapainottaa kurssi siten, että opiskelijat tekevät työtä alusta lähtien? Kannattaako palkita opiskelijoita, jotka palauttavat tehtävät ajoissa -- vai toimiiko jo se ajoissa palauttamisen mahdollistama "vapaa aika" palkintona? Kuinka monelle opiskelijalle viikonloppu toimii aikana, jolloin tehtävät tehdään -- kannattaisiko deadlinet olla aina perjantaisin?

Kisällioppimiseen liittyvissä kursseissa on sisäistetty se, että iso osa oppimisesta on myös kertaamista ja ns. lihasmuistin harjoittamista. Harjoitustehtäviä saattaa olla jopa viisi kertaa enemmän kuin normaaleilla kursseilla, mutta harjoitukset on myös pilkottu usein hieman pienempiin osiin. Kokonaistyömäärän muutos riippuu huomattavasti tekijästä. Ideaalitilanteessa harjoitustehtävät ovat selkeämpiä ja niiden ymmärtäminen vie vähemmän aikaa -- jolloin tekemiseen pääsee heti kiinni. Tämä ei valitettavasti aina onnistu, kuten syksyn C-kurssilla on välillä huomattu. Jotkut käyttävät loppujen lopuksi jopa hieman vähemmän aikaa tehtävien tekemiseen kuin aiemmin. Suurin osa käyttää enemmän, koska kertaustehtäviäkin on paljon enemmän. Oppimistulokset ovat kuitenkin kehittyneet huomattavasti -- ainakin ohjelmoinnin harjoitustöitä ohjaavat ohjaajat ovat kiitelleet ohjelmointitaidon kehitystä - varsinkin opiskelijoilla jotka ovat tehneet kaikki tehtävät ohjelmointikursseilla. Käytännössä peruskursseihin laitettu työ maksaa itsensä myöhemmin takaisin, "vähän kuin laittaisi rahaa pankkiin".

Oleellista kisällioppimisessa on se, että mestari neuvoo tämän hetken hyödyllisimmiksi koetut työkalut ja työtavat heti alusta. Kun työkalujen käyttämisen oppii -- hiljalleen -- huomaa käyttävänsä huomattavan vähän aikaa epäoleellisuuksiin kuten puolipisteiden paikallaoloon tai muihin asioihin jotka saattavat rikkoa ohjelman. Toisaalta, alkukantaisten työvälineiden puolesta puhuu yliopistolla usein seurattu ajatusketju ”...jos opiskelija rakentaa kaiken itse, osaa hän myös ratkaista kaiken itse...”

Tämä ajatusketju johtaa helposti yhteen ohjelmistokehitysmaailmassa kulkevaan vitsaukseen: NIH-syndroomaan. Not Invented Here -syndrooma tarkoittaa tilannetta, jossa potilas haluaa käyttää vain itse tekemiään työkaluja ja ohjelmistokirjastoja. Isona osasyynä on se, etteivät mestaritkaan, joita potilaat ovat seuranneet, ole käyttäneet valmiita tai kehittyneitä työkaluja. Tätä voi kärjistäen verrata tilanteeseen, jossa evoluutiota ei juurikaan tapahdu koska jättiläisten olkapäillä ei uskalleta seisoa, tai olkapäille kiipeäminen tuntuu työläältä. Nykyaikaiseen ohjelmistotuotantoon kuitenkin kuuluu vahvasti valmiiden komponenttien uusiokäyttö.

Ohjelmistotuotanto ja ohjelmistojen kehittäminen on ryhmätyötä. Se on yhteisöissä toimimista ja kommunikointia. Oleellisena oppimistehtävänä yliopistossa -- tehtävänä jota ei lue opintotavoitteissa ja mistä emme saa opintopisteitä -- on yhteisöön kasvaminen. Työskentelytaidot ryhmässä ja kommunikointi koodin, kuvien ja puheen kautta siten, että vierustoverisikin ymmärtää on oleellista. Koita joskus kysyä vierustoverilta ymmärtääkö hän mitä ohjelmasi tekee. Jos vastaus on ei, hyvä harjoitus - sekä sinulle että vierustoverillesi - on yrittää selittää ohjelman toimintaa - esimerkiksi piirtämällä ohjelman kulkua paperille. Tätä kautta yleensä löytyy myös parhaat parannusideat omiin ratkaisuihin.

Kuinka monta kertaa olet kysynyt pajassa neuvoja vieressä istuvalta, sen sijaan että odottaisit ohjaajaa apuun? Kuinka usein olet huomannut, että jo pelkkä kysymyksen muotoilu jollekin toiselle ja koodin ääneen lukeminen auttaa vastauksen löytämiseen? Autolla ajaessa puhutaan vauhtisokeudesta -- mikä termi sopisi siihen, ettei kovaa koodatessa huomata pulmia omassa koodissa? Koodisokeus?

Vaikka kommentoida voi anonyymisti, niin toiveena on että oman nimen laittaisi viestin loppuun tai kommentoisi sisäänkirjautuneena, jolloin käyttäjätunnus näkyy viestin alussa.

Lisää kommentti

CAPTCHA
Tämä kysymys esitetään kirjautumattomille käyttäjille, jotta lomakkeen automatisoitu käyttö voitaisiin estää.
6 + 4 =
Ratkaise tämä pieni laskutehtävä ja anna vastaus. Esim. 1+3, anna 4.

Kommentit

Pieni lisäys

Kerrassaan erinomainen selvitys ohjelmointipajasta.

Aivan pieni huomio tekstissä mainitusta "automaattisesta paja-apinasta". Se ei ole tavanomainen tehtävien tarkastusautomaatti, jollaisia on luotu monissa yliopistoissa jo aiemmin. Automaattinen paja-apinan eli Test My Code -palvelun kautta opiskelija ajaa testejä omaan koodiinsa. Opiskelija tavallaan tarkastaa omaa ratkaisuaan tehtävien yhteyteen luotujen testien avulla. Samalla työskentelymalli ohjaa toivottuun testauslähtöiseen ohjelmistokehitykseen.

Test My Code -palvelu luotiin alkujaan kahdessa Ohjelmistotuotantoprojektissa kesällä 2011, mutta mittavan "viimeistelyurakan" on tehnyt Martin Pärtel apunaan Martti Rannanjärvi.

Kysymys

Hyvä juttu: olen täysin valmis tulemaan vakuuttuneeksi siitä, että tässä on tietojenkäsittelytieteen opetuksen tulevaisuus -- ja matematiikan, jne jne.

Ennen kuin vakuutun kuitenkin kysymys. Pajoista puhuttaessa on usein kiinnitetty huomiota resurssikysymykseen: kuinka paljon pajaohjausta tarvitaan per opiskelija ja riittääkö kenties professoritason (kalliiden) opetustuntien vähentyminen korvaamaan kasvaneiden ohjaustuntien kulut?

Jotta voisin vakuuttua, olisi kiinnostavaa nähdä ihan lukuina jotain kokemuksia pajaopetuksen hyötysuhteesta (suoritettuja opintopisteitä vs opetukseen kuluneet resurssit) verrattuna perinteisempään luennot+laskarit -malliin.

Vaikka hyötysuhde olisikin huonompi kuin perinteisemmässä mallissa, voisin edelleen vakuuttua, jos oppimistulokset ovat merkittävästi parempia. Onhan perusteltua törsätä hiukan resursseja, jos oppimistuloksia voidaan entisestään parantaa. Voisin kuvitella että ovat (parempia), mutta tästäkin olisi hauska nähdä mustaa valkoisella (vaikkapa läpipääsyprosentteja, opiskelijapalautteeseen liittyviä lukuja, tms).

Oppimistulosten lisäksi pajoista näyttäisi olevan sekin ilo, että opiskelijat ovat ehkä entistä "yhteisöllisemmin" mukana opiskelussa ja pajoissa käyminen on hauskaa ja motivoivaa. Ei yhtään väheksyttävä juttu sekään.

terveisin,
Teemu Roos

Vastaus?

Oikeutettuja kysymyksiä. Noita kaipaamiasi lukuja on tässä artikkelissa: http://www.cs.helsinki.fi/u/avihavai/sigite49-kurhila.pdf

Läpipääsyprosentti on epäoptimaalinen mittari, vaikka sitäkin on tuossa artikkelissa käytetty. Oppimistulosten mittaaminen (ja vertailu aiempaan) on kuitenkin hankalaa. Hyviä ideoita ja vapaaehtoisia koekaniineita otetaan vastaan!

Nyt joudumme nojaamaan markkereihin: asiaa harjoitellaan enemmän (esim. annettujen tehtävien määrä 30 --> 200) JA harjoitteluun saadaan koko ajan suuntaavaa palautetta (esim. evaluoidut tehtävät koko kurssilla 252 --> 17420).

Re: Vastaus?

Näyttäisi vakuuttavilta nuo oppimistulokset -- esim. läpipääsyprosenttien perusteella. Kopioin tähän viime vuosien läpipääsyprosentteja Ohjelmoinnin peruskurssilla ja jatkokurssilla (?) (taulukko 1) edellä viitatussa artikkelissa:

65.4% 67.3%
53.6% 58.5%
53.0% 59.6%
58.3% 51.7%
56.1% 56.5%
47.7% 50.0%
64.3% 60.3%
70.1% 86.4%
71.3% 77.6%
73.8% 67.1%

Tehtävänä on arvata (katsomatta itse artikkelia), missä kohdassa pajaopetus on otettu käyttöön.

Teemu

Harjoitusten tekemisen ajasta

Palautusajat taitaa saada kaivettua esille sieltä automaagisesta palautusjärjestelmästä - Aallossa kaivettiin noita tietoja vähän esille: http://vastaanotto.wordpress.com/2011/11/12/milloin-tehtavia-tehdaan/, tietenkin tuo ei ole täydellinen mittari, mutta antaa vähän vihjettä siitä, miten siellä asiat toimivat :)

Palautusjärjestelmän tietokannasta

Palautusjärjestelmä tallentaa kaikista palautusyrityksistä palautusajan, lähdekoodin ja tiedon kunkin testitapauksen onnistumisesta. Mitään tilastoja näistä ei tietääkseni ole vielä tehty, mutta olen kuullut kaikenlaisia jänniä ideoita siitä, miten esimerkiksi lähdekoodia voisi automaattisesti analysoida yms.

 

Arto Vihavainen on Linkin koordinaattori, RAGE-tukimusryhmän jäsen ja ohjelmointipajan suurmestari.

  

 

04.02.2013 - 11:08

Nyt kaikki pelaamaan akateemista Bullshit-bingoa!

25.10.2012 - 12:36

Osana syksyn Johdatus tekoälyyn -kurssia järjestettiin kurssin opiskelijoiden kesken shakkiturnaus. Tehtävä oli toteuttaa yksi tärkeimmistä shakkialgoritmin eli "shakkibotin" osista eli heuristinen arviointikriteeri, joka liittää annettuun pelitilanteeseen numeerisen arvion siitä, kumpi pelaaja on niskan päällä. Heuristiikka on tarpeen, koska shakkipelissä ei kaikkia mahdollisia pelejä ehditä käydä läpi niiden suuren määrän takia.

07.09.2012 - 13:15

Kansainvälisiä esikuvia seuraten on Suomeen nyt saatu Julkaisufoorumihankkeen tuloksena tieteellisten julkaisukanavien ensimmäinen laatuluokitus. Yhteensä noin 22 000 tieteellistä julkaisukanavaa (lehdet, kongressisarjat, kirjankustantajat) on luokiteltu kolmeen laatuluokkaan (tasot 1, 2, ja 3) eli perustasoisiin, johtaviin (noin 15 % kaikista) ja korkeimman tason (noin 5 % kaikista) tieteellisiin julkaisukanaviin. Luokitustyö tehtiin 23 tieteenalakohtaisessa arviointipaneelissa Tieteellisten Seurojen Valtuuskunnan organisoimana.

31.05.2012 - 17:11

Tiedekunta laski keväällä tilastoja jatko-opintojen kestosta ja tohtorien iästä. Hyvä uutinen: tietojenkäsittelytieteessä tohtorin tutkintoon kuluva aika on 5.3 vuotta (mediaani), ei siis ihan hirmuisesti enemmän kuin tavoitteena oleva 4 vuoden aika. Huono uutinen: väittelyyn kuluva aika ei ole yrityksistä huolimatta lyhentynyt 12 viime vuoden aikana (ks. kuva). Pienistä lukumääristä johtuvaa vaihtelua on toki ollut, muttei selvää muutossuuntaa.

14.03.2012 - 19:09

Tämä artikkeli on pitkälti oman turhautumiseni purkamista, koska erityisesti viimeisen reilun vuoden aikana opiskelijoiden laiskuus ja viitsimättömyys tuntuvat saavuttaneen aivan uusia huippuja. Vaikka tämä artikkeli onkin vain ihan ikioma mielipiteeni, olen keskusteluissa muiden opettajien kanssa havainnut, että heidän kokemuksensa ovat vahvasti samansuuntaisia.

02.02.2012 - 13:17

Lyhyesti

Stanfordin yliopisto järjesti syksyllä 2011 kolme MOOC-kurssia (massive open online course), joille voi osallistua kuka tahansa. Kurssit käsittelivät tekoälyä, koneoppimista ja tietokantoja. Kahdesta ensinmainitusta luvattiin HY:n tietojenkäsittelytieteen laitoksen opiskelijoille opintopisteitä.

04.10.2011 - 18:12

Perusohjelmointikurssien tavoite ei oikeasti ole jonkun yksittäisen ohjelmointikielen kieliopin oppiminen ja sen mahdollinen soveltaminen. Kaiken alkuvaiheen opinnoissa tehdyn ohjelmoinnin taakse on piilotettu huomattavasti yleishyödyllistä harjoittelua.

25.08.2011 - 16:26
Laajassa ”trendence Graduate Barometer” –kyselyssä selvitetään säännöllisesti eurooppalaisten yliopisto-opiskelijoiden näkemyksiä heidän opinnoistaan sekä heidän tulevalle työuralle asettamiaan odotuksia. Vastikään on julkaistu viimeisimmän, syksyllä 2010 toteutetun selvityksen tulokset. Kyselyyn osallistui yhteensä 310 945 opiskelijaa 24 maasta ja 1077 yliopistosta. Suomesta mukana oli mm. 568 kandidaatti-, maisteri- ja tohtoriopiskelijaa Helsingin yliopistosta. Koska selvityksen kohdealueina ovat taloustieteet, (tieto)tekniikka ja luonnontieteet, olivat Helsingin yliopiston edustajat pääasiassa matematiikan ja tilastotieteen (65,8 %) sekä tietojenkäsittelytieteen (36,2 %) opiskelijoita.
13.06.2011 - 14:41

Ulkomainen kollegani ihmettelee suuresti joitakin laitoksemme käytäntöjä, joita hän ei millään pysty ymmärtämään. Kun hän päätyy toistuvasti tivaamaan käytäntöihin hyviä perusteluja minulta, olen joutunut yllätyksekseni tunnustamaan, että en lopulta osaa selittää, miksi niihin on ajauduttu.

18.05.2011 - 11:50

Kuten saimme 12.5. lukea laitoksen pääuutisista, on Helsingin yliopisto ränkätty maailmanlaajuisesti sijoille 51-100 tietojenkäsittelytieteessä. Onko rakas laitoksemme siis maailman huipulla vai mutasarjassa?

02.05.2011 - 16:32

Teknologiateollisuuden 100-vuotissäätiö on myöntänyt laitoksen RAGE-tutkimusryhmälle kolmeksi vuodeksi rahoitusta ketterän opetuksen kehittämiseen ja tutkimiseen. Mutta mitä on ”ketterä opetus”, ja onko laitoksen opettajilla oikeutusta käyttää ohjelmistokehittäjien pyhää varattua sanaa ”ketterä” omiin tarpeisiinsa?

13.04.2011 - 15:18

Laitosta ei – ainakaan meidän omasta mielestämme – tunneta riittävän hyvin. Suurin syyllinen on tietenkin asiantuntematon valtamedia, joka säännön mukaan unohtaa meidät silloin kun se alan tutkimuksesta tai opetuksesta jotain uutisoi.

Syndicate content