Podmínky na zápočet jsou podobné jako v ZS. U domácích úkolů budu tentokrát bodovat kvalitu kódu jen u vybraných úloh. Téma zápočtového programu si vyberte do konce výuky v LS (24. 5. 2024). Termín odevzdání zápočtového programu je 31. 8. 2024.

Pro získání zápočtu z programování je potřeba

Domácí úkoly

U domácích úkolů se bude hodnotit jak funkčnost (jestli program dělá to, co má), tak kvalita kódu (čitelnost, atd.). Celkem půjde získat 70 bodů za funkčnost a 30 bodů za kvalitu kódu, dohromady tedy 100 bodů. Abyste získali zápočet, musíte získat minimálně 75 bodů z celkového počtu (tedy za kvalitu a funkčnost dohromady) a z toho minimálně 20 bodů musíte mít za kvalitu kódu.

Kvalita kódu se bude hodnotit jen u některých úloh, v ReCodExu budou označené zeleným kolečkem (🟢). Co budu na vašem kódu hodnotit, si povíme na cvičení. Pokud by vás už teď zajímala nějaká doporučení, jak psát hezký kód, můžete nahlédnout do doporučení pro psaní kódu z předmětu Počítačové systémy (NSWI170).

Na každý úkol budete mít dva týdny a v tomto čase ho můžete odevzdat víckrát. Pro odevzdávání budeme používat systém ReCodEx, který automaticky vyhodnocuje funkčnost vašeho programu. Kvalitu kódu budu hodnotit ručně po uplynutí termínu odevzdání pouze u funkčních řešení (pokud vaše řešení nezíská v ReCodExu bodu a stejně chcete, abych vám jeho kvalitu obodoval, napište to k němu do komentáře).

Doporučuji prostudovat vytvoření nového C# projektu, kde jsou i poznámky o tom, jak projekt vytvořit, aby v ReCodExu fungoval.

Za aktivní účast na cvičeních můžete získat bonusové body, konkrétně 1 bod za každé cvičení. V průběhu semestru bude 11 cvičení (a jedno navíc na zápočtový test), takže můžete získat až 11 bonusových bodů. Účast na cvičeních tedy není povinná, ale je silně doporučená.

Jako řešení domácích úkolů odevzdávejte pouze vaše výtvory, nikoli kód napsaný někým jiným (opsaný od spolužáka/spolužačky, zkopírovaný z internetu, vygenerovaný pomocí ChatGPT, …). Rozhodně není zakázáno hledat na internetu nebo konzultovat se spolužáky, jak se naprogramuje nějaká dílčí část úkolu, ale je zakázáno kopírovat řešení celé úlohy. Podobně pro LLMs (ChatGPT a další) – můžete se ptát, jak se udělá nějaká konkrétní věc v C#, ale nevydávejte vygenerovaný kód za své řešení (v tomto kontextu bych zmínil Stanovisko MFF UK k využívání umělé inteligence ve výuce, zejména bod Buďte transparentní).

Zápočtový test

Test se bude psát na posledním cvičení (22. 5.). Test je praktický – vaším úkolem bude naprogramovat a odladit řešení úlohy – a bude zadán přes ReCodEx (takže ho budete řešit jako domácí úkoly, akorát s časem omezeným délkou cvičení). Další termíny budou vypsány podle potřeby během zkouškového období – celkem máte na test tři pokusy.

Zápočtový program

Zápočtový program je větší kus software, který budete programovat doma během semestru (případně během zkouškového období).

Shrnutí požadavků

  • Specifikaci (téma) mi pošlete mailem do 24. 5. 2024.
  • Program se odevzdává přes MFF GitLab do 31. 8. 2024.
  • Součástí programu je dokumentace, ukázky použití a README.md.
  • Vytvořte rozumnou strukturu projektu (složky pro zdrojové kódy a dokumentaci).

Výběr tématu

Téma zápočtového programu navrhujete vy. Nejpozději do konce výuky v LS (24. 5. 2024) si vyberte téma a zašlete mi mailem specifikaci programu (zhruba jeden odstavec popisu toho, co program bude dělat). Já se s vámi domluvím, jestli je téma vhodné a případně ho společně upravíme. Pokud vás žádné téma nenapadá, podívejte se níže.

Zápočtový program může a nemusí být napsaný v C# – použijte jazyk, který umíte nebo který nejlépe sedí na doménu problému. Na druhou stranu, já bych měl být schopný kód vašeho programu přečíst a pochopit, takže pokud chcete použít nějaký jiný jazyk než C#, domluvte se na tom se mnou už ve specifikaci programu.

Odevzdání

Zápočtový program odevzdávejte nejpozději do 31. 8. 2024, abych měl dost času se na něj podívat a vy jste případně měli možnost program doplnit nebo opravit podle mých připomínek před koncem akademického roku (30. 9. 2024 – po tomto datu už nejde udělovat zápočty v SISu).

Program se odevzdává prostřednictvím MFF GitLabu. Repozitář pro odevzdávání vám bude vytvořen (/teaching/nprg031/2024-summer/student-LOGIN_DO_SISU). Naklonujte si ho do svého počítače a vyvíjejte program v něm za použití Gitu.

