24
Racket 7. JAKSO

Racket MOOC jakso 7

Embed Size (px)

Citation preview

Page 1: Racket MOOC jakso 7

Racket 7. JAKSO

Page 2: Racket MOOC jakso 7

OPS2014 Laaja-alainen osaaminen vuosiluokilla 7-9

Tieto- ja viestintäteknologinen osaaminen Ohjelmointia harjoitellaan osana eri oppiaineiden opintoja. (OPS2014, s. 284)

Page 3: Racket MOOC jakso 7

OPS2014 Matematiikka 7-9

Tavoitteet: T20 ohjata oppilasta kehittämään algoritmista ajatteluaan sekä taitojaan soveltaa matematiikkaa ja ohjelmointia ongelmien ratkaisemiseen (OPS2014, s. 375)

Page 4: Racket MOOC jakso 7

OPS2014 Matematiikka 7-9

S1 Ajattelun taidot ja menetelmät: Harjoitellaan väitelauseiden totuusarvon päättelyä. Syvennetään algoritmista ajattelua. Ohjelmoidaan ja samalla harjoitellaan hyviä ohjelmointikäytäntöjä. Sovelletaan itse tehtyjä tai valmiita tietokoneohjelmia osana matematiikan opiskelua. (OPS2014, s. 375)

Page 5: Racket MOOC jakso 7

OPS2014 Matematiikka 7-9

Arvosanan kahdeksan osaaminen: Oppilas osaa soveltaa algoritmisen ajattelun periaatteita ja osaa ohjelmoida yksinkertaisia ohjelmia. (OPS2014, s. 379)

Page 6: Racket MOOC jakso 7

OPS2014 Käsityö 7-9

Käsityön opetuksen tavoitteet vuosiluokilla 7-9: Käytetään sulautettuja järjestelmiä käsityöhön eli sovelletaan ohjelmointia suunnitelmiin ja valmistettaviin tuotteisiin. (OPS2014, s. 431)

Page 7: Racket MOOC jakso 7

Jotta OPS:ia voi toteuttaa on selvitettävä itselleen mitä on:

1) ohjelmointi

2) algoritmi

3) algoritminen ajattelu

4) algoritmisen ajattelun soveltaminen

5) algoritmisen ajattelun periaatteet

6) hyvät ohjelmointikäytänteet

7) yksinkertainen ohjelma

Matematiikan opettajan on lisäksi tiedettävä miten:

8A) soveltaa matematiikkaa ja ohjelmointia ongelmien ratkaisuun

Käsityön opettajan on lisäksi tiedettävä miten:

8B) sovelletaan ohjelmointia suunnitelmiin ja valmistettaviin tuotteisiin

Page 8: Racket MOOC jakso 7

Computational thinking

Page 9: Racket MOOC jakso 7

Laskennallinen ajattelu/Algoritminen ajattelu/Automatisointiajattelu (suom.)

Periaatteet:

- Logiikka◦ ennustaminen, analysointi

- Algoritmit◦ vaiheiden ja sääntöjen tekeminen

- Jakaminen osiin◦ ongelman/ratkaisun jakaminen osiin

- Toistuvat rakenteet◦ niiden tunnistaminen ja hyödyntäminen

- Abstraktio◦ turhien yksityiskohtien poistaminen

- Arvioiminen◦ ratkaisun laadun arviointi

Lähestymistavat:

- Kokeileminen◦ leikkiminen, koodin ”säätö”

- Uuden luominen◦ suunnittelu ja toteutus

- Debuggaaminen◦ virheiden löytäminen ja korjaaminen

- Sitkeys◦ työn loppuun saattaminen

- Yhteistyö◦ Yhdessä työskenteleminen

Page 10: Racket MOOC jakso 7

Algoritmic Thinking Algorithmic thinking is a way of getting to a solution through the clear definition of the steps needed – nothing happens by magic. Rather than coming up with a single answer to a problem, like 42, pupils develop algorithms. They are instructions or rules that if followed precisely (whether by a person or a computer) leads to answers to both the original and similar problems.

For example, we all learn algorithms for doing multiplication at school. If we (or a computer) follow the rules we were taught precisely we can get the answer to any multiplication problem. Once we have the algorithm we don’t have to work out how to do multiplication from scratch every time we are faced with a new problem.

The power of algorithmic thinking is that it allows solutions to be automated.

http://teachinglondoncomputing.org/resources/developing-computational-thinking/algorithmic-thinking/

Page 11: Racket MOOC jakso 7

Algoritminen ajattelu (suom.)

