(toiminnot)

hwechtla-tl: Nettipäiväkirja 30.12.2013

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


Minun on pitänyt jonkin aikaa kertoa, miten lasten tietokoneoppitunnit etenevät. Tällä kertaa olemme työskennelleet aika paljon Logo-kielellä (minkä ehkä olette voineet arvata muista päiväkirjamerkinnöistä).

Minun on ollut vaikea keksiä, mitä kirjoituttaisin lapsilla, jotta se olisi motivoivaa. Viisivuotias tietysti kirjoittaa mielellään jotain lyhyttä, mutta aina hänellä ei ole mitään erityisen mieluista kirjoitettavaa. Kymmen- ja yksitoistavuotiaat haluavat kirjoittaa tarinoita, mutta se ei motivoi kovin paljon eikä esittele vi:n komentoja paljonkaan.

Olen ajatellut tähän ratkaisuksi sitä, että lapset oppisivat muokkaamaan ohjelmiaan ja asetustiedostoja. Jo tähän mennessä isommat lapset ovat olleet parhaiten motivoituneita tekstin muokkauksesta, kun kyseessä on ollut Minecraftin server.properties-tiedosto.

Logo-kielen käytössä on se miellyttävä puoli, että siinä pystyy sanomaan lapsille vähän väliä "kokeile, kokeile". Lapsi saattaa uppoutua pitkiksikin ajoiksi tekemään omia komentoyhdistelmiään. Tähän mennessä samaa on tapahtunut Unixissa lähinnä silloin, kun lapset ovat kokeilleet erilaisia puhuttavia asioita ja eri korkuisia ääniä. Logossa sitä tapahtuu usein.

Logossa opetetaan esim. tässä järjestyksessä:

  1. kokeile "et", "et 100", "oi 100" jne
  2. "mitä haluaisit piirtää"?
  3. jos se on jotain tosi monimutkaista, tehdään ensin jokin osa
  4. kokeillaan tehdä se (haluttu piirros tai sen osa) kirjoittamalla komento kerrallaan
  5. "muutetaanpas tämä komennoksi" -> to mun_kuvio ... end
  6. kokeillaan uutta komentoa pari kertaa
  7. jos tarkoitus tehdä jokin suurempi kokonaisuus, jatketaan kohdasta 3 uuden komennon avulla
  8. kokeile "toista 40 [mun_komento]"
  9. -> lapsilla on hauskaa
  10. Toista kohdasta 2

Myöhemmin opetetaan muuttujat:

  1. otetaan jokin valmis ohjelma, esim. "neliö", "ympyrä"
  2. muutetaan siitä jokin numeroliteraali muuttujaksi (joka annetaan argumenttina)
  3. kokeillaan uutta ohjelmaa eri parametreilla...
  4. ... tai vaikka: foreach iseq 20 40 [mun_komento ? oi 30]

Esimerkki askeleesta 2:

Ennen:                          Jälkeen:

to nelio                        to nelio :koko
  toista 4 [et 50 oi 90]          toista 4 [et :koko oi 90]
end                             end

Vielä myöhemmin selitetään mm. kuinka paljon helpompaa on käyttää komentoja, jotka palauttavat kilpikonnan samaan paikkaan ja asentoon kuin se oli lähdettäessä. Muitakin sopimuksia voi kokeilla, esim. "toimii kuin et :x" eli saa mennä muutakin kautta kunhan lopuksi päätyy eteenpäin :x askelta.

Rekursio on hyvä aloittaa äärettömistä rekursioista.


Mitä siis on nyt tehty? Viisivuotias halusi heti ensimmäiseksi tehdä sydämen. "Ok", sanoin minä, "mutta sydämeen tarvitaan kaarta, ja kaaren osaa tehdä, jos osaa tehdä ympyrän, ja ympyrän osaa tehdä, jos osaa tehdä monikulmion, ja monikulmion osaa tehdä, jos osaa toistaa, niin että opetellaan tekemään ensin neliö toiston avulla."

Ja niin tätä polkua alettiin tehdä. Neliö toiston avulla meni noiden aiempien askelten kautta. Jotta lapsi osasi itse tehdä komennot neliön luomiseen, panin hänet kävelemään saman polun. En kokeiluttanut, mikä on oikea astekulma nurkkiin, vaan kerroin sen suoraan. Ensin tehtiin erillisillä komennoilla, vasta sitten muutettiin toistoksi. Ei ole hyvä, jos lapset joutuvat tekemään tällaisia suunnitelmia päässään; on parempi nähdä, että siinä on samat komennot 4 kertaa, ja vasta sitten muuttaa se muotoon "toista 4 [et 50 oi 50]".

