TIEA341 -- Funktio-ohjelmointi -- 2020

HUOM: Tämä on vanha kurssi. Jos etsit vuoden 2022 kurssia, hae luennot sisusta. Ollaan nimittäin pitkästä aikaa taas kontaktiopetuksessa!

1. Ajankohtaisia asioita

Korona + Sisu aiheuttavat hieman päänvaivaa mm. ilmoittautumisen ja tilaisuuksien suhteen. Tästä syystä tälläkin sivulla on ensin poikkeustilanneohjeita.

Varsinainen kurssikuvaus ja asiasisältö ovat seuraavassa luvussa.

1.1 Huom!

Luennoija on enää töissä yliopistolla keskiviikkoisin. Eli, asiat etenevät vähän hitaasti (ja keskiviikkoisin).

Kurssiarvosanat tulevat tähän sivun alkuun kun ovat valmiit — ne eivät ole edes kokonaan kiinni minusta vaan osaksi myös roikkuvista suorituksista.

1.2 Kurssi on (melkein) ohi!

Kurssin tilaisuudet ovat nyt pidetty ja suorituksetkin ovat muutamaa uusintaa ja tenttiä vaille valmiina.

Kurssin lopun aikatauluista sen verran, että arvosana tulee noin viikko tentin sulkeuduttua kaikille. Ennen arvostelua tälle sivulle tulee lista, josta oman arvosanan voi katsoa ja tarvittaessa reklamoida ennenkuin se on rekisterissä.

Arvosana on suora keskiarvo, normaalein pyöristyssäännöin välikokeista ja choplifter-harjoitustyöstä. (Tai, jos teit sekä välikokeita, että tentin, vastaavassa suhteessa painotettu keskiarvo).

Pyrin lisäämään tarvittaessa välikokeita ja katsomaan niitä läpi, mutta tahti hidastuu kurssin päätyttyä. Kaikki tämä tapahtuu vapaa-ajallani.

Olen myös vaihtanut kurssin päätyttyä työpaikkaa — teen tulevan vuoden softaa teollisuudessa ja tietysti Haskellilla.

Kiitokset kaikille osallistujille ja toivottavasti tästä jäi kaikille jotain tulevaisuuden varalle!

Ville

PS. se 'op 6' optio on vielä olemassa, mutta katsotaan vielä hetki milloin saan sen järjestymään.

Kiitos kurssista! Paljon vaivaa oli nähty kurssin eteen ja se näkyi. Kyllä yliopisto tekee ison virheen, kun ei arvosta opetus- ja tutkimushenkilökuntaansa riittävästi… Onnea uusiin hommiin!

05 Nov 20

1.3 Tentti, 1 uusinta

On tarkastattu Vastauksesi löydät täältä, kunhan viimeinen tenttijä saa tentin tehtyä.

1.4 Tentti!

Tentti aukeaa suoritettavaksi 30.10.2020 kello 15:00 mennessä. Tentin saa suorittaa vapaasti aina 6.11.2020 23:59 asti. Linkki tenttiin tulee tähän kun tentti aukea.

Aiemmasta poiketen, tentin aikaraja on 2.5h jotta se olisi yhteismitallinen välikokeiden kanssa.

Huomatkaa, että etätentti ja vapaa suoritus osoittaa suurta luottamusta teihin! Kukaan ei varmaan haluaisi takaisin e-tenttitilaan tai agoran auditorioon tenttimään joten käyttäydytään sen mukaisesti, että tälläistä menettelyä voidaan jatkaa:

  1. Tentti tulee tehdä yksin. Eli, et saa kysyä apua toiselta ihmiseltä tentin aikana.
  2. Tentissä saa käyttää kääntäjää ja muita kurssin ohjelmistoja ilman erillistä mainintaa.
  3. Tentissä saa käyttää kaikkea kurssimateriaalia ilman erillistä mainintaa.
  4. Tentissä saa käyttää muuta materiaalia kuten kirjoja, verkkosivuja, tai videoita. Nämä on merkittävä lähteenä tenttivastaukseen.

Merkityt lähteet vaikuttavat arviointiin.

Ks. ohjeet alla.

1.4.1 Tentti on arvioitu

Tulokset ovat tällä sivulla

1.5 Välikoe 5 → Harjoitustyö

Välikokeen 5 korvaaminen harjoitustyöllä on mahdollista (ja suositeltavaa)