Algoritmisen ajattelun avulla ratkaistaan ongelma määrittelemällä selkeät vaiheet jotka siihen tarvitaan – mitään ei tapahdu vahingossa. Sen sijaan, että löydetään yksi vastaus ongelmaan, kuten 42, oppilaat kehittävät algoritmeja. Ne ovat ohjeita tai sääntöjä, joita seuraamalla tarkasti (olipa se sitten ihminen tai tietokone) saavutetaan vastaus sekä alkuperäiseen ongelmaan, että kaikkiin samanlaisiin ongelmiin.

Esimerkiksi, opimme koulussa kertolaskualgoritmin. Jos me (tai tietokone) seuraamme näitä meille opetettuja ohjeita tarkasti, saamme vastauksen mihin tahansa kertolaskuongelmaan. Kun meillä on tämä algoritmi meidän ei tarvitse jokaisen uuden ongelman kohdalla miettiä miten se tehdään.

Algorimin voima on siinä, että sen avulla ratkaisut voidaan automatisoida.

Page 12: Racket MOOC jakso 7

Käytä – muokkaa – luo Yksi tapa oppia ohjelmointia/ algoritmista-ajattelua on edetä siinä ”käytä-muokkaa-luo” vaiheiden kautta.

Käytä-vaiheessa oppilas voi esim. pelata valmista peliä.

Muokkaa-vaiheessa voidaan aluksi vaihtaa jokin visuaalinen osa toiseen, esim. muuttaa pelihahmon ulkonäköä.

Luo-vaiheessa peliin lisätään uutta toiminnallisuutta. Jotta tähän voidaan päästään, oppilaan on ymmärrettävä ainakin osittain pelissä käytetyt abstraktiot sekä automatisointiratkaisut.

https://users.soe.ucsc.edu/~linda/pubs/ACMInroads.pdf

Page 13: Racket MOOC jakso 7

Tapoja opettaa ohjelmointia/algoritmista ajattelua

1) Kirjallisen materiaalin/videon/tutoriaalin seuraaminen ja sen esimerkkien kopiointi ja kokeileminen

2) Opettajan antaman esimerkin kopiointi ja kokeileminen. Asian soveltaminen vastaavaan ongelmaan itse.

3) Keksitään itse tehtävä, suunnitellaan sille ratkaisu (funktio) check-expect:ien avulla

4) Muokataan valmista koodipohjaa eteenpäin, lisäämällä omaa logiikkaa (koodia) tiettyihin kohtiin

5) Kokeillaan ja leikitään koodin kanssa, ihmetellään lopputulosta

6) Debugataan toisen koodia, etsitään yhdessä virheitä ja korjataan ne

7) Opetetaan peruspalikat, tehdään miniharjoituksia niiden avulla ja lopuksi saadaan tehtyä jokin ”oikea” iso sovellus (esim. peli)

8) Tehdään ”oikeaa sovellusta” (esim. peli) ja opitaan sitä mukaa ohjelmointitekniikoita, kun niitä tarvitaan sovelluksen tekemisessä

Page 14: Racket MOOC jakso 7

KOODIAAPINEN MOOC - SYKSY 2015

Millainen on hyvä ohjelma?(vrt. hyvät ohjelmointikäytänteet)

Kun puhutaan hyvistä ohjelmointikäytänteistä pitää ensin määritellä mihin niillä pyritään. Määritelmiä on monia, tähän on kerätty niistä joitakin (lähde Wikipedia):

Hyvän ohjelman ominaisuuksia:

- käyttötarkoitus on määritelty selkeästi

- täyttää sille asetetut vaatimukset: antaa oikean paluuarvon jokaiselle mahdolliselle syötteelle

- selkeä, lyhyt, helppokäyttöinen, luotettava, riittävän tehokas

- helppo tehdä lisäyksiä ja korjauksia

- nopeasti valmistuva, valmiina aikataulussa

Page 15: Racket MOOC jakso 7

KOODIAAPINEN MOOC - SYKSY 2015

Hyvät ohjelmointikäytänteet (1)

Ohjelmia kirjoitetaan paitsi tietokoneille myös muille ihmisille luettavaksi ja jatkokehitettäväksi (lähteet: [1], [2]). Tässä joitakin yleisimpiä:

- funktion/ohjelman käyttötarkoitus on kerrottu kommenttirivillä [1]

- koodi on rivitetty ja sisennetty loogisesti seuraten samaa logiikkaa [1]

- muuttujanimet ja funktionimet valitaan kuvaavasti ja nimissä seurataan samaa logiikkaa [1]

-vältetään turhaa toistoa (DRY = Don’t Reapeat Yourself), koodia ei kopioida vaan toistoon käytetään niihin tarkoitettuja rakenteita [1]

- vältä liian pitkälle meneviä sisäkkäisiä rakenteita (esim. sisäkkäiset if-lauseet) [1]

- vältä liian pitkiä koodirivejä [1] (esim. DrRacket max 102 merkkiä/rivi)

Page 16: Racket MOOC jakso 7

