Základy programování (IZP) — zhodnocení
By Bumerang
Nejzajímavější a nejpřínosnější předmět v prvním semestru. Probírá se nejprve programovací jazyk C (v normě C99), později i obecné programátorské konstrukce – ADT (abstraktní datové struktury), složitost, „teorie“ okolo programování. Vše je však provázáno s názornými příklady v Céčku. Rozhodně není radno tento předmět podcenit – patří ke stěžejním nejen v tomto semestru, ale také jako odrazový můstek pro celou řadu navazujících předmětů.
Cvičení
Na začátku semestru probíhala 4 řízená democvičení, na která se muselo registrovat. Byla určena především začátečníkům a ukazovala základy práce s Linuxem, i vás provedla prvními kroky v Céčku. Já sám jsem tam chodil jen ze zvědavosti a z kvůli tomu, aby mi „něco neuniklo“. Pokud nejste v programování naprostý začátečník, asi vám toho moc nedají – ale může to posloužit jako takový nenásilný úvod do jazyka C, pokud máte zkušenosti s jiným programovacím jazykem. Na začátku semestru, dokud máte ještě spoustu času (cca prvního 1,5 měsíce), vřele doporučuji věnovat se Céčku a učit se ho. Ale co je hlavně – programovat v něm.
Jak řekl náš „mentor“ Agent Smrčka:
„Jste tady sice na přednáškách a budete tady poslouchat nějakýho šaška vepředu co vám vecpe nějakou teorii, to je sice hezký, ale tu největší část byste si měli odbýt tím, že budete sedět u počítače a budete KÓDIT, budete bouchat jeden kód za druhým. Doc. Kreslíková vám říkala – dělejte si nějaké jednoduché příklady – jo, dělejte si. Jestliže začínáte s programováním a nemáte nějakou super zkušenost s programováním – a tím myslím třeba 50 tisíc řádků kódu – tak si řekněte dobře, párkrát za týden si sednu, třeba na hodinu a budu programovat něco, co mě třeba napadlo. Podívám se například na Wikipedii, najdu si nějaký algoritmus a zkusím si ho sám naprogramovat. Tohle zkoušejte! Tak vám zaručuju, že Základy programování pro vás budou hračka a v těch dalších předmětech nebudete mít problémy – protože tam se předpokládá, že když vám řeknou, jak se nějaký problém řeší, tak vy si sednete a dokážete to naprogramovat…“
K tomu nemám co dodat.
Projekty
Během semestru se řeší 4 projekty. Na každý projekt máte 2 týdny času, přičemž ho musíte i obhájit u svého cvičícího (reálně tudíž máte na naprogramování jen týden, pokud máte cvičení v pondělí – projekty se odevzdávají v neděli o půlnoci). Obhajoby se velice liší dle asistenta, který vás má na starosti. U jednoho tak můžete obhájit v pořádku projekt, ze kterého nemáte naprogramováno ani pět řádek, stačí, když budete vědět, jak na něj a náležitě to podáte. U jiného (jako například u toho mého) musíte mít projekt hotový na 97%. Můj asistent hodnotil docela přísně, ale spíš mě zarazila jiná věc – na obhajobě neměl prakticky žádné námitky, přesto mi opakovaně, v každém projektu, strhával body za neobhájené části (když jsem mu například řekl, že v některých případech můj řadící algoritmus ještě dává špatné výsledky, ale většinou funguje správně). Dále mi pravidelně strhával body za „špatnou koncepci programu“ – přestože si za svojí koncepcí stojím a když jsem se ho výslovně zeptal, co je na mé struktuře programu špatně, nedokázal mi na to smysluplně odpovědět. Smutné. Výsledkem tak bylo, že jsem za plně funkční programy dostával cca 75% bodů, zatímco někteří mí spolužáci získali stejné body za polofunkční paskvily. Ale beru to tak jak to je – nikdy nebudou naprosto stejné podmínky pro všechny studenty, už z principu to nejde, takže se s tím musím smířit.
První projekt spočíval v převedení zadaného čísla, které symbolizovalo počet sekund, do „lidsky čitelné podoby“ (tzn. pro vstup 987654 byl odpovídající výstup 1 tyden 4 dny 10 hodin 20 minut 54 sekund). Program měl reagovat na parametry z příkazového řádku, které určovaly nejvyšší zobrazenou jednotku. Největším „oříškem“ tohoto programu bylo ošetření zadání příliš velkého čísla, které by se nevešlo do příslušného datového typu. Abychom však nezabředli hned v prvním projektu, často někteří cvičící s tímto problémem poradili (čti: ukázali jak vyřešit).
Druhý projekt spočíval v implementaci nejrůznějších iteračních výpočtů. K tomuto projektu se psala i dokumentace (body do předmětu IUS). Úkolem bylo implementovat aproximace dvou funkcí – arkus sinus a obecný logaritmus. Druhou částí bylo implementovat algoritmy, které ze zadané vstupní posloupnosti vypočítají délku lomené čáry, která by byla v rovině proložena těmito body. Další částí bylo totéž, pouze se muselo počítat i s průměrnou chybou – souřadnice byly zadány „nepřesně“ (s konstantní odchylkou) a bylo nutno zjistit minimální možnou délku čáry a maximální možnou délku čáry. Pokud jste měli hotovou lomenou čáru bez odchylky, druhá část se již dala vyřešit pouhou úpravou vstupních hodnot a využití původní funkce.
Třetí projekt spočíval v implementaci operací nad maticemi a to: součet, součin, transpozice, označení vodního toku a cesta koule po kulečníku. Při řešení vodního toku bylo třeba představit si, že hodnoty v matici představují nadmořskou výšku – a vám byly zadány souřadnice počátku – pramene, odkud se voda začala rozlévat. Vaším úkolem bylo zjistit, kam všude se voda může rozlít (voda se samozřejmě rozlije pouze do míst s nižší nadmořskou výškou). Spousta lidí použila pro řešení rekurzi, mně však připadalo snadnější nerekurzivní řešení. V řešení kulečníku bylo třeba si představit, že zadaná matice je kulečníkový stůl a po zadání počátečního umístění koule a její síly (kolik políček přejede) bylo třeba vypsat hodnoty na políčkách, kterými projela (v odpovídajícím pořadí). Samozřejmostí bylo řešit všechny možné druhy odrazů. Aby byly obě poslední části zajímavější, políčko v matici nebylo čtvercové (políčko by tudíž mělo 4 sousedy), ale bylo šestiúhelníkové (tudíž mělo 6 sousedů). To při řešení projektu vyvolávalo další problémy, neboť bylo nutné rozlišit, zda je políčko na lichém či sudém řádku (koeficienty indexů sousedů totiž nebyly pro lichý a sudý shodné). Bylo to zajímavé a bylo potřeba trošku přemýšlet.
Čtvrtý projekt spočíval v seřazení textového souboru, který obsahoval českou diakritiku – bylo tedy třeba naučit se jak pracovat s diakritikou, tak implementovat řadící algoritmus. Dalším „oříškem“ bylo, že nebyl předem znám počet řetězců (pouze to, že na každé řádce bude jeden) ani jejich délka. Bylo vhodné použít dynamickou datovou strukturu (šlo to i „natvrdo“, kdy jste si při jednom průchodu souborem zjistili počet řetězců, na tento počet jste si dynamicky alokovali pole ukazatelů a poté jste alokovali místo pro jednotlivé řetězce, kam jste při druhém průchodu souborem vkládali řetězce – tento přístup mi však přijde dost nešikovný) – já sám jsem použil obousměrně vázaný lineární seznam. Právě práce se seznamem a jeho řazení bylo na tomto projektu to zajímavé – ale pokud si to člověk nakreslil, nebylo na tom nic složitého.
Dlužno dodat, že zadání jednotlivých projektů byla dost podrobná, tudíž často už naváděla na řešení a v případě dalších nejasností jste se mohli zeptat na fóru ve fakultním informačním systému, kde vás poté autoři zadání projektu usměrnili. Nehledě na to, že dr. Smrčka na demonstračních cvičeních (jednou za dva týdny, nezaměňovat s řízenými demo cvičeními, které byly na začátku semestru) často osvětlil, či rovnou napsal, jak které „záludné“ části projektu řešit.
Zkouška
Půlsemestrální zkouška spočívala v úlohách typu: „Jakou hodnotu budou mít proměnné x a y po provedení tohoto bloku příkazů?“ či „Kolikrát se vykoná následující cyklus?“ Dlužno dodat, že bylo třeba velice dávat pozor, co je kde uvedeno a hlavně naprosto rozumět syntaxi Céčka. Kód byl napsán lehce záludně – např. „Kolikrát se provede následující cyklus?“:
[c]for (int i = 1; –i; i < 3)[/c]
– syntakticky je vše v pořádku, avšak pro neznalé oko se to může jevit dost temně. Na zápočet bylo potřeba minimálně 20b z projektů a půlsemestrálky (celkem 45b).
Semestrální zkouška pak k tomu přidala i programování na papír, kdy bylo třeba „naprogramovat“ několik funkcí, zodpovědět otázku z teorie a sestavit jeden logický výraz. Věci, které se měly „programovat“, však vycházely z projektů, tudíž kdo zodpovědně dělal projekty, musel minimálně polovinu bodů získat. Celkově nebyla obtížná, ale prý se strhávaly body i za napsání neefektivního kódu – proto pište svůj kód efektivně.
Přednášky
Mou původní přednášející byla doc. RNDr. Jitka Kreslíková CSc., avšak hned po druhé přednášce jsem začal chodit na přednášky druhé skupiny, neboť přednes paní docentky mi nepřipadal nijak záživný – často se zadrhávala a měl jsem pocit, že je myslí úplně jinde a pouze funguje jako reproduktor pro pásky, které si v hlavě nahrála asi tak před 10 lety. Druhé skupiny přednášel Ing. Aleš „Agent/Ála“ Smrčka Ph.D., který dokázal každé přednášce opravdu vdechnout život. Jeho energický, přesvědčivý a hlavně neskutečně erudovaný přednes ve vás působil tak, že jste měli okamžitě chuť jít se ponořit do programování. Opravdu motivační. Agent S. je navíc známý tím, že dává v hlase na některá slova opravdu důraz, takže s vámi doslova zatřesou. Pokud se k tomu přidá i jeho zřejmý ne-cit pro skloňování (“prvkami seznamou“ místo „prvky seznamů, „Zábřeze“ místo „Zábřehu“) je o zábavu postaráno. Dovolil nám i nahlédnout do své duše geeka, kdy se po tom, co jsme se od něj dozvěděli že: „I sex je v podstatě rekurentní problém.“, ozval jeho upřímný hlasitý smích. A jsou to lidé jako on, kteří ve vás zanechají ty nejlepší vzpomínky na školu.
Tento předmět byl jednoznačně králem zimního semestru – ať už nejen kvůli projektům (kterým však musíte dát čas, rychle to opravdu nejde), které byly zajímavé a nikoliv vyloženě primitivní, ale i díky skvělým přednáškám doktora Agenta Smrčky.
Prospělo studentů: 58,77%