perjantai 11. syyskuuta 2015

Racket iskuryhmä Takahuhdissa

Tänään aloitimme Koodausta kouluun materiaalin testaamisen oikeiden oppilaiden kanssa. Ensimmäinen testiryhmä oli Takahuhdin koulun 8. luokan matematiikkapainotuksen ryhmä.

Aloitimme asentamalla DrRacket:it luokan koneille ohjelmistojakelun kautta (SW center). Luokassa oli 25 konetta, joista 7:ään ei saatu syystä tai toisesta DrRacket:iä joten nämä oppilaat tekivät harjoituksia WeScheme-sivuston kautta. Tunnin jälkeen asennus saatiin toimimaan vielä kahteen koneeseen, lopuissa oli ohjelmistojakelusta johtuva ongelma, joka annettiin Fujitsulle selvitykseen.

1. Oppitunti

Aloitimme tutustumalla työkaluihin kirjoittamalla komentotulkkiin erilaisia juttuja. Aivan ensin, käänsimme DrRacket:in ikkunat vierekkäin (View -> Use Horizontal layout), koska käytössä oli nyt WeScheme:kin ja sen ikkunat ovat vierekkäin (selkeämpää oppilaiden seurata opettajan koneella tapahtuvaa toimintaa). Kasvatin myös opettajan koneen fontin isommaksi, että se näkyi myös luokan taakse (DrRacketin asetusten kautta).

Kerroin oppilaille, että Racket-tulkki on melko älykäs ja että sille voi heittää kokeeksi erilaisia kysymyksiä. Testasimme esim. mitä se vastaa jos sille sanoo:
> 6

Ja totesimme, että sehän vastasi että 6. Kokeilimme antaa sille myös merkkijonon:
> "Tiina"

ja totesimme, että se vastaa taas saman. Sitten joku keksi kirjoittaa, että 
> r u stupid?

Ja sai vastauksesksi:
r : this variable is not defined

Tästä olikin helppo lähteä puhumaan muuttujista, ja kerroin, että DrRacket ei tiedä mitä tuo tarkoittaa ennen kuin kerromme sen sille. Sitten "opetimme" Racket-tulkille uusia sanoja kirjoittamalla define-lausekkeita määrittelyikkunaan:
(define LOL "Lot's of laughs")
(define ;-/ "Not so happy")

Nyt saimmekin tulkilta jo monipuolisempia vastauksia. Tässä vaiheessa oppilaat jo kokeilivat innoissa mitä kaikkea saisivat tulkin vastaamaan :-) Huomasin, että osa tulkeista palautteli balettiin osa jääkiekkoon liittyviä merkkijonoja. Moni yritti antaa muuttujalle moniosaista nimeä ja korjasimme näitä lisäämällä alaviivoja esim.

(define r_u_stupid? "Yes I am")

Sitten selitin, että ohjelmoinnissa muokkaamme tietoa, ja että Racket kielessä operaatiot jotka muokkaavat tietoa ovat nimeltään funktioita. Tutustuimme yksinkertaiseen funktioon nimeltä + ja kävimme sen avulla läpi Racket-kielen syntaksin. Ensin sulkuauki-merkki, sitten funktion nimi, sitten argumentit ja lopuksi sulkukiinni-merkki.

Kokeilimme läpi kaikki peruslaskutoimitukset: + - * /. Näiden jälkeen kokeilimme yhdistää lausekkeita ja selitin että lausekkeet ovat sisäkkäin kuin maatuskanuket. Testasimme lausekkeiden yhdistämistä kirjoittamalla määrittelyikkunaan ensin matemaattisen lausekkeen kommenttiriville. Selitin, että kommenttimerkillä ; merkityn rivin yli hypätään kun koodia suoritetaan.
; (3 + 5) / (4  - 2)

Tämä lauseke muunnettiin Racket-kielelle ja katsottiin sen suoritus läpi stepperillä vaihe-vaiheelta ja huomattiin kuinka evaluointi tapahtuu sisältä ulospäin. Nyt oppilaat saivat keksiä oman laskulausekkeensa ja tutkia sen toimintaa stepperillä. Ne joilla oli WeScheme käytössä tekivät tämän vieruskaverinsa kanssa (WeSchemessä ei ole stepperiä).

Tässä vaiheessa tutustuimme myös virheilmoituksiin, erityisesti siihen miten puuttuva sulku ilmoitetaan ja miten DrRacket näyttää valmiin sulkuparin harmaana. 

