Programování v jazyce Rust

Úvodní informace

Hodnocení

Předmět je ukončený kolokviem. Kolokvium získá student právě tehdy, pokud dostane dostatečný počet bodů za práci během semestru a zkouškového období.

Celkem se dá získat 100 bodů za práci během semestru a zkouškového období, na úspěšné absolvování předmětu je potřeba získat minimálně 75 bodů. Tyto body lze získat za následující:

  • Iterace: 10 zadání po 5 bodech, celkem maximálně 50 bodů.

  • Týmový projekt: 1 vypracování týmového zadání, zakončené úspěšnou obhajobou během zkouškového období, maximálně 50 bodů.

V případě výjimečného řešení iterací nebo projektu, aktivitě na cvičeních či jiné součinnosti je možné získat bonusové body. Tyto bonusové body slouží jako tvrdé body a počítají se do studentova bodového zisku se stejnou váhou jako body za iterace a projekt.

Prerekvizity

Tento předmět očekává znalost alespoň

  • jednoho nízkoúrovňového jazyka (ideálně C++, minimálně jazyk C v rozsahu předmětu PB071 nebo jeho ekvivalentu),
  • jednoho funkcionálního jazyka, nebo alespoň funkcionálního paradigmatu (ideálně v rozsahu předmětu IB015),
  • základní znalost SQL a návrhu databázových služeb (ERD, migrace, SQL příkazy)
  • základní znalost RESTových rozhraní a webových služeb.

Také je pro účely odevzdávání úloh důležité mít základní až středně pokročilou znalost práce s Gitem a Gitlabem (resp. Githubem  v mnohém jsou si tyto služby podobné). Sekce k iteracím v této osnově sice obsahuje určitý návod pro práci s iteracemi, na cvičeních či při týmových projektech bude znalost Gitu důležitá.

Výhodou je znalost nějakého frontendového webového frameworku/knihovny, jakými jsou např. React, Svelte či Vue. Pro seznámení s webovým vývojem a frontendovou knihovnou React můžete využít .

Forma komunikace

Na komunikaci v rámci tohoto předmětu jsme se rozhodli primárně používat platformu Discord, zejména díky jednoduchosti jejího používání a možností komunikace v reálném čase. Na našem předmětovém Discordu se můžete zeptat na cokoliv, požádat o pomoc s úkolem nebo třeba chtít něco dovysvětlit z přednášky. V každém případě vám by vám měl odpovědět někdo cvičících nebo přednášejících, a vaše konverzace o problému můžou pomoct i někomu dalšímu.

Pokud nejste zvyklí Discord aktivně používat, můžete si nastavit emailové notifikace na zprávy, aby vám neunikla oznámení, které můžeme na našem serveru vyvěšovat (např. o vydání iterace).

Cvičení

Cvičení tohoto předmětu budou probíhat buď v počítačových učebnách, nebo v běžných výukových učebnách.

Cvičení sk. 01 (Vrbka), sk. 03 (Hrdlička), sk. 04 (Chudíček a Mišík), sk. 06 (Adamove) a sk. 07 (Šlézar a Wehrenberg) probíhají v místnostech bez počítačů. Pokud jste přihlášení v takovémto cvičení, je žádoucí si donést vlastní počítač. V opačném případě vám cvičení zůstane jen jako další pasivní část výuky.

Cvičení sk. 02 (Holub) probíhají v místnosti A215. Jde o místnost s Windows počítači, na kterých lze ve většině případů pracovat bez problémů, přesto doporučujeme si donést vlastní počítač.

Cvičení sk. 05 (Zeman) probíhají v relativně nové místnosti B011, nacházející se na úrovni posluchárny D2. Jedná se o místnost s počítači s operačním systémem Linux.

Důležitá poznámka ke cvičením

Iterace vám během semestru bude kontrolovat a opravovat váš/vaši cvičící.

Je tedy žádoucí, aby každý student měl do konce možnosti změn v zápise předmětů (tj. do 1. 10. včetně) zapsanou seminární skupinu. Pokud tak student neudělá, bude mu udělena známka N.

Prerekvizity pro cvičení

V tomto předmětu budeme v druhé polovině semestru do značné míry používat kontejnerizaci (Docker / Podman), takže očekáváme, že jste se s danými technologiemi už střetli (alespoň na úrovni Docker Compose a CLI příkazů).

V souvislosti s Dockerem budeme pracovat s relačním databázovým systémem PostgreSQL.

Na fakultních počítačích v učebnách bude možné místy nahradit kontejnerizaci například použitím SQLite databáze. Jelikož však SQLite není ani zdaleka tak rozsáhlé jako Postgres, doporučujeme si minimálně na tuto část semestru nosit vlastní počítač.

Docházka na cvičení

