Taide, matematiikka, ohjelmoinnillinen ajattelu

Taide tukee matematiikan oppimista, sillä ”kuvalliset esitys- ja työskentelytavat edesauttavat matemaattisten ilmiöiden omaksumista” [1]. Toisaalta matematiikka on antanut välineitä ja ideoita taiteilijoille [2], esimerkkeinä abstrakti taide [3] ja generatiivinen taide [4]. Viimeksi mainittu tarkoittaa taideteosten tuottamista ohjelmoimalla. Taidetta tai ainakin värikkäitä geometrisia kuvioita käytetään harjoitteina myös ohjelmoinnin opetuksessa [5], [6].

Kyseessä on oikeastaan kolmiodraama: taide (erityisesti kuvataide), matematiikka (erityisesti geometria) ja ohjelmointi. Kuvataide käsittelee väriä, muotoa ja kaksiulotteista tilaa. Tekeekö geometrisesta kuviosta taidetta tekijän tarkoitus vai katsojan kokemus? [7] Yksinkertainen kuvio tai useampikaan ei aina ole taidetta, vaikka jo yksikin kuvio yhdistettynä tilaan voi olla taideteos kuten esimerkiksi Kasimir Malevichin ”Musta ympyrä” tai ”Musta neliö” [8].

Mikä on koulumatematiikan asema tässä kolmiodraamassa? Koululaisen tai vanhemmankin oppijan kannalta geometrian kuvioilla ja käsitteillä on oma itseisarvonsa. Ne ovat jo sinänsä oppimisen kohde ja päämäärä. Toiminnallisuuden ja taiteellisen luovuuden yhdistäminen käsitteelliseen oppimiseen voi lisätä motivoitumista ja edistää geometrisen ajattelun kehittymistä. [9]

Entä sitten ohjelmointi? Vanhastaan tärkeiden perustaitojen lukemisen, laskemisen ja kirjoittamisen rinnalle on nousemassa ja jo noussutkin neljänneksi yleissivistykseen kuuluvaksi perustaidoksi ohjelmoinnillinen ajattelu (engl. computational thinking) [10], [11], [12]. Se on käsitteenä suhteellisen uusi, tältä vuosituhannelta [13]. Se on ohjelmointia laajempi taito- ja tietokokonaisuus. Siihen johdattelu voidaan aloittaa jo esiopetuksessa ilman tietokonetta esimerkiksi algoritmiseen ajatteluun johdattelevista sanallisista toimintaohjeista ja ruokaresepteistä.

Monet toiminnalliset ympäristöt sisältävät niin paljon ohjelmoinnillisia elementtejä, että pitkälle voidaan päästä ilman yhdenkään ohjelmointikielen oppimista. ”Yleinen harhakäsitys on, että ohjelmoinnin osaaminen olisi sama asia kuin jonkin ohjelmointikielen osaaminen. Ohjelmointi­taidon perusta on kuitenkin kielistä riippumaton, eräänlainen niksahdus aivoissa.” [14] Useimmiten kyse ei ehkä kuitenkaan ole äkillisestä niksahduksesta, vaan aikaa vievästä uuden ajattelutavan, ohjelmoinnillisen ajattelun, oppimisesta.  

Ohjelmointikielen opettaminen tai käyttäminen ei ehkä olekaan sopivin tapa tutustuttaa koko ikäluokkaa ohjelmoinnilliseen ajatteluun, vaikka onkin sanottu, että se on ”parhaita keinoja harjoittaa ohjelmoinnilliseen ajatteluun kuuluvaa osaamista” [10, s. 10]. Siksi on hyvä pohtia, miten ja kuinka suurelle osalle ikäluokasta ohjelmointia halutaan opettaa yleissivistävässä koulussa ja millaisin tavoittein. Itsenäisenä oppiaineena? Kaikille vai valinnaisena? Millaisissa ohjelmointiympäristöissä? Jos ohjelmoinnillisen ajattelun kehittäminen on keskeinen päämäärä, niin voitaisiinko sitä tukea ainakin aluksi paremmin osana useiden oppiaineiden opetusta nykyisten opetussuunnitelman perusteiden hengessä koko ikäluokan osalta?