Harjoitustyön idea on jatkaa vähän opintopisteen 5 projektia. Alustava pisteytys menisi näin:

  • Luennoijan versio ohjelmasta on selitetty kommentteihin vähän sinnepäin (arvosana 1)
  • Luennoijan versio ohjelmasta on selitetty kommentteihin ääsääntöisesti virheittä ja vähintään jokaisen sidonnan tasolla (määritelmät, niiden sisäiset letit yms). (arvosana 2)
  • Ohjelmaan on tehty oma lisäys, joka muuttaa kohtalaisesti ohjelman ulkonäköä (arvosana 3)
  • Ohjelmaan on tehty oma lisäys, joka muuttaa ohjelman toimintaa jollain mielenkiintoisella ja harkitulla tavalla (arvosana 4)
  • Ohjelmaan on lisätty merkittävästi uusia peli-elementtejä (tuuli, muita lentokoneita, puita johon voi törmätä) (arvosana 5)

Jos haluat välikokeen, laita postia.

Harjoitustyön palautuslaatikko

1.6 Välikoe, 4 op

Välikoe 4 on arvioitu.

Uusinta alla.

1.7 Välikokeiden uusinnat

1.7.1 Välikoe 4

1.7.2 Välikoe 3

1.7.3 Välikoe 2:

1.7.4 Välikoe 1:

1.8 Välikoe, 3 op

Välikoe 3 on arvioitu. Tulokset.

1.9 Välikoe, 2op

Välikoe 2 on tehtävissä 30.9 kello 14:00 - 5.10 kello 18:00.

Välikokeen tulokset ovat nyt julkaistu.

Uusinta, samoin kuin 1 op:n välikokeen uusinta aukeaa 14-15.10 aikatauluista riippuen.

1.10 Ensimmäinen välikoe (1op)

Ensimmäinen välikoe järjestettiin 21.9, kello 13:45 alkaen.

Välikokeen tulokset ovat nyt julkaistu. Samalta sivulta löydät ohjeita mitä seuraavaksi tarvitsee tehdä.

Löydät välikoevastauksesi välikoesivulta.

1.11 Ilmoittautuminen, Sisu ja paikkamäärä

Ellei muuten ilmoiteta: voit tulla kurssin tilaisuuksiin vaikka Sisussa et voisikaan valita niitä

1.12 Muutokset kurssijärjestelyissä

Luennolla kerrottiin, että nykyjärjestelyjä kokeillaan viikko ja niitä säädetään jos tulee tarvetta. Tässä lista muutoksista, jotka pyritään tällä tietoa toteuttamaan:

  • Tehdään asioita rauhallisemmalla syklillä, eli vältetään ainakin alle 10 min työskentelyjaksot (11.9 alkaen)

  • Annetaan itse tekemiselle enemmän aikaa ja käytetään kaveria apuna jonkinverran vähemmän (11.9 alkaen)

  • Alleviivataan, että läsnäoloon perustuva suoritus on vain yksi vaihtoehto. Tentti ja itseopiskelu on voi olla hyvä suoritustapa ja siihen on paljon materiaalia (ks. tentti). Tilaisuuksissakin saa käydä ja ei edes tarvitse ottaa osaa.

    Eli, jos koet hyödyllisemmäksi opiskella itsenäisesti niin tottakai! Autamme sähköpostilla minkä voidaan, mutta meitä on vain kaksi.

  • Tehdään esimerkkitentti. Tätä toivottiin useasta suusta ja se on hyvä ajatus. (Todennäköisesti esimerkkitentti saadaan sivuille 14.9 mennessä)

  • Aloitetaan keräämään yhdessä muistilistaa käytetyistä funktioista ja rakenteista, että yksinkertaisten asioiden selitys löytyisi mahdollisimman läheltä.

# sis

2. Sisältö

Kurssilla opiskellaan Funktio-ohjelmoinnin alkeet käyttäen Haskell-kieltä. Tämä sisältää esimerkiksi tyyppien ymmärtämisen, rekursion sujuvan käytön ohjelmoidessa yleisesti ja ohjelmoinnin käyttämättä muuttuvia arvoja.

Opetustapa on monen henkilön workshop, jossa pääpaino on tehtävien tekemisessä ohjatusti yhdessä muiden opiskelijoiden kanssa. Kurssin tilaisuuksiin kuuluu olennaisena osana myös muiden opiskelijoiden avustaminen -- mikä on toki parasta oppia itsellekin.