Toistoa tarvitaan ympyrään ja kaareen, koska niissä pitää mennä eteenpäin ja kääntyä hyvin monta kertaa peräkkäin.

Mutta, loppujen lopuksi, saimme aikaiseksi tämän (ensin kokeilemalla, sitten määrittämällä):

to py
toista 180 [et 1 oi 1]
end

En ole ihan varma, tajusiko viisivuotias, miksi tuo ohjelma piirtää puoliympyrän. Sydämen tekemisessä selitin enkä jättänyt kokeilun varaan (mutta lapsi toki kirjoitti itse). Ensin kokeillen, sitten määrittäen.

to sydän

va 45
et 120
py
va 90
py
et 120
end

apila.png

Nyt päästiin kohtaan 8. Tämä poiki vielä yhden ohjelman, "apila":

to apila
sydän
sydän
sydän
oi 30
väri vihreä
ta 200
end

So there, tämä on viisivuotiaan saavutus.


Kymmenvuotias (joka on muuten ehtinyt tehdä jo aika liudan Scratch-pelejä, ks. http://scratch.mit.edu/users/cranio/) meni aika samaa reittiä. Ensimmäinen projekti oli Poké-pallo. Toistoa tarvittiin tähänkin, joten sitä testattiin "toista 10 [et 50 oi 70]". Tehtiin myös yhdestä kokeilusta tällainen:

to por
toista 10 [et 10 va 90 et 10 oi 90]
end

Tämä oli oikeastaan opetuksen vaihetta 1. Sitten, taas, puoliympyrä (sillä Poké-pallo on pallo):

to puoli
toista 180 [va 1 et 1]
end

Puoliympyrästä pienempi versio, koska Poké-pallon keskellä on pienempi ympyrä:

to pieni_puoli
 toista 180 [va 1 et 1/6]
end

Sitten alettiin tehdä varsinaista ohjelmaa, tietenkin ensin kokeillen. Kun mietitään "vyön" pituutta, tarvitaan yhtälönratkaisua, d = pii * 2 * r joten r = 360 / 2 / 3.14159 (ja matka suuren pallon kehältä pienen kehälle tästä 5/6). Siis paljon laskentaa, jossa autoin, ja lopuksi:

to poke_ball
toista 2 [puoli]
va 90
et 47.74
oi 90
pieni_puoli
oi 90
et 47.74
ta 47.74
va 90
pieni_puoli
end


Kymmenvuotiaalle halusin motivoida aliohjelmia lisää. Ensin tällaiset "piirtoapuohjelmat", jotka määrittelimme yhdessä:

to e
et 10
end
to o
oi 15
end
to t
ta 10
end
to v
va 15
end

Vähän aikaa piirtelyä näillä. Sitten piti esitellä uusi käsky, jolla pystyy lukemaan näppäimistöä merkki kerrallaan.

? rc
<kirjoitetaan a>
You don't say what to do with a

Mitä luetulla merkillä voisi tehdä? Sen voi piirtää, "pr rc". Sen voi myös suorittaa, "run rc". Whazam! Kokeilimme o-kirjainta, ja kyllä, kilpikonna kääntyi oikealle. Sitten "toista 100 [run rc]" ja ei kun piirtelemään.

uts_lato.png

Mutta minulla oli tilaisuus opettaa, miten tehdään äärettömiä toistoja. Siispä näin:

to pissa
run rc
pissa
end

(Nimen piti olla "piirra", mutta hän typosi sen muotoon "pirra" ja halusi "korjata" sen muotoon "pissa".) Sanelin ohjelman lapselle, mutta hän väitti ymmärtävänsä, miksi se toimii. Piirtosessiosta oli tuloksena kaikenlaista hienoa.


Halusin antaa lapsille mahdollisuuden käyttää värejä. Logossa on "setpencolor", mutta se ottaa vastaan numeroita, enkä halua tutustuttaa lapsia värien sekoittelemiseen ihan vielä. Sen sijaan tein tällaiset värinsekoitusprimitiivit. Voi sanoa vaikkapa "väri punainen" mutta myös "väri tumma lime" tai "väri vaalea sekoitus sininen tumma vihreä". En ole vielä esitellyt tätä kunnolla lapsille, mutta se joutaa odottamaan ensi kertaan.

http://dy.fi/r0n

That's all folks!


kommentoi (viimeksi muutettu 09.02.2014 11:44)