Käsitteistä kuvioihin

Matematiikan opetukseen sopiva väline ohjelmoinnilliseen ajatteluun johdattelemiseen voisi olla Geogebra. Oppimisen aloituskynnystä ohjelmointikieliin verrattuna madaltaa se, että osa käsitteistä on ohjelmoitu valmiiksi grafiikkatoiminnoiksi ja siten käytettävissä valikoista valiten. Koordinaatistokin on tavanomainen suorakulmainen xy-koordinaatisto, jota ei ole sidottu näytön kuva-alkioihin. Ja kaiken kukkuraksi tuloskuviot ovat dynaamisia, siis muunneltavissa.

Helpoin tapa tuottaa kuvioita Geogebralla on samantapainen intuitiivinen menettely kuin geometrisessa ajattelussa: valitaan käsite ja osoitetaan kuvion määrittelevät pisteet (kuva 1). Monet peruskuviot saadaan helpoimmin oikeanmuotoisiksi tukeutumalla koordinaattiruudustoon. Tavallaan piirretään yhdellä kerralla esimerkiksi kaikki mahdolliset kolmiot, koska kärkipisteet ovat vapaasti siirrettävissä. Ruudukon avulla piirretyt neliö ja suorakulmio eivät sen sijaan ole geometrisesti ”oikein” piirrettyjä. Suorakulmaisuus katoaa, jos yhtä nurkkapistettä siirretään erikseen, mutta säilyy, jos kuviota raahataan tarttumalla sisäpisteestä.

Kuva 1: Geogebran koordinaatistoon piirrettyjä peruskuvioita.

Geogebraa käytettäessä peruskuvioiden piirtämisen ”ohjelmointi” nojaa kuvioiden geometrisin ominaisuuksiin eikä jokaista yksityiskohtaa tarvitse pohtia erikseen. Vastaavasti kuvioiden värit ”ohjelmoidaan” objektien ominaisuuksissa. Mutta eihän hengittämistä tai kävelemistäkään tarvitse ohjata yksityiskohtaisesti alusta pitäen!

Ohjelmointi voidaankin varata vaativampiin suorituksiin, kuten esimerkiksi suorakulmion geometriseen piirtämiseen. Sen vaiheet ovat jana, normaalit päätepisteisiin, piste toiselle normaalille, normaali tämän kautta, normaalien leikkauspiste ja lopuksi nelikulmion piirtäminen näiden neljän pisteen kautta. Tämä on jo algoritmi eli ohjelmoinnillista ajattelua, jos mikään. Vastaavasti esimerkiksi tasakylkisen tai tasasivuisen kolmion geometrinen konstruointi vaatii vaiheittaista toimintaa eli algoritmista ajattelua. Tasasivuinen kolmio ja neliö on kyllä ohjelmoitu valmiiksikin, koska ne ovat säännöllisiä monikulmioita.

Dynaamista muuntelua

Kuvioille voidaan ohjelmoida dynaamisia ominaisuuksia millä tahansa ohjelmointikielellä, esimerkiksi sitä, että kuvion väri tai muoto muuttuvat kohdistimen paikan mukaan [6]. Geogebrassa tämä voidaan toteuttaa värin osalta kuvion ominaisuuksiin sisältyvällä dynaamisilla väreillä ja kuvion muodon osalta näyttöehdoilla (kuva 2). Suuremman neliön dynaaminen väri määritellään ehdoilla

       punainen: Jos(x(P) > 0, 1, 0)
       sininen: Jos(x(P) < 0, 1, 0)                

missä P on keskipiste ja x(P) sen x-koordinaatti. Kuvassa on lisäksi samankeskiset pienempi neliö ja ympyrä, joiden näyttöehdot ovat y(P) < 0 ja y(P) > 0 sekä dynaamiset värit vastakkaiset kuin isolla neliöllä.