2.1 Harjoitukset

  1. ma 07.09.2020 12.00–16.00
    • Aiheet:
      • Mitä on funktio-ohjelmointi?
      • Miten Haskell ohjelma käännetään?
      • Millainen on Haskell ohjelman rakenne karkealla tasolla
    • Tehtävät:
    • Kalvot
    • Video tilaisuudesta
  1. ti 08.09.2020 14.00–18.00
  1. pe 11.09.2020 10.00–14.00
  1. Ma 14.09.2020 12.15–16.00
  1. Ti 15.09.2020 14.15–18.00
  1. Pe 18.09.2020 10.15–14.00
  1. Ma 21.09.2020 14.15–16.00
    • 1op Välikoe, 14.15 - 15.30
    • Kalvot
  1. Ti 22.09.2020 14.15–18.00
  1. Pe 25.09.2020 10.15–14.00
  1. Ma 28.09.2020 14.15–16.00
  1. Ti 29.09.2020 14.15–18.00
  1. Pe 2.10.2020 10.15–14.00
  1. Ma 5.10.2020 14.15–16.00
  1. Ti 6.10.2020 14.15–18.00
  1. Pe 9.10.2020 10.15–14.00
  1. Ma 12.10.2020 14.15–16.00
  1. Ti 13.10.2020 14.15–18.00
  1. Pe 16.10.2020 10.15–14.00
  1. Ma 19.10.2020 14.15–16.00
  1. Ti 20.10.2020 14.15–18.00
  1. Pe 23.10.2020 10.15–14.00
  1. Ma 26.10.2020 14.15–16.00

2.2 Tehtävät

Kurssilla on muutama pieni kotitehtävä. Tässä lista.

2.2.1 OP 1 kotitehtävät

  • Luentomuistiinpanot. Deadline 14.9, kello 12.
    • Jos jäi tekemättä, niin uusi deadline on 15.9. 14.00. Muuten jää 1 op saamatta.
  • Muistilista. Deadline 21.9, kello 12.
  • Funktiot (*). Deadline: 15.9, kello 14 (Vain jos et tehnyt jo harjoituksissa)
  • Maybe+Funktiot (*). Deadline: 15.9, kello 14 (Vain jos et tehnyt jo harjoituksissa)
  • Listoja (*) Deadline 21.9 kello 14

2.2.2 OP 2 kotitehtävät

Tehtävät, jotka on merkitty (*)-merkinnällä ovat heille, jotka eivät saaneet harjoituksissa tehtävää tehtyä. Eli, jos olit tilaisuudesta poissa, sinun ei tarvitse (mutta kannattaa kuitenkin) tehdä nämä tehtävät.

HUOM. Tehtävät ovat pakollisia. Opintopisteitä ei myönnetä ilman — mutta näitä ei tule kovin monta tällä kurssilla.

Linkki luentomuistiinpanot- tai harjoitus 1-tehtävään ei toimi. Tulee tällainen ilmoitus; “This page does not yet exist. You cannot create documents or folders here.”

VT: Jos linkki ei toimi, katso, että osoite selainpalkissa on https://tim.jyu.fi/view/kurssit/tie/tiea341/2020s/koti, eikä jotain muuta. TIM hieman yllätti tässä.

08 Sep 20 (edited 08 Sep 20)

2.2.3 OP 3 kotitehtävät

2.2.4 OP 4 kotitehtävät

2.3 Kurssin alkupään komennot ja funktiot

Pyydettiin listaa, mistä löytää selitykset eri komennoille nopeasti.

Laitoin työn alle: Kurssin komennot, funktiot ja rakenteet

3. Suoritustavat

Kurssilla on kaksi suoritustapaa, joista suositellaan ensimmäistä, eli läsnäoloon perustuvaa suoritustapaa. Kummallakin suoritustavalla voit suorittaa 1-5 opintopistettä.

3.1 Suoritustapa A -- Läsnäolo ja välikokeet

  • Ole paikalla tilaisuuksissa (kolme tilaisuutta viikossa, näistä saa olla poissa 4 tilaisuutta kurssin aikana)
  • Osallistu tekemiseen
  • Tee mahdolliset kotiharjoitukset (julkaistaan luennolla ja sen jälkeen tällä sivulla)
  • Tee välikoe (luennon aikana)
  • Suoritettujen välikokeiden määrä (1-5 koetta) määrää opintopisteiden määrän (1-5op)

Jos välikoe menee huonosti, se tehdään uudestaan.

Vanhan materiaalin linkki ei toimi? - Nyt sain auki!

09 Sep 20 (edited 09 Sep 20)

Vanhan materiaalin linkki aukeaa minulla testatusti. En keksi oikein muuta kuin, että jos otat yhteyttä jostain todella hassusta ip-avaruudesta niin tulisi palomuuri väliin (ts. oletko ulkomailla)