Součástí odevzdání je i osobní předvedení programu. Až budete mít program hotový (včetně dokumentace), pošlete mi mailem odkaz na repozitář a domluvíme se na termínu předvedení. Předvedení programu bude spočívat v tom, že mi ukážete, že program jde spustit a že dělá to, na čem jsme se domluvili ve specifikaci. Kromě toho od vás budu chtít shrnutí návrhu programu – high-level rozdělení do tříd/funkcí a jejich účet, prostě takové rychlé shrnutí toho, co dělá která část zdrojového kódu.

V repozitáři si vytvořte vhodnou strukturu projektu – minimálně vytvořte složky pro zdrojové kódy programu a pro dokumentaci. Je lepší, když zdrojové kódy nejsou přímo v kořenovém adresáři projektu, ale jsou ve vlastní složce (aby se nemíchaly s testy, dokumentací, konfiguračními soubory, …). V C# bývá zvykem pojmenovat složku se zdrojovými soubory podle názvu vašeho programu (v jiných jazycích dost často uvidíte složku pojmenovanou src). Taky upravte soubor README.md, aby obsahoval základní informace o vašem programu a odkaz na dokumentaci.

Odevzdávaný program by měl být rozumně odladěný. Především by měl jít spustit bez chyb. Když program budu normálně používat, tak by neměl spadnout. Pokud například program očekává vstup v souboru, tak by neměl spadnout, pokud soubor neexistuje. Měl by místo toho vypsat rozumnou chybovou hlášku pro uživatele.

Použití Gitu

Během vývoje programu používejte Git (s Gitem už jste pracovali v ZS a na Úvodu do Linuxu). Snažte se dělat commity průběžně (např. vždy když dokončíte nějakou ucelenou část práce), ať si u toho i vyzkoušíte, jak s Gitem pracovat. Nezapomeňte, že některé soubory do Gitu nepatří (třeba .exe soubory a další produkty build systému), používejte proto vhodný soubor .gitignore (např. pro C# je vhodný tento – uložte si ho do kořenového adresáře repozitáře a přejmenujte na .gitignore). Pokud si potřebujete Git připomenout, můžete využít třeba tenhle návod, Git ve 100 sekundách, ale nám stačí prvních 60, nebo to samé, ale detailněji.

Dokumentace

K zápočtovému programu napište jeho dokumentaci. Ta by měla mít tři hlavní části:

  • uživatelská dokumentace (jak se program používá),
  • programátorská dokumentace (jak program funguje uvnitř),
  • ukázky použití.

Povinnou součástí uživatelské dokumentace je soubor README.md, který by měl obsahovat informace o tom, jak program spustit (v případě C# to nejspíš bude příkaz dotnet run), jak specifikovat jeho parametry, vstupní soubory, atd. a jak program ovládat (např. pokud programujete hru, tak jaké klávesy slouží k čemu). Pokud váš program pracuje s nějakými vstupními soubory, popište v README.md jejich formát (nebo, pokud by takový popis byl příliš dlouhý, odkažte z README.md na část dokumentace s popisem formátu). Pokud je pro spuštění programu potřeba nainstalovat nějaké knihovny nebo nástroje (např. programujete hru v Unity), napište jaké a v jaké verzi (a ideálně doplňte i jak je nainstalovat). Soubor README.md už ve vašem předpřipraveném repozitáři existuje, upravte ho do vhodné podoby.

V programátorské části dokumentace byste měli vysvětlit hlavní strukturu a koncepty vašeho programu. Když si projekt otevřu já nebo váš spolužák, měli bychom být podle dokumentace schopní program rozšířit a případně vědět, kde v kódu hledat, kdybychom měli opravovat nějakou chybu. Je vhodné jako součást programátorské dokumentace mít popis abstraktního návrhu programu (rozdělení do tříd a co má která třída za úkol) a stručné shrnutí zdrojových souborů (hlavně když jich bude hodně a budou strukturované složek). Taky je fajn psát dokumentační komentáře k funkcím a třídám (aspoň k těm nejdůležitějším).

Součástí dokumentace by také měly být příklady použití. Když program vyžaduje nějaké netriviální vstupy k tomu, aby šel spustit, přidejte příklady takových vstupů do dokumentace. Například pokud váš program kreslí graf na základě dat ze vstupního souboru, dejte do dokumentace ukázkový soubor s daty. Pokud programujete hru nebo jiný interaktivní program, pak nejspíš příklady použití nejsou potřeba.

Výrazně doporučuji dokumentaci psát anglicky, ale pokud si na to nevěříte, můžete ji napsat česky (příp. slovensky).

Dobrým způsobem, jak psát dokumentaci, je pořídit si složku documentation (nebo docs) ve vašem repozitáři a v ní mít několik Markdown (.md) souborů a rozcestník README.md s odkazy na ostatní soubory. Markdown je jednoduchý jazyk na formátování dokumentů. Pokud ho neznáte, rychlý přehled základních příkazů najdete tady, podrobnější návod pak tady nebo tady.

Další informace a nápady na témata

Spoustu užitečných informací o zápočťácích už sepsali jiní, tak nemá smysl je znovu psát. Tady je pár odkazů: Martin Mareš má na webu svého cvičení hezky sepsané informace o zápočťácích. Navíc poskytuje i seznam témat pro inspiraci (pro LS je vhodná obtížnost 5 a vyšší), takže doporučuji přečíst. Detailní informace včetně nápadů na témata sepsal taky Jirka Mayer. Nakonec, Rudolf Kryl má na webu návod na psaní dokumentace k zápočťáku, také doporučuji přečíst.