Kuva 2: Kuvion muoto tai väri muuttuvat, kun kuviota siirretään paikasta toiseen [15].

Yksinkertaisista peruskuvioista yhdisteltyjä kuvioita (kuva 3, toinen osakuvio vasemmalta) voidaan hahmottaa ja konstruoida useammalla tavalla. Toteutusalgoritmi puoliohjelmana voisi olla seuraava:

       piirrä kaksi vapaata pistettä A ja B (sininen keskipiste ja toinen valkealla rastilla merkitty)
       piirrä punainen tasasivuinen kolmio k1, jonka kärki on keskipisteessä A, sivun pituus on pisteiden välimatka ja kärjen vastainen sivu kohtisuorassa pisteiden yhdistysjanaa vastaan
       piirrä sininen neliö n1 kolmion yhdelle sivulle
       peilaa kolmio neliön vaakasivun keskinormaalin suhteen, väritä vihreäksi (kolmio k2)
       kierrä kolmioita ja neliötä 60o viisi kertaa keskipisteen ympäri
       piirrä keltainen neljäkäs n2 kahden neliön väliin (useita tapoja)
       kierrä neljäkästä 60o viisi kertaa keskipisteen ympäri.

Vanhassa geometrian opetuksessa vuosikymmeniä sitten tehtävänratkaisun pakollinen osa oli tällainen piirtämisvaiheiden selittäminen sanallisesti. Siis algoritmista ajattelua paljon ennen kuin käsite tuli mukaan kouluopetuskeskusteluun.

Kuva 3: kuvioyhdistelmä, jota voidaan suurentaa valkeasta rastista ja muunnella siirtämällä sinistä keskipistettä [16].

Algoritmi on monivaiheinen ja näyttää kirjoitettuna pitkältä. Todellisuudessa komentojen kirjoittamista on vähän, sillä peruskuviot voidaan piirtää ohjelman valmiilla toiminnoilla ja kiertokomento

       Jono(Kierto(k1, t 60o), t, 1, 5)

riittää kirjoittaa vain yhteen kertaan, sillä seuraavien osakuvioiden kierrot voidaan toteuttaa kirjoittamatta komentoa uudestaan, vain muuttamalla rivieditorissa yhtä kirjainta, kierrettävän objektin nimeä! Näin ollen koko kuvio on piirretty nopeammin kuin edellä olevan puoliohjelma-algoritmin kirjoittaminen sanalliseen asuun kestää.

Kuvion kokoa voidaan säätää rastilla merkitystä pisteestä. Keskipisteen siirtäminen tuottaa häivähdyksen taiteelle ja matematiikalle yhteisestä yllätyksen elämyksestä (kuva 3, oikeanpuoleiset neljä kuviota). Muunnelmien määrää voidaan rajoittaa sitomalla pisteet toisiinsa esimerkiksi pisteen B määrittelyyn sisältyvällä komennolla

       B = A + (d, 0),

missä d voi olla analogisesti määritettävä luku eli liuku. Vähän yksinkertaisempi algoritmi tämän kuvioyhdistelmän konstruoimiseen saadaan, jos aloitetaan säännöllisestä kuusikulmiosta [17].

Tällainen vaiheittainen piirtäminen muistuttaa alhaalta ylös -ohjelmointitapaa. Jokaisen komennon toimivuus tulee testatuksi heti piirrettäessä. Geogebrassa työskennelläänkin niin kuin geometrisessa piirtämisessä peräkkäisten vaiheiden kautta samoin kuin missä tahansa algoritmissa. Omalla tavallaan siis ohjelmointia tai ainakin ohjelmoinnillista ajattelua.

Kuvioiden dynaamisen muuntelun käsitteellistä ja toiminnallista yhteyttä ohjelmointiin ja ohjelmoinnilliseen ajatteluun ei näytä olevan pohdittu kirjallisuudessa, vaikka se on ohjelmointia konkreettisempi, yksikertaisempi ja välittömämpi tapa tuottaa erilaisia kuvioita ja niiden muunnelmia.