-VT

09 Sep 20
# tentti

3.2 Suoritustapa B — Tentti

  • Tule tenttiin. Se on viimeisellä luennolla
  • Voit valmistautua mm.
    • Seuraamalla näit tilaisuuksia
    • Vanhan materiaalin perusteella
      • Vanha materiaali sisältää itseopiskelupakettina:
        • Luentovideot (~2h*16, eli molemmat 2018 ja 2019 luennot)
        • Tehtävät kurssisivulla (jos tarvitset tunnuksen, kysy luennoijalta!)
    • Lukemalla Haskell From First Principles kirjan sivut 1—685
      • Kirja sisältää myös harjoitustehtäviä
      • Kirja on melko kevyttä lukemista
      • Ohjeellinen mitoitus keskivaativalle tekstille on 10 sivua tunti, eli sivumäärä vastaa karkeasti 70 tuntia. Opintopisteisiin suhteutettuna jää vielä 55 tuntia tehtäviin ja muuhun. (Toki painotuksia voi muuttaa mieleisekseen)
  • Sisältää ohjelmointi ja teoriakysymyksiä. Materiaalia saa käyttää.
  • Tentissä on 5 osiota. Hyväksyttävästi vastattujen osioiden määrä määrää opintopisteet (1-5op)
  • Tekniikka vapaa. Yritän tehdä tentistä haastavan, mutten mahdotonta.

3.3 Suoritustapojen olennainen ero

Jos tulet tilaisuuksiin ja teet kaiken mitä pyydetään ja välikoe menee kokonaisuutena huonosti, voit uusia sen. Toisin sanoen, mennään luennoijan vastuulla.

Jos opiskelet omalla tyylillä (mikä on hieno asia!) vastuu osaamisesta on sinulla.

4. Työkalut ja niiden asentaminen

HUOM: Pyri asentamaan työkalut ennen ensimmäistä luentoa. Opetus annetaan videoneuvotteluna verkon yli ja jos kaikki lataavat gigatavun asennuspaketin luennon aikana, jokin pettää aivan varmasti.

Kurssin työkalujen asentamisessa on olennaisesti kaksi vaihetta:

  • Asennetaan kurssin tärkein työkalu, stack, joka hoitaa kääntäjän ja kirjastojen asentamisen ja koodin kääntämisen. Asennusohjeet löydät em. linkin takaa.
  • Asennetaan kääntäjä komentorivikomennolla stack --resolver=lts-16.12 setup

Näistä jälkimmäinen askel vie huomattavan pitkään, joten tee tämä hyvissä ajoin ennen kurssin ensimmäistä tilaisuutta.

Tämän jälkeen on hyvä kokeilla, että toimiiko asennus:

  • luo projekti komennolla stack --resolver=lts-16.12 new testiprojekti https://tim.jyu.fi/files/253254/tiea341.hsfiles
  • siirry syntyneeseen hakemistoon (cd testiprojekti)
  • komenna stack build. Tämä kääntää edellä syntyneen esimerkkiohjelman
  • komenna stack exec testiprojekti. Tämä ajaa edellä käännetyn ohjelman

Viimeisen vaiheen pitäisi tuottaa teksti 'Hello TIEA341'. Jos ei, niin katso löytyisikö edeltävien komentojen tulosteista virheilmoituksia.

(Jos et tiedä mihin yo. komentoja kirjoitetaan ja käytät windowsia, kokeile aluksi etsiä koneeltasi cmd.exe niminen ohjelma.)

Edellisten lisäksi tarvitset kunnollisen tekstieditorin. Suosittelen Visual Studio Codea, johon on asennettu Haskell-lisäosa (asenna se vscoden extensions marketplacesta, valikosta View/extensions ja sieltä Haskell).

Jos et halua käyttää vscodea pärjäät millä tahansa kelvollisella editorilla jota olet tottunut käyttämään.

Näiden käyttöä opetellaan sitten kurssin harjoituksissa.

Vaihdoin tästä lts-16.10 -> lts-16.12 paremman windows-toimivuuden vuoksi.

Ville

02 Sep 20

Vaihdettu uusi kurssikohtainen projektipohja.

Tämä ei valita käännettäessä readme-tiedoston puutteesta.

VT

12 Sep 20

4.1 Projektien luonti

Haskell on eräänlainen kielilaboratorio, joka on vuosien varrella muuttunut merkittävästi. Valitettavasti peruskirjasto ja oletusasetukset eivät ole ihan pysyneet perässä.