KOODIAAPINEN MOOC - SYKSY 2015

Hyvät ohjelmointikäytänteet (2)

- pidä koodi ja data (tieto) erillään [1] (esim. tunnistuspelissä tieto, kysymykset ja vastaukset, olivat listassa ja koodi rekursiivisessa funktiossa, joka luki listaa)

- ”siivoa” koodiasi aikaisin ja usein (”Refractor your code early and often”), koodin refraktorointi tai siivoaminen tarkoittaa sitä, että koodi kirjoitetaan uudelleen mutta paremmalla tyylillä niin, että sen toiminnallisuus pysyy kuitenkin samana [1]

◦ Tällä tavoitellaan sitä, että ensimmäinen koodiversio voi olla ”quick and dirty” mutta sitten, kun on jotain on saatu toimimaan, koodille luodaan selkeämpi rakenne (esim. käyttämällä apufunktioita). Näin koodille saadaan lopulta siistimpi, luettavampi ulkoasu (vrt. puhtaaksi kirjoittaminen).

- pyri käyttämään lokaaleja muuttujia [2] (vältä globaaleja muuttujia)

- käytä muuttujia ja funktioita vain yhteen tarkoitukseen [2]

- jaa iso, monimutkainen koodi useampaan pienempään osaan [2]

Page 17: Racket MOOC jakso 7

Kurssin ”diplomityö”Viimeisen tehtävän tarkoitus on miettiä miten ohjelmoinnin opetuksen voisi käytännössä jalkauttaa omaan luokkaansa. Tee diplomityö esim. Word:llä ja palautta se PDF-muodossa A+:aan.

Tärkeä osa tätä tehtävää on myös lukea toisten pohdintoja ja kommentoida/antaa niistä palautetta (tämän kurssin sokeri ja suola on juuri jakaminen). Lue vähintään kolme juttua ja kommentoi niitä vapaasti (teksti).

Nyt jaamme toisillemme ajatuksiamme ja suunnitelmiamme ohjelmoinnin opettamisesta käytännössä.

Valitse näistä yksi (tai yhdistele soveltaen):

A - työssä reflektoit OPS:ia ja tämän MOOC kurssin sisältöjä yleisellä tasolla

B - työssä suunnittelet yhden uuden ohjelmointiharjoituksen

C - työssä suunnittelet ohjelmoinnin opintokokonaisuuden oman oppiaineesi sisältöihin liittyen

Page 18: Racket MOOC jakso 7

Diplomityö A: Reflektoi OPS:ia

Tällä kurssilla on käyty läpi paljon asiaa, ja nyt sinulla pitäisi olla hyvä pohja pohtia OPS:in vaatimuksia. Pohdi (reflektoi) seuraavia kysymyksiä (tai keksi paremmat):

1) Miten ohjelmoinnin opettamisen voisi integroida oppiaineesi sisältöihin tai millaisessa oppiainerajat ylittävässä projektissa sitä voisi hyödyntää? (mitä voisivat olla ”yksinkertaiset ohjelmat”?)

2) Mitkä taidot/sisällöt ovat mielestäsi tärkeimpiä oppia algoritmisen/laskennallisen ajattelun osalta luokilla 7-9? (mitä on algoritminen ajattelu?)

3) Miten opettaisit ohjelmointia omille oppilaillesi, mitä menetelmiä käyttäisit, miten ohjelmointia voi ylipäätään oppia? (pedagogiset ratkaisut)

4) Mikä on mielestäsi luovuuden ja teorian suhde ohjelmoinnin opetuksessa? (pedagogiset ratkaisut)

5) Mitä oivalluksia tämä kurssi sinulle antoi aiheesta?

Liitä juttuusi mukaan jokin kurssilla ohjelmoimasi kuva tai linkki sovellukseen, ja kerro mitä opit harjoitusta tehdessäsi.

Page 19: Racket MOOC jakso 7

Diplomityö B: Luo harjoitus

Tällä kurssilla on tehty monenlaisia harjoituksia. Mieti seuraavia asioita ja suunnittele uusi harjoitustehtävä, jota voisit hyödyntää omassa opetuksessasi.

1) Millainen on hyvä ohjelmointiharjoitus, ohjelmointityökalu, ohjelmoinnin materiaali? (pedagogia)

2) Miten ohjelmointia/algoritmista ajattelua pitäisi opettaa/miten sitä oppii parhaiten? (pedagogia)

3) Mihin algoritmisen ajattelun (tai matematiikan) osa-alueen opettamiseen tähtäät uudella tehtävälläsi? (mitä on algoritminen ajattelu, miten ongelmia ratkotaan sen avulla?)

4) Mitä ”hyviä ohjelmointikäytänteitä” tehtäväsi opettaa? (mikä on oleellisinta?)

