Formální jazyky a překladače (IFJ) – zhodnocení
By Bumerang
Vrchol třetího semestru. Dalo by se říct, že celý tento semestr se točí okolo tohoto předmětu a hlavně projektu do něj. Není však vrcholem jenom kvůli tomu, že vám zabere pravděpodobně nejvíce času – je to i díky jeho organizaci, která pro mě představovala do té doby něco nevídaného. A v neposlední řadě i díky přednášejícímu.
Na první pohled mi název předmětu nijak neučaroval, tím spíš, že se v něm objevuje slovíčko „formální“, což vždy indikuje hromadu definicí a teorie. To nezní nijak přívětivě, ale jak to bylo ve skutečnosti?
V předmětu se seznámíte se základními teoretickými pojmy informatiky z hlediska formálních jazyků a jejich modelů. Zjistíte tak, že slovo gramatika má i jiný význam než rozhodování o i/y. Poznáte, co je to vlastně ten konečný automat, který jste už používali v předchozích předmětech a že jich je více „druhů“. Dále vám bude osvětleno, jak vlastně pracuje překladač (kompilátor), zjistíte, co za všechnu kouzelnou magii se provede, když si kompilujete projekt a jak je vůbec možné, aby se vždycky vygeneroval správný kód, i když napíšete do zdrojáku tu největší divočinu.
Přednášky aneb „Teď vás nesmím ztratit!“
Na přednášky jsem chodil k prof. Alexandru Medunovi – a nemohl jsem udělat lépe! Rozhodně doporučuji navštívit minimálně jednu jeho přednášku, protože to je vskutku zážitek. Co se asi tak zajímavého může dít na přednášce, říkáte si? V jeho podání to však není pouhá přednáška, je to spíš divadelní inscenace s edukativním podtextem. Těžko říci, jestli to má na svědomí jeho americká zkušenost (kde několik let přednášel) nebo už je takový od přírody. Během přednášky doslova burácí, div nestrhne mikrofon, zuřivě gestikuluje, máchá rukama až za ním jeho malířská košile vlaje. Pokud budete sedět v prvních lavicích, může se vám snadno stát, že se opře o vaší lavici, nakloní se k vám a zblízka vám do obličeje skoro zakřičí: „Chápete to?“ Minimálně se s vámi bude bavit, ptát se vás, vyžadovat odpovědi. Výuka v cca 100 lidech myslím nejde udělat více interaktivní než v jeho podání. Brzy si také najde „oblíbence“, jejichž jména si pamatuje a ptá se jich přednostně na určité problémy. U nás to byl například matematik Karel zvaný Božský nebo p_raktik Vojta_. K podobnému ocejchování přijdete velice snadno – Vojta ho například získal hned po jednom praktickém dotazu na nedeterministické konečné automaty.
V očích profesora Meduny jste mohli často zahlédnout takový zápal, až se skoro blížil fanatismu. Na jednom záznamu z minulého roku jsem dokonce viděl, když jeden student řekl něco dopředu, jak ze sebe vydal téměř orgastický výkřik: „ANO, ANO, TO JE ONO!!! Přesně takhle!“ a lehce si povyskočil. Marně vzpomínám, jestli jsem kdy viděl člověka více nadšeného a zapáleného pro svojí věc a co víc – nadšeného při vysvětlování látky studentům. Právě tohle dělá z člověka toho nejlepšího přednášejícího a učitele.
Student na prvním místě
Další z mnoha povedených věcí v tomto předmětu jsou učební materiály. Máte jich k dispozici přehršle a co se týče slidů, neviděl jsem snad lepší. Na první pohled vypadají jako omalovánky, ale zejména animace v nich velice napomáhají porozumění problematiky. Muselo to dát šílenou práci, když si vezmu, jak obsáhlé jsou. Jejich autorem je Dr. Roman Lukáš, který na fakultě již bohužel nepůsobí. Dalšími materiály jsou nejrůznější příručky a dokumenty, které vám IFJ crew poskytuje, k projektu, matematickým základům, sbírky příkladů a mnoho dalšího. A vše je vyvedeno v profesionálním zpracování.
Další pomocí studentům jsou pak democvičení, které si můžete vyžádat. Na nich se vysvětluje problematika, která činí studentům potíže. My jsme měli dvě a to před půlsemestrálkou a semestrálkou. Probrali a propočítali jsme na nich příklady, které by se mohly v testech objevit a musím říct, že mi daly mnoho. Není nic lepšího, než vypracovávat příklady s odborným komentářem, který vám i říká, proč se ty které kroky dělají. Potom to do hlavy leze samo. Doporučuji si dělat poznámky, vyplatí se to.
Ludi incipiant
Nyní se dostávám k tomu nejhustějšímu, co na nás v tomto semestru čekalo – projekt. Jako první na FITu je týmový, řeší se ve čtyřech či pěti lidech. A je obsáhlý. Máte vytvořit interpret zjednodušeného jazyka – v našem případě to byla podmnožina jazyka Falcon (o kterém jsem předtím nikdy neslyšel). Co to znamená interpret? To znamená, že váš program dostane na vstup zdroják zapsaný v tomto jazyku a má zkontrolovat, jestli je zapsaný správně a případně ho vykonat. Brnkačka, myslíte? No, to zrovna ne. ;]
Prvním krokem tak bylo sehnání zbylých členů do týmu – jednoho kamaráda už jsem měl domluveného předem. Uvědomoval jsem si, že v tomto střednědobém (několika týdenním) projektu bude sestavení správného týmu kritické. Jeden neaktivní člen tak může snadno potopit váš projekt, pokud to nezjistíte včas. Pro verbování jsem zvolil standardní kanál (Fitušku), kde jsem vystavil náš „inzerát“. Začaly chodit „nabídky“ a já jsem se, jakožto vedoucí, jal vybírat. Po nějakém čase se mi ozval člověk, kterého jsem již z fóra znal – radil, sdílel své výsledky pro kontrolu a jevil se jako rozumný člověk. Navíc „nabízel“ i svého kamaráda, takže po krátké úvaze bylo jasno – a už jsme byli čtyři. Dali jsme si schůzku, s tím, že o posledním pátém členovi se již rozhodneme společně. První meeting tak byl především seznamovací. Dohodli jsme se, že projekt budeme nakonec vypracovávat ve čtyřech.
Na dalším meetingu jsme si dohodli rozdělení práce a začali pomalu programovat. Každý dostal na starosti svojí část, společné rozhraní jsme pak řešili až za běhu. Bylo to moudré rozhodnutí, neboť nikdo z nás neměl s vývojem interpretu žádné zkušenosti, tak jsme ani nemohli udělat pořádný návrh, neboť jsme ještě plně nechápali, jak kompilátor funguje. Po úvodních přednáškách se věci ale daly do pohybu a nám do repozitáře začaly přibývat první řádky kódu. Já měl na starosti interpret, algoritmy, dokumentaci, debugging a „věci okolo“, jako repozitář, komunikační platformu (honosný název pro dokumenty v Google Docs) atp.
Pokusné odevzdání
Další fajn věcí je, že cca 2 týdny před finálním odevzdáním bylo tzv. „pokusné odevzdání“. To spočívalo v tom, že jste projekt odevzdali a v odpověď vám přišlo, kolik procent testů z každé části jste úspěšně absolvovali. To je velice užitečné – dostatečný čas před odevzdáním vidíte, kde máte bolavá místa a na co je třeba se zaměřit. Tomuto odevzdání předcházely dva dny, kdy jsem prakticky většinu dne programoval a napsal tak celý interpret, který dokonce jevil známky funkčnosti. Když jsme pak navečer testovali, zjistili jsme, že nám jedna část generuje špatný kód – její autor však bohužel musel na vlak a absolvovat dlouhou cestu do Brna. Spolu s dalším kolegou jsme tak koukali do jeho kódu a nebyli z toho třikrát moudří. Naštěstí autor předvedl heroický výkon a cestou ve vlaku svojí část opravil těsně předtím, než mu zhebla baterka. Nikdy nezapomenu na to, jak jsme si vyměňovali kusy kódu přes esemesky. :D Poté cca půl hodiny před termínem dorazil s fanfárou na internet, nahrál nám opravenou verzi do repozitáře a my všichni si oddechli. Tajně jsme ho podezírali, že to celé udělal jenom na efekt. ;]
Implementovali jsme i několik rozšíření, z nichž jedno se nám nakonec nepodařilo dotáhnout do úplného konce. Dokumentaci jsem pak jako správný absolvent ITY zpracoval v LaTeXu, ale nemyslím si, že by nám to přihrálo nějaké body navíc. Když jsme pak nakonec všechno odevzdali, zmocnila se mě docela divný pocit – takové prázdno. Není se co divit, když přes měsíc věnujete většinu studijního času jednomu projektu, stále nad ním přemýšlíte (já jsem ho jakožto vedoucí adoptoval za svoje „dítě“) tak si na něj vypracujete jistou formu návyku. Ale po dvou dnech už byl klid. ;]
Obhajoba
Projekt je třeba ještě obhájit – body z obhajoby se počítaly do předmětu IAL. Vystrojili jsme se do obleků a šli prezentovat svojí práci. Prezentující člen se náhodně vybíral pomocí hodu kostkou – tak jsem za náš tým hodil a vylosoval jsem tím sebe. Byl jsem rád, protože jsem nechtěl být v pozici mých kolegů, kteří se na mě museli bezmocně dívat a nechat se pohlcovat pocity typu „co to říká, proč tak mele atp.“. ;] Jelikož jsem žvejkal od přírody, maličko jsem přetáhl časový limit, což hodnotící komentovali slovy: „Státnicová komise by to nesla nelibě.“, ale kvalita prezentace to zřejmě vyvážila, takže jsme po odpovězení několika otázek odešli s plným počtem bodů.
PPGM-071
Pro projekt je důležité, abyste si vybrali ty správné lidi. Budete muset spolu komunikovat a musí se na ně dát spolehnout. Musí být také dostatečně zběhlí v programování, nebude totiž moc času někoho učit, co je to ukazatel a jak se deklaruje struktura. Pokud si budete rozumět i po lidské stránce, „sednete“ si, bude vývoj o to radostnější a snazší. Upřímně chci říct, že můj tým byl super. Když jsem psal „inzerát“ na fórum, nečekal jsem, že se mi podaří sehnat tak kvalitní lidi po všech stránkách. Ba co víc – já ani nečekal, že takoví lidé na FITu jsou! O čem mluvím? Když řeknu, že všichni z mého týmu měli výborný prospěch (jeden dokonce non plus ultra) a zároveň to byli pohodoví lidé, s vlastními zájmy a uvědomující si, že existuje i svět mimo počítačů, nebudu vůbec přehánět. Jako každý tým superhrdinů jsme si i my „našli“ klasické role. Byl tu ten chlápek, co dokáže opravit cokoliv v kterémkoliv kódu, pak týmový maskot a bavič, který udržoval dobrou náladu. Dále tu byl sexy cizinec a jeden začínající alkoholik.
Co se hodí
Mám tu několik poznatků, na které jsem během vývoje přišel. Začněte co nejdříve. Používejte nějaký systém pro správu verzí a zajistěte, ať ho všichni důsledně používají (my používali Git a server bitbucket.org). Meetingy pořádejte každý týden, přičemž vždy stanovte úkoly na příště – pokud někdo úkol nesplní a nemá pro to dobrý důvod, dejte mu i na příští týden stejně práce jako ostatním. Kdybyste to neudělali, začne se flákat s tím, že mu to už jednou prošlo. Průběžně si udržujte aktuální seznam všeho, na čem jste se dohodli (rozhraní, rozdělení práce, aktuální úkoly etc.). Vytvořte si nějaký testovací skript (my ho měli tak vyšperkovaný, že to snad více nešlo – i barevný výstup měl!), abyste hned po změně věděli, jestli jste si nezanesli do programu novou chybu. Jakožto vedoucí byste se pak měli postarat co nejvíce o „komfort“ ostatních, aby se mohli soustředit na samotné řešení problémů a programování, tudíž věci okolo repozitáře, týmové komunikace, udržování aktuálních dokumentů a zápisů byste měli řešit vy. Dále je třeba dohlížet, že úkoly jsou opravdu splněny, dohlížet, že se neschyluje ke katastrofě (nestihnutí termínu, sebevražda dildem atp.). Berte to jako šanci zahrát si na „opravdový“ projekt. ;]
Testy
Půlsemestrální i semestrální zkouška byly férové, byť docela přísně hodnocené. Je nutné se naučit všechny důležité definice a musíte se je naučit přesně, všechny pak zapsat přísně formálně. Dále je třeba umět používat důležité algoritmy, jako je minimalizace konečného automatu, tvorba precedenční tabulky aj. Po půlsemestrální zkoušce byl také zveřejněn dokument s tím, kde studenti dělali nejčastější chyby, což je opět velice užitečné, neboť víte, na co si dát pozor.
Vzorem kupředu
Předmět hodnotím pomyslnou nejvyšší známkou. Je to díky velice zajímavému projektu, vynikajícím přednáškách, vynikajícím studijním oporám, demonstračním cvičením na vyžádání, skvělému týmu a dalším věcem. Předně je to jasná snaha vyjít studentům vstříc, umožnit jim aby se mohli soustředit pouze na učení a neházení žádných klacků pod nohy, právě naopak – bylo s námi jednáno jak v bavlnce. Ačkoliv mě nebaví moc učit se teorii, tady byla podaná tak skvělým způsobem, že jsem jí měl i rád. Sice v této oblasti nechci dál působit, ale přesto vzbudila můj zájem. A to je myslím ten nejhonosnější cíl každého vzdělávání – vzbudit zájem i v těch studentech, kteří pro danou problematiku neplanou. To se tady myslím povedlo vrchovatě. Kéž by všechny předměty byly jako tento!
A velký dík patří všem členům týmu PPGM-071! ;]
Studentů prospělo: 72,00%