2. Oppitunti

Latasimme Koodausta kouluun oppilaan tehtävistä Peruslaskut-tehtävän tiedostot ja oppilaat lähtivät koodaamaan niitä. Homma sujui hyvin, mutta moni unohti laittaa + ja - merkkien sekä lukujen väliin välilyönnin esim.(-2 4), jolloin Racket tulkitsi - merkin luvun etumerkiksi, ei funktion nimeksi ja siitä aiheutui seuraava  virheilmoitus:

Tämä asia kun opittiin katsomaan niin ryhmä koodasi näppärästi tehtäviä eteenpäin. Tehtävien määrä ja taso tuntui sopivalta, ja muutama ehti tehdä ne kaikki tunnin aikana. Lopputunnista tarkastimme vastaukset tykin kautta opettajan materiaalin mallivastauksista ja korjailimme lausekkeita oikeiksi. Oppilaat osasivat matematiikan laskujärjestyssäännöt mutta niiden ohjelmoiminen oikein olikin sitten aivan eri juttu.

3. Oppitunti

Viimeisellä oppitunnilla pääsimmekin sitten kuvien kimppuun. Kuviin tutustuimme avaamalla Koodarin käsikirjasta kohdan 3. Kuvat - 2htdp/image. Selitin, että Racket kielessä ei ole kuvan piirtofunktioita valmiina mutta, että voimme "laajentaa DrRacketin taitoja" ottamalla käyttöön kirjaston. Katsoimme käsikirjasta miten kirjasto otetaan käyttöön  ja kirjoitimme määrittelyikkunaan:

(require 2htdp/image) 

ja painoimme "run". Sitten avasin Käsikirjasta peruskuviot kohdan ja esittelin ensimmäisen piirtofunktion square. Selitin mitä eri argumentit tarkoittavat ja näytin, että käsikirjassa on kaikkiin funktioihin vastaava kuvaus ja esimerkit. Kirjoitimme komentotulkkiin esimerkin mukaan

> (square 50 "solid" "red")

Kehoitin oppilaita tutustumaan loppuajan itsenäisesti käsikirjan avulla eri piirtofunktioihin. Tämä onnistui hyvin, oppilat osasivat Käsikirjan avulla piirtää tähtiä, neljäkkäitä, ellipsejä ja jopa muuttaa tekstiä kuvaksi. Näytin vielä lopputunnista miten käsikirjasta löytää lisää värejä sekä miten tehdään oma väri make-color:in avulla ja tallennetaan se muuttujaan LEMPIVÄRI. Tässä vaiheessa moni laittoi erehdyksessä hipsut LEMPIVÄRI:n ympärille, joten palasimme siihen mikä on "merkkijono" ja mikä on MUUTTUJAN-NIMI.

(define LEMPIVÄRI (make-color 33 220 220))
(define NELIÖ (square 200 "solid" LEMPIVÄRI))

Sitten olikin jo aika tallentaa tuotokset kotihakemistoon. Ne jotka käyttivät WeScheme:ä siirsivät koodin Muistio-ohjelmaan ja tallensivat sen sitä kautta *.rkt tiedostoksi (WeSchemessä tallentaminen ei onnistunut koska Google-tunnukset olivat unohtuneet).

(square 200 "solid" LEMPIVÄRI)
Oppitunnit sujuivat hyvin, oppilaat koodasivat ahkerasti ja kokeilivat juttuja itsenäisesti. Tämä ryhmä kuunteli hyvin opettajan ohjeet ja osasi lukea myös käsikirjaa. Kotihakemistoon tallentaminen, kansion luominen, ja kahden ikkunan avaaminen vierekkäin näytölle olivat osalle oppilaista uusia juttuja.



En ole aikaisemmin vetänyt koodaustunteja näin, mutta hyvin tuntui uppoavan. Tässä lähestymistavassa hyvää oli se, että virheilmoitukset alkoivat heti saada sisältöä, koska olimme puhuneet heti merkkijonoista ja muuttujista. Ja käsikirjan käytön opettelu kuvien avulla tuntui myös  toimivan hyvin (tämä oli ensimmäinen kerta kun käytin käsikirjaa oppitunnilla).

Nyt on taas hyvä fiilis jatkaa materiaalin kehittelyä. Ainakin tällä ryhmällä suunnitelmien mukainen aloitusjakso toimi todella hyvin.

Ei kommentteja:

Lähetä kommentti