perjantai 29. elokuuta 2014

Koodauksen ABC: 2. oppitunti

Toisella tunnilla jatkoimme kuvien piirtelyä. Kertasimme aluksi miten niitä kuvioita oikein tehtiinkään ja sitten kävin läpi muutaman uuden kuvien käsittelyä helpottavan funktion: rotate, flip-vertical, flip-horizontal, scale ja  overlay/align. Sitten opetin miten define toimii ja miten sen avulla saadaan jaettua koodia helpommin luettaviin paloihin. Vinkkasin myös, että definellä olisi hyvä määritellä kaikki numerovakiot (kuten SÄDE), ettei tule käyttäneeksi "maagisia numeroita".

Tämän jälkeen oppilaat saivat tehtäväksi koodata pacman - hahmot, jotka katsovat oikealle, vasemmalle, ylös ja alas. Ja toden totta sellaiset saimme aikaan!! Osalla pacmanejä oli jopa hienot silmät!

2. tunnin koodaushaasteet
Huomasin myös, että vasta nyt kun otimme  määrittelyt eli define:t käyttöön, oppilaille avautui DrRacketin  definitions area:n ja interactions area:n ero. Määrittelyt kirjoitetaan yläikkunaan ja painetaan "run". Nyt koodia voi testata kirjoittamalla määrittelyssä annettu nimi alempaan ikkunaan ja painamalla <enter>.
DrRacketin ylempi (definitions area) ja alempi (interactions area) ikkuna.
Tunnin jälkeen tajusin, että olen pikkuhiljaa löytämässä sen ohjelmoinnin opettamisen "punaisen langan". Ensinnäkin on erittäin tärkeää, että oppilas ymmärtää jokaisen kirjoittamansa koodirivin merkityksen. Kukaan ei opi koodaamaan kopioimalla valmiita esimerkkejä. Oppitunnit ovat rakentuneet tähän asti niin, että edellisen tunnin asia kerrataan, sitten opetan jonkin uuden käsitteen ja kokeilemme sen toimintaa yhdessä ja sitten heitän oppilaille koodaushaasteen, jonka he ratkaisevat itse käyttämällä sitä tietoa mitä heillä on. Näin jokaisen oppilaan koodi on erilainen, ja lopputulos muistuttaa enemmän tai vähemmän haasteen tehtävänantoa. Nyt ryhmäni oppilailla on jokaisella hieman eri väriset, eri kokoiset ja eri nimiset pacmanit. Toiset on käännetty pelkkällä rotate funktiolla, toiset flip-vertical:lla ja flip-horizontal:lla. Yksi oppilas halusi hieman eksoottisemman värin, joten hänellä on koodissaan käytössä myös make-color. Ensiviikolla yritämme saada pacmanit liikkumaan ja sen jälkeen tottelemaan näppäinkomentoja. Hauskinta tässä on se, että en ole itsekään koskaan koodannut pacman-peliä, joten tällä hetkellä en vielä tiedä mikä on lopputulos.

Tässä rautalankaohjeet kakkosoppitunnin asioista:









Lopputunnista nopeimmat kokeilivat myös asetella pacmania scene:lle. Tässä tarvittiinkin juuri scale - funktiota. Tosin yksi oppilas tajusi ihan itse, että sehän onnistuu myös muuttamalla SÄDE-vakion arvoa. Jotain on siis mennyt perille.
Liikutelta hahmo sijoitetaan "scenelle". Tälle annoimme definellä nimen KENTTÄ.

Pacman aseteltiin kentälle "place-image"-funktiolla.

tiistai 19. elokuuta 2014

Koodauksen ABC: 1. oppitunti

Koodauksen ABC - kurssi on nyt saatu käytiin. Kurssille ilmoittautui 15 oppilasta, joista 4 heitti hanskat tiskiin jo ensimmäisen kaksoistunnin jälkeen (vaihtoivat koodauksen toiseen valinnaiseen). Tämä kertoo, joko siitä että koodaaminen ei sovi kaikille tai sitten näillä oppilailla ei ollut hajuakaan siitä mitä koodaaminen edes on. Ja tietysti on myös mahdollista, että syy on opettajassa: olen vain erityisen huono ja tylsä opettaja (huokaus).

Koodauksen ABC:llä ei ole kovin tarkkaa kurssisuunnitelmaa. Tällä hetkellä menen viikko kerrallaan, koska en voi tietää miten asia uppoaa oppilaisiin. Lähdimme liikkeelle piirtotyökaluista ja DrRacketiin tutustumisesta oheisen 1. Harjoituksen avulla.

1. Harjoitus (lataa ohje tästä)

Osa oppilaista osasi hyvinkin itsenäisesti lukea ohjeita, ja olin positiivisesti yllättynyt kuinka moni oppilaista sai pienen auttamisen jälkeen Suomen lipun valmiiksi. Painotin tunnilla sitä, että koodaaminen on aluksi todella hankalaa mutta kun juonesta pääsee selville se on todella antoisaa. Hanskat tiskiin heittäneille ehti paljastua vain se vaikeus: circle pitää kirjoittaa circle (ei cricle tai cirle) ja sulkumerkit on oltava oikeissa kohdissa, muuten tulee virheilmoituksia.

Ensimmäisen tunnin koodaushaasteet
Huomasin heti ensimmäisellä tunnilla käyttäväni paljon oppilaille uutta sanastoa. Jotta saimme piirrettyä ympyröitä, suorakulmioita, kolmioita ja yhdistettyjä kuvioita, jouduin ottamaan puheeksi kirjasto:n, koska käytimme 2htdp/image:a. Että saimme ensimmäisen kuvion piirrettyä, oli käytettävä jo sanaa funktio ja parametrit. Ja vaikka en ollut ajatellut edes sanoa sanaa tietotyyppi niin sekin tuli tunnilla mainittua kun kävimme läpi sitä miksi osa parametreistä oli lainausmerkkien sisällä (merkkijono eli string), ja osa taas ei (numero). Ja ehkä siinä vaiheessa kun sanoin, että circle - funktio palauttaa tietotyyppiä, joka on kuva, olisi jo pitänyt tajuta lopettaa. No, tieto lisää tuskaa.

Tunnin jälkeen tuli sellainen fiilis, että kaikki oppilaat eivät kuitenkaan jaksa lukea pitkää tekstiä. Heille pitäisi olla lyhyemmät ohjeet. Siksi tein seuraavaa tuntia varten nämä rautalankaohjeet piirtotyökalujen käyttöön (tulostin nämä myös luokan seinälle):