Tästä syystä kurssille on tehty yhteinen joukko järkeviä asetuksia. Jotta nämä asetukset saa käyttöön, uudet ohjelmointiprojektit luodaan komennolla:

stack --resolver=lts-16.12 new testi https://tim.jyu.fi/files/253254/tiea341.hsfiles

HUOM! Jos yo. komento aiheuttaa ongelmia stack repl:n kanssa (ei värejä, outoja merkkejä), niin korvaa komennon loppu osoitteella https://tim.jyu.fi/files/251520/nocolor-tiea341.hsfiles. Tai asenna toimiva terminaaliohjelma.

HUOM! komennon url voi muuttua kurssin aikana jos jotain tarvitsee muuttaa. Tarkkaile tätä sivua.

(Asetukset näet täältä: tiea341.hsfiles, nocolor-tiea341.hsfiles)

5. Tukimateriaali

Tentin tueksi voit tutustua seuraaviin materiaaleihin:

Nämä materiaalit toimivat myös tentin pohjana.

6. Välikokeet & tentti

6.1 Välikokeet

Välikokeiden ajat ilmoitetaan vähintään päivää ennen välikoetta ao. listassa.

Välikokeet uusitaan, mikäli ne menevät kokonaisuuden kannalta liian huonosti.

6.2 Tentti

Tentti järjestetään vapaasti suoritettavana tenttinä 30.10 15:00 - 6.11.2020 23:59. Linkki tenttiin tällä sivulle.

6.2.1 Valvonta

Tentin rehellisyys varmistetaan puhelimitse suoritetuilla pistokokeilla tenttiä seuraavalla viikolla. Pidä huoli, että yhteystietosi ovat ajan tasalla ja yliopiston järjestelmistä nähtävissä.

7. UKK

  • Voinko jatkaa vanhaa kurssisuoritusta?
    • Kyllä. Voit jatkaa kurssisuoritusta, mikäli sinulla on 1-4 opintopisteen suoritus rekisterissä. Tällöin et ole velvoitettu tekemään mitään (esim. läsnäolo, välikokeet, tehtävät) niiden opintopisteiden suorittamiseksi, jotka sinulla on jo rekisterissä.
  • Voinko käyttöä aiempina vuosina tekemiäni tehtäviä jotenkin hyödyksi?
    • Ainoastaan hankitun osaamisen kautta: sinun on nyt helpompi suoriutua annetuista tehtävistä.
  • Jos olen suorittanut kurssin alkupään aiemmin, mistä tiedän milloin tulla mukaan?
    • Tämä sivun alussa on lista välikokeista. Voit katsoa siitä, missä kohtaa kurssi suunnilleen on menossa. Kertaamaankin saa tulla!
  • Mitä tapahtuu, jos en pääse riittävän usein tilaisuuksiin (yli rajan 20/24)?
    • Et voi suorittaa kurssia välikokeilla. Mutta, voit seurata kurssin tilaisuuksia ja tulla lopputenttiin, joka järjestetään heille, jotka eivät tehneet välikokeita.
    • Poikkeuksena tähän ovat menot kuten sairastumiset, kertausharjoitukset yms. menot, joita et voi välttää. Näistä syistä voit olla poissa pidemmän ajan. (Huom: toisten kurssien tilaisuudet ja omaehtoinen matkustelu eivät kuulu tähän listaan)
  • Voinko tehdä osan kurssista välikokeilla ja tentillä loput?
    • Joo. En tullut ajatelleeksi tätä itse, mutta miksei.

Mitenkäs kurssi suoritetaan jos haluaa esim. tehdä vain 1op laajuisena tai 2op jne? Pitääkö silloinkin olla läsnä kaikilla luennoilla (miinus neljä sallittua poissaoloa)? Selvennyksen vuoksi haluisin tietää, että onko 3op tietotekniikan pääaineopiskelijoille vähimmäis opintopistemäärä?

27 Aug 20

Jos olet läsnä siihen asti, että tulee 1op välikoe ja välikoe menee läpi, niin voit lopettaa kurssin siihen. Saat tällöin 1op suoritusmerkinnän.

Neljä poissaoloa sallitaan, riippumatta kuinka paljon kurssia suorittaa.

Opintopistevaatimus riippuu siitä minkä vuoden ohjelmaa suoritat. Eli varmin vastaus siihen löytyy omalta opinto-ohjaajalta.

Ville

31 Aug 20

These are the current permissions for this document; please modify if needed. You can always modify these permissions from the manage page.