Lisää luettavaa ja tutkittavaa

[1] Lumatikka 3: Matematiikka ja taide osoitteessa https://lumatikka.luma.fi/matematiikka-ja-taide/

[2] Koponen, Jouni: Matematiikka ja taide geometrisessa maailmassa. Pro gradu -tutkielma 2015 osoitteessa https://helda.helsinki.fi/bitstream/handle/10138/153063/gradu_jkoponen.pdf?sequence=2&isAllowed=y

[3] Wikipedia-artikkeli Abstrakti taide osoitteessa https://fi.wikipedia.org/wiki/Abstrakti_taide

[4] Kistler, Benney ja Pete: Generative Art Guide: Examples, Software and Tools to Make Algorithm Art osoitteessa https://aiartists.org/generative-art-design

[5] Koodinaapinen: Matematiikka on taideaine osoitteessa https://koodiaapinen.fi/2015/10/vieraskyna-matematiikka-on-taideaine/

[6] Riekkinen, Tuomo: Oh­jel­moin­ti ja tai­de, osa 1: Geo­met­ri­set ku­viot osoitteessa https://staging.dimensiolehti.qs.fi/ohjelmointi-ja-taide-osa-1-geometriset-kuviot/

[7] Hannula, Pekka: Mitä on taide? osoitteessa https://hannula.art/mita-on-taide, viitattu 15.7.2022

[8] Wikipedia-artikkeli Kazimir Malevitš osoitteessa [9] Korkatti, Sirkku: Geometrian oppimiseen iloa kuvataiteellisesta ilmaisusta. Väitöskirja, Lapin yliopisto, 2016. Saatavissa osoitteessa https://lauda.ulapland.fi/bitstream/handle/10024/62367/Korkatti_Sirkku_ActaE_191_pdfA.pdf?sequence=2&isAllowed=y

[10] Ohjelmointi perusopetuksessa, ohjelmoinnillinen ajattelu osoitteessa https://peda.net/jyu/it/koulutusteknologia/op/mpoo/oa/oa

[11] Leino, Kaisa ym.: Digiloikasta digitaitoihin. Kansainvälinen monilukutaidon ja ohjelmoinnillisen ajattelun tutkimus (ICILS 2018) osoitteessa https://jyx.jyu.fi/bitstream/handle/123456789/66250/978-951-39-7937-9.pdf?sequence=1&isAllowed=y

[12] Fagerlund, Janne: Teaching, Learning and Assessing Computational Thinking through Programming with Scratch in Primary Schools. Väitöskirja, Jyväskylän yliopisto, 2021. Saatavissa osoitteesta https://jyx.jyu.fi/bitstream/handle/123456789/78190/978-951-39-8882-1_vaitos05112021.pdf?sequence=1&isAllowed=y

[13] Wing, Jeannette: Computational Thinking. COMMUNICATIONS OF THE ACM March 2006/Vol. 49, No. 3. Saatavissa osoitteesta http://www.cs.cmu.edu/afs/cs/usr/wing/www/publications/Wing06.pdf

[14] Heikkilä, Ville-Matias: Ohjelmoinnin opintiet, koodikoulussa. Skrolli 2/2014 s. 12-18. Saatavissa osoitteesta https://skrolli.fi/2014/09/ohjelmoinnin-opintiet/.

[15] Geogebra-matletti Dynaaminen väri ja muoto osoitteessa https://www.geogebra.org/m/pn3fysqq

[16] Geogebra-matletti Tähtirakennelma 1 osoitteessa https://www.geogebra.org/m/xgz4a5hp

[17] Geogebra-matletti Tähtirakennelma 2 osoitteessa https://www.geogebra.org/m/ru34qedd

Kiitokset Tuomo Riekkiselle, jonka artikkelin https://staging.dimensiolehti.qs.fi/ohjelmointi-ja-taide-osa-1-geometriset-kuviot/ herättämistä ajatuksista ja kuvaideoista juttu sai alkunsa.

Kirjoittaja