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 (které ale můžete stihnout i na cvičení).

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 dvouhodinových cvičení s týdenní periodicitou. První polovina je obvykle přednáškovitější, druhá je víc samostatné programování a řešení miniúlohy. Cvičení nejsou povinná. Je na zvážení každého, zda dokáže splnit podmínky absolvování kursu. Očekáváme ale, že si kurs zapíšou zejména studenti se zájmem o probíranou problematiku :-).

Ú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čné peer review.

Miniúlohy

Tyto drobné úložky (či spíše příklady) slouží k vyzkoušení/procvičení obsahu jednoho cvičení.

  • 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 srpna.
  • Rozsah a náročnost: Měly by být bez potíží zvládnutelné během cvičení.
  • 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 opravit chyby.
  • Bodování: Binární (0 nebo 1); zadává vyučující po kontrole.
  • Zveřejnění: Studentská ř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: Formulář v ISové aplikaci pro vzájemné hodnocení.
  • Odevzdání: Týden po konci odevzdávání, do té doby lze libovolně měnit.
  • 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í (0 nebo 1); 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.