Cvičení tohoto předmětu nemají povinnou docházku, ale za účast na 1 cvičení však student získává možnost opravit si 1 iteraci. Toto pravidlo se uplatňuje od 3. týdne semestru, možnosti opravy se sčítají a je možné je použít na jakoukoliv probíhající nebo budoucí iteraci. Například pokud student navštíví cvičení v 3., 4. a 5. týdnu semestru, může získané 3 možnosti opravy využít na 3 různé iterace, nebo i všechny 3 možnosti na 1 iteraci.

V každém případě pomáhají cvičení předmětu osvojovat si koncepty daného jazyka a slouží jako průprava k zadáním iterací a ve výsledku i k týmovému projektu, proto doporučujeme cvičení navštěvovat. Také na cvičeních můžete konzultovat jakékoliv jiné koncepty jazyka nad rámec těch, které se objeví v iteracích.

Na cvičení se předpokládá povědomost o látce z odpovídající přednášky, protože na ní budou cvičení stavět a rozšiřovat ji. Cvičení na sebe do značné míry tematicky navazují, proto očekáváme, že v případě absence si do dalšího týdne látku cvičení doučíte.

Iterace

Iteracemi se v tomto předmětu rozumí průběžné domácí úlohy, které mají za úkol procvičit koncepty jazyka.

Iterací je celkem 10. Zadání iterací budou vycházet týdenně v pondělí (s přestávkou uprostřed semestru). Na jejich vypracování budou vždy minimálně 2 týdny, avšak konkrétní termín odevzdání záleží na vašem cvičícím. Zadání naleznete jako issues repozitáře s iteracemi na fakultním GitLabu, který si forknete a přidáte do něj své cvičící (s rolí Developer), v nové větvi iteraci vypracujete a odevzdáte jako Merge Request.

Každá iterace bude mít svou Gitlab pipeline, které nejdříve spustí kontrolu kvality vašeho kódu (tzv. linting). Až po splnění této kontroly se spustí automatické testy ověřující správnost vašeho řešení, což primárně znamená, že neúspěšná kontrola kvality vašeho kódu znamená 0 bodů. Opravující může, ale nemusí ztrhnout body za neúspěšné automatické testy, v závislosti na závažnosti problému.

Nakonec vaše vypracování projdou ruční kontrolou kódu (tzv. code review) od vašeho opravujícího. Ten vám může vytknout hrubé nedostatky, neidiomatický kód, vážnou neefektivnost řešení či jiné problémy, za což může ztrhnout body z maxima za iteraci (tj. z 5 bodů).

Pokud máte k dispozici možnost opravy díky účasti na cvičení a rozhodnete se ji využít, můžete zapracovat výtky a požádat o opětovnou kontrolu (tzv. rereview). Tento cyklus oprav se může opakovat, dokud nebude opravující spokojený s kódem, vy s počtem bodů nebo vám dojdou možnosti opravy.

Podrobnější informace o iteracích naleznete v sekci této interaktivní osnovy.

Týmový projekt

Týmový projekt je poslední způsob, jakým v tomto předmětě získat běžné (tj. nebonusové) body. Jedná se o velké, časově náročné zadání, koncipované na spolupráci několika lidí, které prověří jednak schopnost použít programovací jazyk Rust a jeho knihoven v komplexním scénáři, jednak práci v týmu. Příkladem takového komplexního scénáře může být implementace interaktivní webové služby, komunikačního protokolu, ovladače hardware, celistvých desktopových aplikací apod.

Týmy pro projekty si vytváříte sami, členové týmu můžou patřit do různých seminárních skupin, takže máte absolutní volnost výběru svého týmu. Počet členů v týmu musí být roven 4, nikdy ne víc. V krajních případech souvisejících s neočekávanými událostmi jsme schopni odsouhlasit i tým s počtem členů roven 3, nikdy však méně.

Zadání týmových projektů plánujeme zveřejnit ve 3. týdnu semestru v ISu v sekci Rozpisů (Student → PV281 → Rozpisy) a rovnou se na ně bude dát přihlašovat formou časové soutěže. Aby se předešlo přihlášení několika týmů k jednomu tématu, z počátku bude umožněno přihlášení jen jednomu členovi týmu (tzv. teamleader, ale nejedná se o žádnou formální roli). Až s časovým odstupem bude umožněno přihlášení zbývajícím členům týmu.

Výjimečně je možné jako tým navrhnout vlastní zadání projektu. Takové zadání musí samozřejmě mít odpovídající obtížnost a musí ho schválit váš cvičící. Až po schválení bude vlastní zadání vypsáno v ISu a členové týmu k němu budou manuálně přihlášení.

Každý týmový projekt musí projít svou obhajobou, které budou probíhat během celého zkouškového období. Můžete očekávat krátký, alespoň 20minutový online hovor, během kterého odprezentujete svou práci, demonstrujete splnění zadání ukázkou funkční aplikace, umožníte nahlédnout do kódu a zodpovíte otázky od přítomné komise (tj. přítomných členů organizačního týmu předmětu). Samotné obhajobě předchází odevzdání projektu 3 dny předem.

Podrobnější informace o projektech naleznete v sekci této interaktivní osnovy.