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ä:
Myöhemmin opetetaan muuttujat:
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
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.
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.
That's all folks!