Pupuja hypyttelemällä ohjelmoinnin maailmaan sisään

”Monilla opiskelijoilla on vaikeuksia oppia ohjelmoinnin perusteita ensimmäisellä yliopiston ohjelmointikurssilla. Erityisesti opiskelijat, joilla ei ole aikaisempaa ohjelmointikokemusta, tai joiden matemaattiset taidot ovat puutteellisia, ovat vaarassa pärjätä huonosti. Ongelmia aiheuttavat muun muassa ohjelmointikielten syntaksin opettamiseen tarvittava aika, opittavien konseptien, teorioiden ja käytäntöjen suuri lukumäärä, sekä ohjelmavirheiden aiheuttama epävarmuus ja tästä johtuva motivaation katoaminen.”

Jussi Nikander 11.4.2006
Visuaalinen opetus tietotekniikan perusopetuksessa

 

Nikanderin tutkimus on 13 vuotta vanha, mutta aihe ajankohtaisempi kuin koskaan. Ohjelmoinnin opiskelu sekä harrastus- että alanvaihtomielessä on tällä hetkellä kuuminta hottia. Moni, joka ei ole koskaan ohjelmoinut, suunnittelee lähiaikoina kokeilevansa ja kyselee, mistä olisi paras lähteä liikkeelle.

Oma vastaukseni on opetella ohjelmoinnissa tarvittavat algoritminen ajattelu ja perusrakenteet visuaalisella ohjelmoinnilla ja siirtyä siitä samojen rakenteiden kirjoittamiseen Python-koodilla.

Aloittelija tai visuaalista ohjelmointia kokeillut ja sillä ensimmäisen pelinsä ohjelmoinut on ehdotukseni kanssa usein samaa mieltä. Pidempään koodanneen Pentti Perusinsinöörin mielestä pupujen hypyttely oman ohjelmakoodin avulla on lasten hommaa. Aikuisen pitää osata aloittaa ohjelmien kirjoittaminen algoritmeja kirjoittamalla. Tästä sisuuntuneena osoitan nyt, että hyppivien pupujen takana on aikuisten oikeaa asiaa.

 

Ohjelmoinnissa on muutama perusrakenne, jotka toistuvat lähes kaikissa ohjelmointikielissä ja jotka opettelemalla voi koodailla aikalailla mitä vaan.

Nämä rakenteet ovat:

  • Eri kielten valmiit kirjastofunktiot (esim print, input, random jne)
  • For-silmukka
  • While-silmukka
  • If – else if – else -ehtolause
  • Variable – Muuttuja
  • Operaatiot (aritmeettiset, loogiset yms)
  • Funktio
  • Parametri
  • Argumentti
  • Array – Lista
  • Event – Tapahtuma
  • Class – Luokka
  • Object – Olio
  • Attribute
  • Property
  • Metodi

Alla olevissa alkeisharjoituksissa  käytämme näitä rakenteita sekä visuaalisella että Python-ohjelmoinnilla.

Ensimmäisessä ohjelmassa käyttäjältä kysytään, kuinka monta kuviota hän haluaa tähtikuvioon piirtää ja ohjelmakoodi arpoo, kuinka suuria ja minkä muotoisia tähtisarakkeita se piirtää.

Ohjelma toteutettuna visuaalisella ohjelmoinnilla Scratch-ympäristössä

Seuraava esimerkki on sama ohjelma toteutettuna Python-ohjelmoinnilla Codesters-ympäristössä, jossa ohjelmoijan on mahdollista raahata Python-kielisiä käskyjä ohjelmakoodiinsa ja täten välttyä alun valtaisalta kirjoitus- eli syntaksivirhetuskalta.

Ylläolevissa esimerkeissä käytämme

  • kirjastofuntioita
  • tapahtumia
  • muuttujia
  • for-looppia
  • aritmeettista operaatiota
  • olioita
  • metodeja
  • funktiota
  • parametrejä
  • argumentteja