Suunnittele uusi ohjelmointitehtävä/harjoitus (sellainen joka puuttuu nykyisestä Koodausta kouluun materiaalista). Tee tehtävänanto (voi sisältää tekstiä ja kuvia, se voi olla myös yksi .rkt-tiedosto tai jaettu WeScheme-koodi). Ohjelmoi myös yksi esimerkkiratkaisu. Voit käyttää tässä pohjana jotain kurssilla jo aloittamaasi koodia ja muokata sen tehtävän muotoon. Liitä tehtävän mukaan lyhyt kuvaus, jossa kerrot tehtävän pedagogiset tavoitteet.

Page 20: Racket MOOC jakso 7

Diplomityö C: Luo suunnitelma

Tällä kurssilla on käyty läpi paljon asiaa sekä suuri määrä erilaisia tehtäviä. Suunnittele niiden pohjalta ohjelmoinnin opetuskokonaisuus (korkeantason tuntisuunnitelmat tai projektikuvaus), siitä mitä voisit opettaa, missä järjestyksessä, millä luokalla, minkä asian yhteydessä.

Merkitse suunnitelmaan mitä harjoitustehtäviä voisit käyttää/soveltaa Koodausta kouluun materiaalista. Kirjaa ylös myös mieleesi tulleet uudet tehtäväideat, joihin materiaalissa ei ole (vielä) ohjeita/malliratkaisuja. Perustele valintojasi, miksi juuri nämä tehtävät.

Mieti myös työskentelymuotoja, miten organisoisit opetuksen luokassa (parityö, ryhmätyö, esitykset, jakaminen somessa,...).

Jos olet jo ehtinyt aloittaa suunnitelman käytännön kokeilun oppilaiden kanssa kerro myös miten se on sujunut.

Liitä mukaan myös jokin itse kurssilla koodaamasi koodi/kuva ja kerro aiotko ottaa ko. tehtävän mukaan omaan opetukseesi.

Page 21: Racket MOOC jakso 7

Tehtävälaatikon lisääminen DrRacket-tiedostoon (B)

Voit halutessasi lisätä tehtäväkuvauksen (teksti+kuvat) suoraan DrRacket – tiedostoon (Insert->Text box, Insert->Image):

Page 22: Racket MOOC jakso 7

DrRacket-tiedoston jakaminen GoogleDriven kautta (B)

1) Kirjaudu Googleen, valitse Drive

2) Hinaa DrRacket-tiedosto hiirellä Oman Driven päälle ja päästä irti

3) Valitse tiedosto ja valitse hiiren oikealla napilla ”Jaa”

4) Hanki jaettava

linkki

(kopio Ctrl+C,

liitä Ctrl+V

GoogleDoc) 2.

3.

4.

Page 23: Racket MOOC jakso 7

Koodausta kouluun materiaalin kehittelyssä käytetyt lähteet

1) Bootsrap – projektin nettisivut (WeScheme)

http://www.bootstrapworld.org/

2) How to design programs – nettikirja (”2. painos”)

http://www.ccs.neu.edu/home/matthias/HtDP2e/

3) Realm of Racket – kirja

http://www.amazon.com/dp/1593274912/ref=cm_sw_su_dp

4) Systematic Program Design MOOC (osa 1)

https://www.edx.org/course/systematic-program-design-part-1-core-ubcx-spd1x-0

5) Mindstorms - Children, Computers and Powerful Ideas - kirja

http://www.amazon.com/Mindstorms-Children-Computers-Powerful-Ideas/dp/0465046746

6) Racket – dokumentaatio

http://racket-lang.org/

7) OPS2014

http://www.oph.fi/download/163777_perusopetuksen_opetussuunnitelman_perusteet_2014.pdf

Page 24: Racket MOOC jakso 7

Miten tästä eteenpäin? 1) Liity FB-ryhmään Koodausta kouluun

- siellä saat tietoa Racket – kursseista ja materiaalin kehittymisestä

- siellä voit myös keskustella yleisemmin aiheeseen liittyen (myös muista koodausympäristöistä)

https://www.facebook.com/groups/koodaustakouluun/

2) Liity koodausta-kouluun-racket – google-ryhmään (UUSI)

- siellä voit kysyä teknisempiä Racket/DrRacket/WeScheme-kysymyksiä

- tämä on se foorumi joka toimii jatkossa kuin Piazza -keskustelualue, täällä voimme jatkossakin debugata koodia, ja selvittää muita koodaamisen mysteereitä, pikkuhiljaa tästä muodostuu tietopankki muille opettajille

https://groups.google.com/forum/#!forum/koodausta-kouluun-racket

Jos mielessäsi on jotain jatkoideoita, ehdota rohkeasti näillä foorumeilla!!! Yhdessä tekeminen ja jakaminen kannattaa aina!!!