Osion kuvaus

    • Jokaisen tehtäväkierroksen jälkeen kerättyyn palautteeseen on vastattu seuraavasti kurssin aikana:




    • Kierros 1


      10.6.2019 mennessä kerätyt palautteet:

      Lähiopetusta tai videoita kaipailtiin joissain palautteissa. Kurssista ei ole vielä tehty luentotallenteita, ja sellaisenaan moiset saattaisivat olla aika raskaita katsoa. Ohjelmointia oppii parhaiten tekemällä ja kokeilemalla, sillä se on pikemminkin taitoa (skill) kuin tietoa (knowledge), jota on hankala sisäistää vain kuuntelemalla tai lukemalla. Joistain myöhempien kierrosten asioista on materiaalissa animaatioita, jotka helpottavat asioiden ymmärtämistä. 

      Palautteessa kiiteltiin harjoitusryhmissä saatua apua Eclipsen asentamiseen. Asennuksen ongelmissa on hankala neuvoa etänä, kun koneita, käyttöjärjestelmiä ja ympäristöjä on niin monenlaisia. Ohjelmointiympäristön asennus on harmittavan hankala aloitus kurssille, mutta pidemmällä tähtäimellä ympäristöstä on apua erityisesti virheiden metsästämisessä. Muutama oli valinnut jonkin toisen ympäristön, mikä on täysin sallittua. 

      Jotkut kokivat hankalammaksi ymmärtää mitä tehtävässä pitää tehdä kuin itse python-kielen oppimisen. Tämä on varmaan monen ohjelmoijan edessä myös töitä tehdessä: asiakkaatkaan eivät välttämättä tiedä, mitä haluavat. Lopulta ohjelmointikielissä on vain rajallinen määrä ilmaisuja, mutta luonnolliset kielet ovat rajattomia. Ohjelmointiin siis liittyy muutakin kuin itse ohjelmointikielen käskyjen oppiminen.

      Joku oli jo huolissaan tentistä. Vanhoja tenttejä on muutaman tenttiarkistossa http://tenttiarkisto.fi/. Kotitehtävissä hankittu osaaminen riittää varsin hyvin tentissä, eikä arvostelussa olla ihan niin tarkkoja kuin python-tulkki itse on. 


      17.6.2019 mennessä kerätyt palautteet:

      Bilelaskuritehtävässä hämmensi ristiriitaiselta tuntuvat ohjeet syötävien ja juotavien määrälle. Tehtävässä huomautetaan, että oikeat kertoimet pitää käydä katsomassa Piazzasta, eikä niitä ole annettu A+:n tehtävänannossa, jossa on tietoisesti annettu "väärät" arvot. Tämän tehtävän tarkoitus on tehdä tutuksi myös Piazzaa. Jos esim. myöhemmissä tehtävissä tulee ongelmia, niin joku muu on saattanut jo käydä kysymässä aiheesta, tai oman kysymyksensä voi lisätä. Kurssin henkilökunta seuraa kesällä aktiivisesti Piazzaa, sähköpostitse lähetetyt kysymykset puolestaan saattavat jäädä huomaamatta.

      Eräs valitteli, ettei osaa tulkita palautteesta, mikä on ollut pielessä. Tällaisissakin ongelmissa voi kysyä Piazzassa lisäapua, että mitä jokin tarkoittaa. Assarit näkevät palautetut tehtävät ja niiden palautteet.

      Palautuskerroistakin oli ihmettelyä palautteessa. Tehtäväkohtaiset palautuskerrat näkyvät tehtävän alussa, samassa kohtaa kuin tehtävästä saatavat ja saadut pisteet sekä tehtävän määräaika. Tyypillisesti tällä kurssilla tehtävän voi palauttaa 10 kertaa. Ennen palauttamista kannattaa kuitenkin ajaa koodia itse annettujen esimerkkien avulla ja tarkistaa ilmiselvät virheet pois. 

      Eräs kysyi, voiko float- ja int-lukuja laskea yhteen tai kertoa toisillaan. Vastaus on että voi. Tätä voi kokeilla vaikka itse terminaali-ikkunassa käynnistämällä python (tai python3):

      >>> 3 + 3.0

      6.0

      >>> 5/2

      2.5

      >>> type(5/2)

      <class 'float'>

      >>> type(5)

      <class 'int'>

      Lisää tyypeistä on materiaalissa:

      https://plus.cs.hut.fi/y1/2019k/module01/python-ohjelmoinnin_alkeita_5/

      ja laskutoimituksista:

      https://plus.cs.hut.fi/y1/2019k/module01/python-ohjelmoinnin_alkeita_6/


      Pythonin tyyliopas löytyy osoitteesta (tähän on linkki kurssimateriaalin ensimmäisen kerroksen lopussa):

      https://www.python.org/dev/peps/pep-0008/

      Pythonissa ei käytetä rivin lopussa puolipistettä. Varmaan materiaalissa oleva viittaus tähän on huomautus niille opiskelijoille, jotka ovat kirjoittaneet jollain toisella ohjelmointikielellä. Jos nyt kuitenkin on kirjoittamassa jotain hyvin yksinkertaista kertakäyttöistä skiptimäistä itselleen, niin puolipisteellä saa kaksi asiaa yhdelle riville, mutta tässäkään puolipiste ei oikeastaan ole koko rivin lopussa:

      >>> 4+5 ; 3-1

      9

      2



      24.6.2019 mennessä kerätyt palautteet:

      Hankalinta kurssissa taitaa olla Eclipsen asennus, jonka ohjeetkin ovat joidenkin käyttöjärjestelmien osalta ilmeisesti päässeet vanhenemaan. Ongelma nimittäin on se, että koneita on niin monenlaisia, ja muut jo asennetut ohjelmat voivat vaikuttaa kokoonpanoon, että toimivan ympäristön asennus voi olla melkoinen suo yksittäisen opiskelijan koneen kanssa taistellessa. Kiitoksia palautteesta tältä osin, uusimme ohjeet perusteellisesti, mutta ne eivät varmastikaan enää ehdi auttamaan tämän kesän kurssilla, koska suurin osa on jo ehtinyt tämän suurimman ongelman ohi ja ohjeiden kattava uudistaminen vie aikaa. Assarit saivat kuitenkin jälleen kehuja ympäristön asentamisen auttamisesta harjoituksissa, joten siellä kannattaa vierailla, jos vielä on ongelmia! jos harjoituksiin ei millään pääse, voi ohjeita yrittää kysellä esim. screenshotien kera Piazzassa. Siellä on myös vinkattu pari muuta mahdollista ympäristöä kanssaopiskelijoiden toimesta.

      Jo ensimmäisen kierroksen tehtävien tekeminen sai jotkut tarttumaan ohjelmoinnin koukkuun. Ohjelmonti voi olla hyvinkin koukuttavaa, kun vielä tahtoo korjata jonkun pieneltä vaikuttavan ongelman. Muistakaa kuitenkin mennä nukkumaan ajoissa, sillä alitajunnasta voi löytyä yllättävä apu, ja oppiminen edellyttää riittävää määrää unta.


      1.7.2019 mennessä kerätyt palautteet:

      Materiaalia kehuttiin edelleen helposti lähestyttäväksi ja tehtäviä opettavaisiksi. Osa kertoi, että aikaa kului enemmän ympäristön asennukseen ja käyttöönottoon kuin itse tehtävien tekemiseen. Ensikertalaiset vaikuttavat innostuneilta, vaikka täsmälleen esimerkin mukaisen tulosteen tuottaminen ärsyttääkin osaa. Monasti tietokoneohjelmat "juttelevat" toisille tietokoneohjelmille, esimerkiksi toisen koodarin tekemille, saman koneen sisällä tai verkon yli toisella koneella pyörivälle ohjelmille, jolloin viestiformaatti on tarkkaan määritelty. Nythän tekemänne ohjelmat "juttelevat" A+:n tarkastusohjelmien kanssa. Sama näkyy näitä palautteita lukiessa: jos  aika-arvioiden kenttiin kirjoittaa pyydetyn minuuttimäärän esim. "60" sijaan mukaan yksikönkin, eli esim. "60 min", niin A+ ei ota tuota mukaan keskiarvon laskemiseen eikä graafien piirtämiseen. Aika pyydetään samasta syystä minuutteina, koska kaikkeen ei mene kokonaisia tunteja ja vaihteluväli on suuri.


      Tämän jälkeen  kerätyt palautteet alla kierroksen 3 kohdalla.

    • Kierros 2


      10.6.2019 mennessä kerätyt palautteet:

      Toisen kierroksen tehtävät tuntuivat osasta hankalammilta kuin ensimmäiset, koska ne olivat jo laajempia. Tehtävien tarjoamista haasteista myös pidettiin.

      Osa kaipasi enemmän pieniä toisteisia tehtäviä, toiset taas lisää esimerkkejä. Eräs jo kaipaili tapaa tehdä kaikenlaiset tapaukset kattavaa testausta ennen tehtävänsä palauttamista A+aan, mutta se on valitettavasti vasta seuraavan kurssin eli Ohjelmoinnin peruskurssi Y2:n asioita. Vaikka omiin testauksiin ei oikeita vastauksia olisikaan, voi niiden avulla huomata ohjelman joskus toimivan kummallisesti tai jopa kaatuvan. Kannattaa siis kokeilla tehtäviään erilaisilla syötteillä jo ennen arvosteluun palauttamista. Isommissa tehtävissä on osia, jotka ratkeavat aikaisemmissa tehtävissä opituilla asioilla. Ongelma siis tyypillisesti jaetaan osiin, ja ratkotaan (ja ehkä jopa testataan) osa kerrallaan, ja lopulta testataan koko ratkaisun toiminta.

      Ja muistakaa olla tarkkoina opintotuen takaisinmaksutehtävässä sen kanssa, mitä tulorajan ylittävän 222 euron kanssa pitää tehdä kulloinkin!


      17.6.2019 mennessä kerätyt palautteet:

      Kakkoskierroksen tehtäviä pidettiin jo haastavampina, mutta niistä myös pidettiin.

      Eräs oli saanut Eclpisensä solmuun koodinsa kanssa. Eclipsessä saattaa olla välillä hyvä "puhdistaa" kaikki, jos on kovasti ollut kummallisia ongelmia. Tämä onnistuu Project-valikosta kohdasta Clean...

      Toistokäskyt aiheuttivat jonkin verran hämmennystä. Tällä kierroksella käsitellään while-käskyä, jossa jotain toistetaan kunnes jokin ehto täyttyy, eli toistojen määrä ei ole tiedossa etukäteen. Tehtävissä kannattaa siis miettiä mikä on se ehto, jolloin toistaminen lopetetaan. Vinkkinä tekemiseen voisi myös miettiä bool-tyyppistä muuttujaa, jolla on kaksi mahdollista arvoa: True (tosi) ja False (epätosi).


      24.6.2019 mennessä kerätyt palautteet:

      Noin puolet A+:n puolella kurssillä käyneistä on saanut toisen kierroksen tehtyä. Toivottavasti loputkin aktivoituvat pian, sillä kurssin edetessä tulee lisää palikoita, joita tarvitaan tehtävien ratkaisuun. 

      Osa opiskelijoista koki tämän kierroksen tehtävät jo paljon haastavammiksi kuin ensimmäisen kierroksen tehtävät. Mutta samaiset opiskelijat huomauttivat, että esimerkkien kokeileminen itse auttoi ymmärtämään, mistä on kyse. Mielestäni tämä on hyvä neuvo. Esimerkkikoodeihin voi tehdä myös kokeiluja, että mitä tapahtuu, jos koodiin tekee jotain pientä muutosta. 

      Ajaessa koodia, jossa on vielä virheitä, kannattaa ensimmäisenä lukea viimeinen rivi. Se kertoo usein antaen sen rivin numeron, missä kohtaa ohjelman kaatui. Virhe kuitenkin saattaa olla koodissa jo tätä ennen tuota riviä. Virheviesti antaa yleensä myös vinkkiä, mikä koodissa on pielessä.

      Jos tehtävien matematiikan tai fysiikan kanssa on ongelmia, kannattaa rohkeasti kysyä apua harjoituksissa tai Piazzassa. Pääasiallinen tarkoitus on tarjota mielekkäitä tehtäviä monenlaisille oppijoille. Mutta koska kyseessä ei ole matematiikan tai fysiikan kurssi, niin apua kyllä löytyy näihin, jotta voi keskittyä sitten ohjelmointiin.


      1.7.2019 mennessä kerätyt palautteet:

      Matemaattiset tehtävät mietityttivät. Kehotan ottamaan esiin palan paperia ja kynän, ja kirjoittamaan tarvittavat kaavat ensin käsin. Jos matematiikan kanssa on pahoja ongelmia, niin kysykää rohkeasti neuvoa tai vinkkiä!

      Tällä kierroksella monet olivat jo huomanneet, että sisennysten kanssa saa olla aika tarkkana, eli mitkä komennot suoritetaan while- tai if-komennon sisällä. Jotkut kaipasivat lisää esimerkkejä. Kehotan rohkeasti kokeilemaan esimerkkikoodeja kopioimalla ne ja ajamalla niitä itse.


      Myöhemmin annetut palautteet kierroksen kolme kohdalla alla.

    • Kierros 3


      10.6.2019 mennessä kerätyt palautteet:

      Muutama ehti jo tehdä kolmannenkin kierroksen tehtäviä. Ensimmäiset löysivät erään tehtävän tarkistimesta virheen, joka on nyt korjattu. Kiitoksia tarkkasilmäisille!

      Määrämuotoisen tulostuksen tuottaminen tuntui ahdistavan muutamaa, mutta toisaalta eräs kokeneempikin ohjelmoija totesi oppineensa jotain uutta. Määrämuotoiset tulosteet ovat olennaisia myös tosimaailmassa, ei vain A+:n tarkistimien kanssa toimiessa. Määrämuotoiset viestit ovat kaiken tietoliikenteen taustalla eli tietokoneiden ja muiden laitteiden kommunikoidessa keskenään - tekoäly ei vielä osaa tulkita, mitä joku yritti tarkoittaaja se jäänee vielä hyvin pitkäksi aikaa ihmisen taitojen varaan.


      17.6.2019 mennessä kerätyt palautteet:

      Tehtävät olivat jo haastavampia, joten malliratkaisuja toivottiin. Niitä emme kuitenkaan voi julkaista ennen kuin kierroksen määräaika on ohi. Malliratkaisut tulevat siis deadlinen jälkeen. 

      Lentokoneen kiihtyvyys koettiin jo melko haasteelliseksi fysiikan suhteen. Tähän antaisin vinkiksi käyttää suureiden yksiköitä laskemisen apuna, ja niissä käyttää SI-järjestelmän perusyksiköitä, eli yleensä intuitiivisen km/h sijaan m/s. Esim. annettuna olleen matkan kaavaa kun pohtii yksiköiden avulla (alla ^-merkkiä on käytetty potenssiinkorotuksen merkiksi)

      s = 0.5 * a * t^2    niin saadaan sievennettyä yksiköistä, että (m / s^2) * s^2 = m. 

      Lukuja kannattaa pyöritellä ihan paperilla konkreettisen esimerkin avulla, ja olla tarkka yksiköiden kanssa.


      Myös muotoilun kanssa oli painittu. Näistä on materiaalin luvussa https://plus.cs.hut.fi/y1/2019k/module03/kontrollirakenteet_valinta_ja_toisto_2_5/

      jossa perusesimerkit käydään läpi. Kannattaa itse kokeilla eri vaihtoehtoja, jos kaipaa lisää esimerkkejä, mikä toimii ja mikä tekee mitäkin. Tulostuksen muotoilu kannattaa opetella, koska sitä käytetään vielä monta kertaa, ja se on tulevaisuudessakin koodatessa mahdollisesti hyödyllistä. Esim. tyyppien lisäksi kentän eri reunaan tasaaminen löytyy tästä samasta luvusta materiaalia.


      24.6.2019 mennessä kerätyt palautteet:

      Tämän palautteen haluan nostaa jälleen tähän muistutukseksi unen tärkeydestä:

      "Lentokoneen kiihtyvyys tehtävää tuijotin aivan liian kauan väsyneenä. Nukutun yön ja työpäivän päätteeksi selvisi melko nopeasti!". Voisin lohduttaa kaikkia, että lentokoneen kiihtyvyys tuntui pysäyttävän myös nopeasti kurssilla eteneitä nukkumaan yön yli, ja miettimään sitten virkein mielin tehtävää uudestaan.

      Toinen opiskelija toivoi voivansa antaa vinkiksi muille, että tehtävissä tulostettavissa taulukoissa otsikkoriveihin ei tarvitse käyttää tulostuksen muotoilua. Tämä on muistaakseni totta kaikkien tehtävien kohdalla. Monet tulostusrivit on suoraan kopioitavissa esimerkkiajoista. Eipä tarvi sitten etsiä kirjoitusvirheitä A+:n antaman palautteen perusteella.


      1.7.2019 mennessä kerätyt palautteet:

      Eräs opiskelijoista totesi, että "kannattaa käydä kurssimateriaali läpi huolellisesti, eikä kiirehtiä heti tehtäviin. Sai nimittäin palata monta kertaa ensimmäisen ja toisen kierroksen materaiaaleihin, kun aiemmin opittujen käskyjen ja loogisten operaattoreiden käyttö oli hakusessa." Tämä kannattaa pitää mielessä myös myöhemmillä kierroksilla. Jos ette ole vielä huomanneet, niin A+:n vasemmassa reunassa "Kurssimateriaali" -linkki johtaa kurssin materiaalin sisällysluetteloon. Myöhemmillä kierroksilla todennäköisesti joutuu käymään tarkistamassa aiemmista esimerkeistä jonkin komennon käytön yksityiskohtia.

      Lukujen pyöristäminen aiheutti jonkin verran ihmetystä. Tämä hoituu kuitenkin ihan toisin. Sanallinen vinkki tehtävään voisi olla: "50.1 on suurempi kuin 50 ja 50 on pienempi kuin 50.1." int-lukuja ja float-lukuja voi vertailla toisiinsa.


      15.7.2019 mennessä kerätyt palautteet:

      Aivan ensimmäiseksi haluan taas muistuttaa, että tehtävien tulostamien tekstien täytyy olla täysin identtisiä esimerkkien kanssa. Tähän auttaa se, että tulostettavat lauseet kopioi esimerkeistä omaan koodiinsa. Ääkköset ei sinällään aiheuta pythonissa ongelmia, mutta koneesta toiseen koodia siirtäessä niiden "ihmissilmille näkymätön" koodaus voi olla eri, joten niitä ei kurssillamme koodissa käytetä.

      Eclipse-ympäristön asentaminen on aiheuttanut edelleen ongelmia. Muistuttaisin, että kurssilla ei kuitenkaan ole mitään eclipse-riippuvuutta, eli jos löydätte itsellenne jonkin mukavamman työkalun, sitä voi hyvin käyttää (kunhan Python on versiota 3 eikä jotain vanhempaa).

      Kuten muutamat huomasivat, aiemmin opittua tarvii myöhemmissä tehtävissä. Muutama mainitsi myös siitä, että annettujen esimerkkien kokeileminen ja muokkaaminen myös itse auttoi ymmärtämään asian paremmin. Nämä molemmat ovat hyviä huomioita.

      Yhdeksi kompastuskiveksi alkukierroksella on osoittautunut sisennykset. Pythonissa sisennyksellä on oleinnainen merkitys kertomaan esim. sen, mitä käskyjä suoritetaan ehtolauseessa (if) eri haarojen sisällä tai toistokäskyn sisällä. (Monissa muissa ohjelmointikielissä käytetään tähän sulkuja.) Eli esim. if-käskyn tai while-käskyn jälkeen sisennetään "yhden pykälän" verran, ja samaan "syvyyteen" sisennetyt komennot kuuluvat tuon käskyn sisään. Kun ohjelmaa jatketaan käskyn jälkeen (tai if-käskyssä else-haara), sisennetään komennot samalle "tasolle" kuin missä tuo if- tai while-käsky olivat. Silti sekä if-käskyn (molempien haarojen) että while-käskyn ehdon perässä on myös kaksoispiste.

      Toinen hämmennystä aiheuttava juttu on ollut muuttujien määrittelyn paikka, eli miksi ja milloin muuttujalle annetaan arvo. Muuttujien määrittelyn paikasta voisi vaikka ihmetellä toistokäskyä while, toisessa materiaalissa annetussa esimerkissä, jossa lasketaan lukujen keskiarvoa sivulla https://plus.cs.hut.fi/y1/2019k/module02/kontrollirakenteet_valinta_ja_toisto_2_1_kokonaan/

      - muttujan i tarkoitus on pitää kirjaa kysyttyjen lukujen lukumäärästä. Tyypillisesti tämmöisiä iteraattoreiksi luokiteltavia muuttujia merkitään yksittäisillä kirjaimilla i, j tai k.

      - Muuttujan i alkuarvo pitää antaa ennen toistokäskyä, koska muuten toistokäskyn lopettavaa ehtolausetta ei voi tarkistaa. Muuttujan arvoa voi muuttaa toistokäskyn sisällä, ja seuraavalla kierroksella tarkistetaan, täyttääkö tämä uusi arvo annetun ehdon. 

      - Lukujen kysyminen tehdään toistokäskyn sisällä, ja se toistetaan tässä 10 kertaa. Tätä voi vaikka testata itse kopioimalla koodi ja lisäämällä sinne rivi, jolla printtaa i:n arvon. 

      - Kun toistokäskyn sisään kuuluvat komennot ajetaan kymmenennen kerran, i:n arvoksi asetetaan 10. Seuraavaksi, kun tutkitaan toistokäskyn lopetusehtoa, todetaan, että 10 < 10 ei enää päde (10 <= 10 kyllä pätisi, mutta sitten toistokäsky ajettaisiin nykyisellä aloitusarvollaan 11 kertaa), joten lopetetaan toistaminen.

      - Myös summa-muuttuja pitää määrittää ennen toistokäskyä. Jos se määriteltäisiin toistokäskyn sisällä, se ei olisi voimassa toistokäskyn ulkopuolella ja joka toistokäskyn suorituskerta se määriteltäisiin uudelleen.

      - Nyt summa lähtee liikkeelle nollasta, ja siihen lisätään jokainen käyttäjältä pyydetty luku. Eli ensin lasketaan laskutoimitus summa + luku katsomalla, mitä arvoja muuttujilla summa ja luku on tällä hetkellä, jonka jälkeen saatu arvo sijoitetaan muuttujaan summa (joka siis nyt muuttuu toiseksi).

      - Loppupähkinä: mikä pitäisi olla summa-muuttujan aloitusarvo, jos haluttaisiinkin laskea kymmenen käyttäjän antaman luvun tulo?


      Viimeiseksi kolmannella kierroksella alkoi toteutuksiin olla jo useampia eri tapoja, joten jotkut olivat ensin päätyneet harhailemaan monimutkaisempien ratkaisujen kanssa. Tehtävänannon alussa pyritään antamaan vinkkejä, mitä toteutustapoja (esim. toistokäsky) olisi tarkoitus harjoitella. Sitä kovin helposti päätyy tekemään asioista monimutkaisempia kuin mitä ne onkaan!

    • Kierros 4


      17.6.2019 mennessä kerätyt palautteet:

      Muutamat kymmenet ovat ehtineet jo tekemään neljännen kierroksen tehtäviä. Punainen väri edistymispalkissa oli säikäyttänyt. Huomautimme tästä eteenpäin A+-ympäristön kehittäjille, että väriksi voisi vaihtaa jonkun kannustavamman, kun kierrokselta vaaditut pisteet on ylitetty. Palataan tähänkin kierrokseen lisää sitten, kun useammat ovat ehtineet tänne asti ja kommentteja on kertynyt.


      24.6.2019 mennessä kerätyt palautteet:

      Eräs toivoi Jupyter Notebookin käyttämistä kurssin alkupään tehtävissä. Vaikka osa tehtävistä varmasti opiskelijoille helpompinä moisella tehtynä vaikuttaisikaan, tuo ei taivu välittömään henkilökohtaiseen palautteeseen kovinkaan helposti - tätäkin vaihtoehtoa on kyllä harkittu, mutta tällaisella kurssilla, jossa opiskelijoilla on paljon vapauttaa ajan tehtävien tekemisen ajoittamiselle, ko tekniikka ei taivu. 

      Tarkistimia varten pitää kirjoittaa funktioiden nimet täsmälleen pyydetyssä muodossa, koska tarkistimet kutsuvat suoraan pyydettyjä funktioita ilman pääfunktiota, jotta saadaan selville, että kyseinen funktio toimii juuri niin kuin on pyydetty. Tämä vastaa tilannetta, jossa ohjelmointitiimi on jakanut tehtävän keskenään niin, että jokainen tekee oman osuutensa.

      Fysiikkatehtäviin voisi ehkä antaa vielä sellaisen vinkin, että tehtävät voisi kirjoittaa itselleen paperille kaavoina (ei vain asciina). Kannattaa kokeilla jollain yksinkertaisilla pienillä numeroilla, mitä saa käsin laskien ulos, tai sitten mitä esimerkkitulosteiden antamilla luvuilla saa.


      1.7.2019 mennessä kerätyt palautteet:

      Suurinpiirtein sata opiskelijaa on tekemässä neljännen kierroksen tehtäviä tällä hetkellä, eli on tähdännyt viikko per kierros -aikataulutukseen. Onneksi kohta sää suosii koodaamista muidenkin kohdalla ;)

      Neloskierroksella ollaan yhdessä olennaisessa osassa ohjelmointia eli ongelman pilkkomisessa osiin. Tähän tämän kierroksen asia eli funktiot auttavat paljon, kuten muutama oli ilahtuneena huomannut. Jos joku asia tehdään usein tai muodostaa oman kokonaisuuden, niin siitä voi tehdä erillisen funktion, vaikka sitä ei tämän kurssin tehtävässä erikseen pyydettäisikään. Ongelmanratkaisussa pätee hyvin vanha "hajoita ja hallitse" -strategia.


      15.7.2019 mennessä kerätyt palautteet:

      Funktioiden palauttamat arvot aiheuttivat jonkin verran hämmennystä. Mutta jos ajatellaan yllä ihmeteltyä muuttujien määrittelyaluetta, niin samaan tapaan funktion sisällä asiat ovat funktion sisäisiä. Kun joku toinen funktio kutsuu funktiota, kutsuva funktio ei tiedä kutsuttavan funktion sisäisestä rakenteesta tai sen käyttämistä muuttujista mitään. Siispä kutsuttavan funktion pitää jotenkin erikseen viestiä kutsuvalle funktiolle, että mitä oli lopputuloksena. Tämä on se, mitä kutsuttu funktio return-komennon avulla siis palautettaa kutsuvalle funktiolle. Pienenä mietintätehtävänä, mitä alla oleva tarkista-funktio palauttaa, jos sitä kutsutaan ensin arvolla 1 ja mitä sitten arvolla -1?

      def tarkista(luku):

          if luku < 0:

              return "negatiivinen"

          else:

              return "positiivinen"


      Kierros 5


      17.6.2019 mennessä kerätyt palautteet:

      Fysiikalle huokailtiin jälleen. Olemme vähentäneet huomattavasti fysiikkatehtävien määrää kurssille ilmoittautuneiden taustan perusteella, mutta koska kyseessä on Perustieteiden koulun kurssi, joka on pakollinen monissa insinööriohjelmissa, niin emme aio luopua kaikesta fysiikasta, vaan pöyrät pyörivät ja sillat ei (toivottavasti)  romahda tehtävissä. Kaikkien on hyvä ymmärtää vähän miten fyysinen maailmamme toimii, ja että on olemassa erilaisia tietokäsityksiä (esim. fysiikan ja psykologian lämpötilaa koskevat käsitykset ovat kovin erilaisia).


      24.6.2019 mennessä kerätyt palautteet:

      Listoista kaivattiin lisää harjoituksia. Jos vitoskierros tuntuu lyhyeltä, kannattanee samantien jatkaa kuudennen kierroksen alkuun, jossa on lisää asioita listoista, ja "pitää tauko" vasta kun materiaalissa siirrytään sanakirjoihin.


      1.7.2019 mennessä kerätyt palautteet:

      Vitoskierros on vähän lyhyempi kuin kutoskierros. Voi siis olla hyvä jatkaa suoraan kuudennen kierroksen ensimmäisiin tehtäviin, ja pysähtyä vasta sanakirjan kohdalla (kuten taisin viikko sitten todeta).


      15.7.2019 mennessä kerätyt palautteet:

      Moni totesi, että tämä kierros auttoi ymmärtämään vakioiden käyttöä. Listat vaikuttivat näppäriltä, mutta osa joutui hieman painimaan niiden käsittelyn kanssa. Tähän voisi ehkä todeta, että kannattaa kokeilla jollain pienemmällä apulistalla erikseen vaikka ihan komentorivillä koodaten, jos ei heti keksi, miten jokin asia toimii. Jos mitään suurempia ongelmia ei tällä kierroksella tehtävissä olevan, suosittelen jatkamaan suoraan seuraavan kierroksen tehtäviin, sillä kuudes kierros tuntuu monista rankemmalta.


      Kierros 6


      17.6.2019 mennessä kerätyt palautteet:

      Pioneeri-oppilaamme ovat ehtineet jo esittää monta kysymystä tämän kierroksen Noppapelistä. Kannattaa siis käydä katsomassa Piazzassa, josko joku on jo kysynyt samaa, jos törmää ongelmiin tehtävää tehdessä. Kiitos muutenkin ensimmäisenä tehtäviä tekeville kommentoinneista sekä tarkistimien virheiden ja puutteiden huomaamisesta! Vaikka yhden tekemän tehtävän on kaksi muuta tehnyt, näköjään aina jää jotain jonnekin huomaamatta.

      Sanakirja herätti lisäkysymyksiä:

      Mitä voi olla avaimena?

      - avaimena voi olla mikä vaan tyypiltään muuttumaton (immutable) olio, esim numero tai merkkijono, jopa totuusarvo tai monikko (esim (1, 1). Lista sen sijaan ei käy, sillä se voi muuttua eli se on tyypiltään muuttuva (mutable)

      - avain voi esiintyä sanakirjassa vain kerran

      Mitä voi olla arvona?

      - arvona voi olla käytännössä minkä tyyppinen Python objekti vaan.

      Voiko olla avainta ilman arvoa?

      - oikeastaan ei. Arvoksi voi asettaa kyllä kaikille avaimille saman oletusarvon sanakirjaa luodessa tai None-olion. Näitäkin voi kokeilla itse, miltä sanakirja näyttää:

      >>> kalat = {"hauki" : 3, "lahna" : None, "ahven" : 1}

      >>> kalat["lahna"]

      >>> type(kalat["lahna"])

      <class 'NoneType'>



      24.6.2019 mennessä kerätyt palautteet:

      Tämän kierroksen kanssa saivat tänne asti selvinneet jo vähän painiakin. Aikaisempien kurssien tuntimääräarvioiden perusteella tämä taitaakin olla kurssin työläimmästä päästä oleva kierros. Tehtävät 6.1 ja 6.3 (ja 6.4) eivät tarvi sanakirjoja.


      1.7.2019 mennessä kerätyt palautteet:

      Tulostusvirheitä jahdattiin edelleen. Kannattaa kopioida tarvittavat tekstit suoraan esimerkkiajoista, niin ei tarvi ihan jokaista kirjoitusvirhettä tarkistimien avulla etsiä. Noppapeli aiheutti sekä harmaita hiuksia että kiinnostuksen siitä, miten eri tavoin sen voi ratkaista. Tämä kierros on viime syksynä teettänyt eniten töitä, ja samansuuntaiselta näyttää tälläkin kurssikerralla olevan nyt palauttaneiden opiskelijoiden perusteella. Tosin kovin moni ei ole vielä tänne asti päässyt


      15.7.2019 mennessä kerätyt palautteet:

      Noppapeli aiheutti ristiriitaisia tunteita, mutta kyllä siitä oli ihan hyvin pisteitä saatu. Noin 10% kurssille ilmoittautuneista on saanut tämän kierroksen tehtyä. Kiitoksia ensimmäisille palautteista. Pyrimme niiden avulla parantamaan tarkistimen antamaa palautetta. Esim. aimmein tarkistin kertoi, että:

      Sinun paluuarvosi:

      27.80

      =============

      Odotettu paluuarvo:

      27.8

      <- mutta tässä ongelma oli se, että toinen näistä oli merkkijono ja toinen float-tyyppinen lukuarvo, eikä luku. Tämä palaute on nyt muutettu antamaan merkkijonot lainausmerkkien kera, eli kertomaan myös palautusarvojen tyypeistä vähän.


      Kierros 7


      1.7.2019 mennessä kerätyt palautteet:

      Moniulotteiset listat koettiin haasteellisiksi. Ne vaativatkin vähän ihmettelyä, jossa voi perinteiset kynä ja paperi auttaa. Matematiikan puolella matriiseista on apua moniulotteisten listojen ymmärtämisessä. Jos jokin tehtävä aiheuttaa liikaa ahdistusta, voi koittaa tehdä toisen tehtävän välissä ja palata sitten ihmettelemään kesken jäänyttä tehtävää. Aika monessa ongelmassa auttaa aika jolloin ei tietoisesti pohdi tehtävää, vaan tekee jotain muuta - tämä toki vaikeuttaa aika-arvioiden tekemistä jälkikäteen. Tuolloin aivojen hermoverkot työstävät ongelmaa, ja virkein silmin ratkaisu saattaa löytyä huomattavasti helpommin. Muistakaa myös, että jo pelkkä kysyminen voi auttaa, ja ratkaisu löytyä itse. Tästäkin on jo useampi esimerkki Piazzassa :)


      15.7.2019 mennessä kerätyt palautteet:

      Pidemmälle ehtineille koodareille voisi muistuttaa, että tämä kurssi on ohjelmoinnin peruskurssi ja tarkoitettu ihan ohjelmoinnin alkeiksi. Jos ja kun tiedätte parempia keinoja, esim. eri tehtäviin erikoistuneita kirjastoja käyttäen, niin tietenkin kurssin tehtävien tekeminen voi tuntua ärsyttävältä ja turhauttavalta. Ensin pitää kuitenkin oppia seisomaan omin jaloin, ennen kuin juokseminen onnistuu. Ainakin pidemmällä tähtäimellä näin ei päädy uusissa tilanteissa niin helposti nenälleen. Oppiipa sitten arvostamaan noita kirjastojakin, joita jatkokursseilla esitellään kunkin kurssin aihetta auttamaan.


      Kierros 8


      1.7.2019 mennessä kerätyt palautteet:

      Kun on seitsemännestä kierroksesta selvinnyt, palautteen perusteella kahdeksas kierros on paljon miellyttävämpi. Vaan mikään ei estäne palaamasta aikaisempaan kierrokseen vähän myöhemmin, ainakaan tässä vaiheessa heinäkuuta. 


      15.7.2019 mennessä kerätyt palautteet:

      Kahdeksas kierros tuntui jo tänne asti ehtineistä helpommalta kuin seitsemäs kierros. Voisikohan tämä johtua siitä, että asia oli jo tutumpaa pienen harjoittelun jälkeen :) 


      Kierros 9


      1.7.2019 mennessä kerätyt palautteet:

      Viimeisellä kierroksella aivot asetetaan eri asentoon, ja siirrytään olio-ohjelmointiin. Vaikka erästäkin ensikertalaista pelotti, tehtävät olivat kuulemma mukavia. Kiitoksia!


      15.7.2019 mennessä kerätyt palautteet:

      Yhdeksäs kierros tuntui palautteenantajista myös ihan ihnimilliseltä, vaikka olio-ohjelmoinnin tausta-ajatus eroaakin alkukurssista.