Ohjelma ei ole kovinkaan vaikea toteuttaa tai ymmärtää, mutta rakenteiden nimet ovat aloittelijalle täyttä hepreaa. Siksi tarvitsemme opetusympäristöjä, jotka ilman syntaksin koukeroisuutta visualisoivat, mikä minkäkin termin tai rakenteen tarkoitus on. Alla olevista linkeistä löydät tarkemmat kuvaukset rakenteiden käytöstä sekä linkit toimiviin ohjelmiin:

Tähtikuvion piirtäminen Scrathilla

Tähtikuvion piirtäminen Codestersilla

 

Huomasitte ehkä, että ensimmäisessä esimerkissä jäi vielä monta rakennetta käyttämättä. Hoidetaan niitä vielä alta pupua hypyttämällä.

Pupun hypyttely -ohjelmassa käytämme seuraavia rakenteita

  • tapahtumia
  • while-looppia
  • olioita
  • metodeja
  • argumentteja
  • if-else rakennetta
  • loogista operaatiota

Alla olevasta linkistä löydät tarkemman kuvauksen rakenteiden käytöstä sekä linkin toimivaan ohjelmaan.

Pupun hypyttely Scratchissa

 

Tarkkasilmänen huomasi ehkä, että mihin jäivät Array eli lista ja toinen miettii, olisiko pupu-esimerkki mahdollista saada myös Pythonilla toteutettuna.

Siiliesimerkissä käytämme seuraavia rakenteita.

  • olioita
  • metodeja
  • argumentteja
  • tapahtumia
  • callback-funtiota
  • parametreja
  • muuttujia
  • globaalia muuttujaa
  • for looppia
  • Arrayta, eli listaa

Alla olevasta linkistä löydät tarkemman kuvaukset rakenteiden käytöstä sekä linkin toimivaan ohjelmaan.

Siili ja kukat Codestersilla

 

Mutta mitenkäs viimeinen eli luokka. Scratchissa tai Codestersissa emme pääse tekemään sprite- tai stage-/taustaluokkiin omia muutoksia.

Tässä kohtaa siirrymme perus IDLE Python-ohjelmointiympäristöön tekemään ohjelman, jolla voi antaa tämän hetken suosikkipeleille arvosanoja.

Tässä harjoituksessa käytämme seuraavia rakenteita

  • luokka
  • constructor
  • atribuutti
  • metodi
  • parametri
  • self
  • olio
  • argumentti
  • prototyyppi
  • kirjastofuntiot
  • kommentti

Alla olevasta linkistä löydät harjoituksen tarkemman kuvauksen sekä ohjeen IDLE-Pythonin käyttöön.

Peliarvosteluohjelma Pythonilla

 

Nyt olemme käyneet muutamalla pienellä harjoituksella läpi luettelemani kasan ohjelmoinnin perusrakenteita/konsepteja. Kyseisillä menetelmillä saamme käytyä koko ohjelmistorakennepaletin läpi lupaamassani kuudessa tunnissa siten, että osa aivan aloittelevistakin oppilaista toivoisi jotain vaikeampaa. Vaikeatkin asiat oppii ja ymmärtää helposti, kun ne opettaa selkeillä ja havainnollisilla tavoilla.

Tästä syystä toivoisin, että ohjelmoinnin opettajat kautta Suomen tutustuisivat uusiin visuaalisiin lapsille ja nuorille alunperin kehiteltyihin opetusmenetelmiin ja ottaisivat niitä käyttöön myös aikuisten opetuksessa. Kuusi tuntia opetuksen tai kenenkään oppimisuran alusta kun ei ole paljoa, jos ja kun oppilaat oppivat heti alussa näkemään ohjelmistokokonaisuudet ja pääsevät täten nopeammin ohjelmoinnin maailmaan sisään.

Jos kiinnostuit ohjelmoinnin oppimisesta vsuaalisen ohjelmoinnin avulla, Kodareiden syksyn 2019 kursseille on ilmoittautuminen käynnissä 🙂

Pupuja hypyttelemällä ohjelmoinnin maailmaan sisään