Seminář z funkcionálního programování

Organisace a pravidla absolvování

TL;DR: Je potřeba udělat dvě domácí úlohy s peer review a k tomu 5/7 miniúloh s neomezeným odevzdáváním do konce května.

Organisace kursu

Tento kurs se zabývá programováním ve funkcionálním jazyce Haskell, a to především z praktického hlediska. Je organisován jako série nahraných přednášek a on-line konsultací s týdenní periodicitou. Přítomnost na konsultaci není povinná, ale rádi se na ní s vámi potkáme.

Samostudium

Ve studijních materiálech a interaktivní osnově budou zveřejněny slajdy a videonahrávky přednášek. Co je hotové z loňska, máte k disposici hned, zbytek připravíme včas na příslušný týden. Doporučujeme každý týden zhlédnout jednu přednášku a pustit se do řešení miniúlohy nebo úlohy.

Ve videích z loňska občas říkáme nějaké organisační pokyny nebo informace k úlohám. Tyto části prosím ignorujte. Řiďte se jen interaktivní osnovou, e-maily a diskusním fórem.

Konsultace

Máme nepříjemný rozvrhový slot v 8.00, konsultace ale uspořádáme až v druhé polovině (tj. od 9.00). Každý týden se budeme věnovat primárně látce příslušného cvičení, očekáváme tedy, že už budete mít video zhlédnuté. Využijte konsultací k vysvětlení nejasností nebo si přijďte pro nápovědu k úloze, jste-li zaseknutí.

Komunikační technologie: E-učebna v ISu.

Mimo to se můžete samozřejmě kdykoli ptát na diskusním fóru, případně využít předmětového Discordu (odkaz se dozvíte e-mailem) nebo kanálu IRC: ##ib016 na Freenode (lze využít webový klient https://lounge.fi.muni.cz s fakultními přihlašovacími údaji). Mezi Discordem a IRCem máme most, nemusíte proto sledovat obojí.

Úlohy a bodování

Během semestru budou zadávány dva typy úloh, které se budou lišit rozsahem, bodováním i způsobem hodnocení. Navíc k větším úlohám budete psát stručnou zpětnou vazbu svým kolegům.

Miniúlohy

Tyto drobné úložky (či spíše příklady) slouží k vyzkoušení/procvičení obsahu jedné přednášky a vlastně nahrazují práci na cviku.

  • Počet: 7 za semestr (tj. ne každé cvičení bude mít přiřazenu miniúlohu).
  • Forma: Odpovědník s jedním až třemi políčky pro implementaci funkce/instance/výrazu.
  • Odevzdání: Neomezeně mnohokrát a kdykoli do konce května.
  • Rozsah a náročnost: Přibližně kolem hodiny (při úplném pochopení přednášky tak 15 minut).
  • Další požadavky: Typicky budou předepsány techniky ze cvičení, jimiž se má úkol řešit.
  • Kontrola: Odpovědníky jsou navázány na automatické testy, jejichž výsledky máte k disposici. Po úspěšných testech řešení zkontroluje ještě vyučující, zda používá předepsané techniky, a případně může dát drobnou zpětnou vazbu. Kontrola vyučujícím bude probíhat pravidelně (upřesníme). Doporučujeme řešit úlohy včas a pravidelně, aby je vyučující stíhali kontrolovat průběžně (= rychle) a vy jste v případě potřeby měli čas napravit nedostatky.
  • Bodování: Binární (0 nebo 1); zadává vyučující po kontrole.
  • Zveřejnění: Studentská ani vzorová řešení nejsou veřejná.

Větší domácí úlohy

Tyto úkoly slouží k tomu, abyste si vyzkoušeli napsat delší kód v Haskellu.

  • Počet: 2 za semestr (ve 3. a 8. týdnu).
  • Forma: Jeden soubor vložený do odevzdávárny.
  • Odevzdání: Neomezeně mnohokrát, do tří týdnů od zadání.
  • Rozsah a náročnost: Přibližně 300 řádků kódu, práce na jednotky hodin (nejvýše víkend :-)).
  • Další požadavky: Kód by měl být přeložitelný s přepínačem -Wall bez varování a měl by mít čistý výstup HLintu. Pokud se rozhodnete doporučení HLintu nedodržet, stručně to v komentáři zdůvodněte.
  • Kontrola: Soubory v odevzdávárně se pravidelně kontrolují automatickými testy, jejichž výsledky uvidíte v poznámkovém bloku. Po konci odevzdávání kód prohlédne ještě vyučující, který kromě bodů napíše i zpětnou vazbu.
  • Bodování: Diskrétní: 0, 1, 3 nebo 4 body podle funkčnosti (primárně), ale také efektivity, elegance a stylu řešení. (Pro zisk jednoho bodu stačí úlohu úplně neodfláknout. :-))
  • Zveřejnění: Řešení všech studentů jsou po konci odevzdávání zveřejněna všem studentům předmětu.

Peer review

Kromě psaní kódu je důležité i jeho čtení a pochopení; u větších úloh proto chceme, abyste si kódy navzájem četli a hodnotili.

  • Počet: 2×2 za semestr – dvě cizí řešení po skončení každé větší úlohy.
  • Forma: Vepisování komentářů přímo do kódu.
  • Odevzdání: Týden po konci odevzdávání.
  • Rozsah: Ke každému řešení alespoň tři odstavce textu či odrážek:
    • Co nefunguje (chová se v rozporu se zadáním) a proč?
    • Co se vám líbí? (Které myšlenky řešení se vám zdají elegantní či nadprůměrně dobré a proč?)
    • Co byste udělali jinak? (Které myšlenky či části kódu se vám zdají matoucí, nevhodné nebo byste je udělali jinak?)
  • Kontrola: Vyučující po konci vyplňování ověří, že review má dostatečný rozsah a přínosnost (tj. zda to není odfláknuté :-)).
  • Bodování: Binární (přijato/nepřijato); zadává vyučující po kontrole.
  • Zveřejnění: Zpětná vazba od všech hodnotitelů i vyučujícího jsou po konci peer review zveřejněna všem studentům předmětu.

Podmínky získání zápočtu

Pro úspěšné absolvování kursu je zapotřebí splnit následující čtyři podmínky:

  • Mít splněno alespoň pět ze sedmi miniúloh.
  • Mít obě velké úlohy splněny na nenulový počet bodů.
  • Mít za velké úlohy alespoň čtyři body z osmi.
  • Poskytnout zpětnou vazbu všem čtyřem cizím řešením.