Jazyk C (IJC) — zhodnocení
By Bumerang
Tento předmět jsem si zapsal jako volitelný a pro mě osobně to byl královský předmět tohoto semestru. Nejoblíbenější, zároveň však nejnáročnější.
Probírají se témata okolo jazyka C v podstatě stejná, jako minulý semestr v Základech programování, zde se však probíhají mnohonásobně důkladněji, včetně různých specialitek. Ke konci semestru se pak probírají i neobjektové základy C++, ale bylo to spíše srovnání a porovnávání těchto dvou jazyků, co je jak odlišné (nic jiného by se ani do necelých dvou přednášek nevešlo). Dále se člověk dozví i něco o programovacích „technikách“, jako je modularita programů, optimalizace a používání programu make. Celou dobu jsme probírali normu jazyka C11 — i když ty hlavní používané části jsou stejné jako u C99, C11 přináší pouze několik novinek, z nichž jsme nakonec ani žádnou nepoužívali (kompilátory normu ještě plně nepodporují).
Každé pondělí byla tříhodinová přednáška, z nichž několik prvních začínalo až v 18:00, později se začátek posunul o hodinu dopředu, takže jsme končili nejprve v devět večer, pak v osm. Ne že by to člověk v klimatizované podzemní přednáškové místnosti nějak zaznamenal, pouze při opouštění školy měl pocit, že ta hodina patří spíš oddychovým (hospodským) účelům než škole. A navíc domů dorazíte až někdy před desátou večerní, což je čas tak akorát na… vlastně cokoliv. Jste na VŠ, tady žádný pevný režim není. Můžete spát, vařit, chlastat (učit se) v kteroukoliv denní a noční dobu.
Přednášky
Dr. Petr „PePe“ Peringer je další z kategorie vysoce erudovaných, trošku geekovitých (prý i na vlastní ženu mluví poněkud strojově), skvělých přednášejících. I když jsem byl občas po celém dni unavený, dokázal jsem udržet pozornost po celou dobu, i přestože jsme občas měli pouze jednu přestávku. Ale výklad tohoto Šedého ďábla dokáže natolik zaujmout, že vaše pozornost jen tak snadno neupadne. Toto „zaujmutí“ však zřejmě neplatí pro každého, neboť jsem musel tři až čtyři přednášky poslouchat tokání jednoho spolužáka, co seděl dvě lavice za mnou a který zřejmě usiloval o získání přízně dané dívky. Rušil však tímto milostným vrčením celou přednáškárnu, až se po něm studenti otáčeli a PePe vrhal přísné pohledy a dramatické pauzy. Všechno jedno, volání přírody bylo silnější. Navíc měl pak ještě tu drzost chodit s dotazy k přednášejícímu.
První projekt
Během semestru bylo třeba řešit dva projekty. Ten první měl dvě části — napsat různá makra pro operace s bitovými poli, inline funkce se stejnou funkcionalitou (a při překladu se rozhodovalo, zda se mají použít makra či inline funkce), implementovat Eratosthenovo síto nad těmito poli. Další část spočívala v „rozluštění“ zprávy, která byla pomocí steganografie zašifrovaná v obrázku formátu PPM. Tento velice jednoduchý formát neobsahuje žádnou komprimaci, proto je práce s ním příjemně jednoduchá. Pro rozšifrování bylo třeba postupně přečíst každý bit na prvočíselném indexu (jež se zjistily právě pomocí Eratosthenova síta) a z těchto bitů postupně vypisovat zprávu, dokud člověk nenarazil na konec souboru či ukončovací nulový znak.
To bylo velice zajímavé a „hravé“ zadání, neboť nám PePe do referenčního obrázku určeného pro testování zakódoval tajnou zprávu, kterou si každý musel rozšifrovat a zjistit. Navíc jsme používali i zajímavý přístup k uchovávání samotných dat z obrázku (structure with flexible array member), takže jsem zjistil, že Céčko občas překvapí (v tomto případě příjemně), byť toto je otázka spíše pohodlnějšího používání.
Druhý projekt
Druhý projekt měl opět dvě části — v první, jsme měli implementovat program tail (vypsání posledních x řádek z daného souboru) v jazyce C a také v C++. V té druhé jsme měli přepsat program, který měl v C++ 12 řádků do Céčka — program počítal počet výskytů slov v textu. Člověk by si řekl, co na tom může být složitého… Ale vtip je v tom, že v Céčku nemáte třídu map z STL, tudíž nemůžete použít asociativní pole, kdy indexujete pole nikoliv číslem, ale přímo řetězcem. My jsme tuto „magii“ s hashovací tabulkou museli naprogramovat sami.
Opět to byl velice zajímavý a praktický projekt, navíc mi pomohl i při zkoušce z IOS, neboť tam jsem měl v pseudokódu právě implementovat operace s hashovací tabulkou — mohl jsem tak využít ty hodiny strávené nad tímto projektem.
Je třeba říci, že i přes relativní obtížnost projektů bylo zadání mimořádně podrobné a dost nás vedlo za ručičku, nemuseli jsme tedy nic složitě vymýšlet — při těch pár nejasnostech se pak stačilo zeptat. Zajímavou kapitolou bylo hodnocení projektů, na které jsme si sice museli pár týdnů počkat, ale to už je na FITu tak nějak zvykem. Naše projekty se v testech doslova „rozebraly“ na jednotlivé funkce a ty se potom ve výhni náročných testů tavily. Pokud jste měli v programu jedinou chybičku, testy jí našly. Já měl v prvním projektu chybu v jednom makru pro výpis bitů, která se projevovala pouze při přeložení pro 64b systém a které vypisovalo jeden poslední bit z bajtu následujícího, než byl ten požadovaný.
Při testování druhého projektu pak předhazovali našim variantám programu tail binární soubory — zde samozřejmě nezkoumali výstup programu, ale jestli to program vůbec přežije. Proto u svých programů ošetřete skutečně každou myslitelnou i nemyslitelnou zranitelnost.
Zkouška
A pak tady byla zkouška. O ní je známo, že je to jedna z nejtěžších na bakaláři (byť jde o předmět volitelný) — a teď už se opravdu nedivím proč. Nezkouší se žádná teorie, žádné kecy, které se naučíte přes noc. Zkouší se vaše schopnost rychlého uvažování a rychlého bezchybného programování. Musíte znát věci okolo deklarací/definicí napříč moduly, ukazatelovou aritmetiku a spoustu dalšího. Nezkouší se běžnosti, ale spíše speciality a netriviální věci.
Největší problém zkoušky byl v brutálním nedostatku času — pokud by ho bylo více, asi by zkoušku napsalo o dost víc lidí — takhle se ovšem dost brutálním způsobem oddělilo zrno od plev. Takto jste museli za 70 minut (+ chvilka nastavování) vyřešit pár příkladů na specialitky (napsat deklaraci, rozluštit ukazatelovou aritmetiku), potom napsat netriviální funkci a v závěru netriviální program (u mě to byla CSV čtečka). Smekám klobouk před každým, kdo dokázal napsat tuto zkoušku na 55+ bodů (ze 70) — máte můj obdiv.
Závěrem snad jenom říci, že tento předmět mě naučil neskutečně mnoho a kdybych se měl někdy znovu rozhodnout, jestli si ho zapíšu znovu nebo ne, rozhodně bych si ho zapsal, i přes velice obtížnou zkoušku. Vynikající přednášky Šedého ďábla vás naučí opravdu spoustu a navíc čas od času vypustí i nějakou hlášku ( „To je jasná střelba do nohy …“ ) a stejně tak projekty. Pokud vás baví programování a chcete se zdokonalit v Céčku, berte tento předmět všemi deseti — může vám však také velice snadno zkazit studijní průměr.
Studentů prospělo: 46,08%