Tento článek popisuje, jak fungovala ústní magisterská státní zkouška z informatiky na Matematicko-fyzikální fakultě Univerzity Karlovy (MFF, Matfyz) v září 2017. (verze v Google dokumentu)
Přihlášení
Magisterská státnice se nazývá “ústní část státní závěrečné zkoušky”. Žádná písemná část neexistuje. Slovo “ústní” ji pouze rozlišuje od “obhajoby diplomky,” což je druhá část zkoušky. Není dělená na několik zkoušek podle předmětu (matematika/informatika) na rozdíl od bakalářské zkoušky. Na zkoušku je třeba se přihlásit před termínem uvedeným v harmonogramu, ale nelze se přihlásit dříve, než máte splněné všechny ostatní studijní povinnosti vyjma diplomové práce.
To znamená především, že je třeba mít 120 kreditů, všechny povinné předměty a dostatečné množství povinně volitelných předmětů.
Přihlášení ke zkoušce je třeba udělat osobně na studijním oddělení, a je třeba přitom nahlásit svoje zaměření, a pokud vyžaduje volbu volitelných okruhů, tak i ty. Například já jsem byl na oboru Softwarové a datové inženýrství, a během přihlašování na státnice jsem zvolil zaměření Softwarové inženýrství, které vynucuje dva zkušební okruhy a poslední lze zvolit libovolně, zvolil jsem tedy Databáze – formální základy a dotazovací jazyky.
Obhajobu diplomové práce lze dělat nezávisle na ústní zkoušce.
Vaše studium na MFF končí dnem, kde vykonáte druhou část zkoušky — pokud např. obhajobu máte jako první, pak po úspěšném složení ústní zkoušky dostanete i celkovou známku a vaše studium je uzavřeno.
Asi dva měsíce před termínem ústní zkoušky se na SISu v aplikaci “Pozvánky na státní zkoušky a obhajoby” (k dispozici veřejně bez přihlášení) objeví rozvrh, který říká, kdy má kdo kam přijít na zkoušku. O tom, že tento rozvrh byl vyvěšen, nedostanete žádný e-mail ani jiné upozornění.
Průběh zkoušky
Na zkoušku všichni přišli v obleku/šatech.
Studenti byli rozděleni do místností. Většina z nás byla v S4, ale pochopil jsem, že pokud je pro nějaký obor nebo skupinu oborů málo studentů, tak místo toho, aby byli v učebně, tak je možné, že budou v kanceláří některého zkoušejícího, nebo dokonce budou obcházet zkoušející.
Studenti v místnosti byly rozřazeni podle zasedacího pořádku. Dostali jsme na stůl složku s prázdnými papíry, ve které byly také posudky práce, záznam z obhajoby, výpis známek ze SISu a informace o studijním průměru a o nároku na vyznamenání (tj. jestli je už nárok na vyznamenání porušen nějakou dřívější povinností nebo ne). Do této složky zkoušející nahlíželi, a to v několika případech ještě předtím, než zadali otázku. Nevím, jestli tyto informace k něčemu používali, ale měli je k dispozici.
Není to tak, že by každému studentovi byla přiřazena nějaká formální subkomise jako je tomu u bakalářských zkoušek, ačkoliv se zdá, že zkoušející měli nějaký interní rozvrh, který přiřazoval studentovi jeho zkoušející.
Na začátku dne tedy po rozřazení studentů tito zkoušející (jeden pro každý okruh, tedy u mě 5 lidí) postupně přišli ke každému studentovi a zadali mu pro svůj okruh otázku. To udělali tak, že se podívali na seznamu pojmů v daném okruhu (do toho, co je v Karolínce) a vybrali jeden. Někteří skončili se zadáním takto, jiní ještě popsali, jak si odpověď představují (např. co bych neměl ve svém řešení vynechat). Otázka není konkrétní příklad, ani ho neobsahuje, byť to teoreticky může zkoušející ústně pak požadovat. Nic kromě bodů vypsaných v Karolínce pro daný okruh by otázkou být nemělo, a nebylo, ale zkoušející může daný bod upřesnit (to se mi stalo). Pojem nevybírali úplně náhodně (nelosovalo se), ale prostě se zadívali do seznamu a něco vybrali. Současně řekli, kdy přijdou odpověď zkontrolovat a diskutovat.
Na každý okruh tak bylo k dispozici 45 minut — 30 minut na přípravu a 15 minut na samotné zkoušení, byť zkoušení často netrvalo tak dlouho, a bylo možné zkoušejícího požádat, aby přišel dříve. Dokážu si představit, že by bylo možné zkoušení i odložit, pokud by člověk chtěl více času.
Zkoušející měli každý jiný přístup ke zkoušení. Někteří si přečetli, co student napsal, a pak se ptali na doplňující otázky; jiní studenta rovnou požádali, aby jim o tématu mluvil, bez toho, aby se moje zápisky pokoušeli přečíst sami.
Jakmile dokončíte všechny svoje okruhy (já pět okruhů), tak můžete odejít a je třeba počkat na vyhodnocení.
Komise vytvoří pro studenta z ústní části celkově jednu známku, kterou může určit libovolně, ale pochopil jsem, že většinou používá průměr “jakoby známek” z jednotlivých zkušebních okruhů, ale během zkoušení mi zkoušející neříkali, jakou známku by mi ze svého okruhu dali, a tedy známky, pokud si je k sobě zkoušející píšou, tak nebyly řečeny nahlas ani při vyhlášení.
Při vyhlášení, které proběhlo brzké odpoledne, vedoucí komise řekl o každém, jakou dostal známku z ústní části, a pokud už obhájil i diplomku, pak i jakou známku měl z diplomky, jakou známku má celkově ze studia, a jestli prospěl nebo prospěl s vyznamenáním. Pak pronesl krátkou motivační řeč a ukončil zkoušky.
Obtížnost
V mém termínu většina lidí získala jedničku nebo dvojku, ale byli zde i studenti, kteří zkoušku nesložili, tedy dá se neuspět. Pokud student na nějakou, byť jednu, otázku neřekne nic, pak to většinou stačí k tomu, aby neprospěl.
Subjektivně bych řekl, že magisterská zkouška mi přišla jednodušší než bakalářská, hlavně proto, že vzhledem k tomu, jak jsou témata zadaná (“řekni mi něco o rekurzi v SQL”), tak si může student sám určit, o čem bude mluvit, a nemusí umět řešit konkrétní problém (“dokaž tuto větu”) jako tomu bylo u bakalářských státnic.
Zkouška má jít do široka a ne do hluboka. Zkoušení je přehledové. Vedoucí komise doporučuje naučit se všechno a nespoléhat se, že daný bod student nedostane. Také mně se zdá výhodné, pokud jsem nucen vybrat jedno, se radši naučit ke všemu alespoň něco, než se naučit pár bodů důkladněji, a to i tehdy, pokud cílíte na vyznamenání.
Moje otázky
Moje otázky byly:
- Datové struktury: Splay stromy. (bez upřesnění)
Definoval jsem je, ukázal jsem, jak fungují operace insert, find a delete a rotace zig, zig-zig a zig-zag. Nastínil jsem, že důkaz jde přes potenciálovou metodu, a za potenciál bereme logaritmus velikosti podstromu v uzlech, ale důkaz samotný jsem neznal a i ideu bych měl problémy dát dohromady. Řekl jsem, že splay strom je užitečný pro situaci, kdy se vyhledává malá podmnožina prvků. Řekl jsem časovou složitost, amortizovanou a nejhorší, ale nedokazoval ji. Zkoušející se ptal na definici amortizované složitosti. - Složitost a vyčíslitelnost: Algoritmicky nerozhodnutelné problémy. (bez upřesnění)
Definoval jsem rozhodnutelný a rozpoznatelný problém/jazyk/množinu, kódování Turingových strojů. Řekl jsem bez důkazu Postovu větu a Riceovu větu a prohlásil, že diagonalizační jazyk, univerzální jazyk a jazyk halting problému jsou nerozhodnutelné a tyto jazyky definoval. Provedl jsem úplný důkaz nerozhodnutelnosti diagonalizačního jazyka. Zkoušející se ptal na nerozhodnutelné problémy nesouvisející s Turingovými stroji (neznal jsem) a na příklad rozpoznatelného jazyka, který není rozhodnutelný (řekl jsem halting problém). - Databáze: Rekurze v SQL. (bez upřesnění)
Řekl jsem, že SQL rekurzi časem dostalo i do standardu, že bez ní nelze řešit některé úlohy jako je tranzitivní uzávěr, a dal jsem příklady dotazů, kde se rekurze hodí. Ukázal jsem, jak lze syntakticky rekurzi provést na dvou příkladech zapsaných v SQL pomocí Common Table Expressions, a jak bude vyhodnocena. Zkoušející se ptal, co se stane, když bude rekurze nekonečná (databázový systém ji po konfigurovatelném počtu iterací zastaví), a v čem je Datalog silnější než SQL rekurze (nevěděl jsem; odpověď je, že v Datalogu je možné rekurzí naplňovat více tabulek současně). - Analýza a architektury software: Servisně orientované architektury. (zkoušející upřesnil, že chce praktickou a principielní definici, že chce vlastnosti SOA systémů a jejich výhody, a technologie užitečné pro SOA).
Řekl jsem k tomu hodně věcí. Zkoušející měl otázky, které jsem měl problémy odpovědět. - Rozšířené programování: Generické programování. (zkoušející upřesnil, že chce vědět, co to je a k čemu to je, a výhody a nevýhody přístupů k generice v různých, alespoň dvou, programovacích jazycích)
Dal jsem nějakou jakž takž definici, řekl jsem, k čemu je výhodné a jak se většinou používá (kolekce, kontejnery). Popsal jsem rozdíly mezi C++ (compile-time šablony), Javou (type erasure) a C# (runtime konstrukce typů) a nějaké výhody a nevýhody každého. Zkoušející se ptal na zásadní rozdíly mezi C++ a ostatními dvěma jazyky a na to, jak funguje kovariance a kontravariance.
Dostal jsem jedničku (celkově) a u všech okruhů kromě Analýzy a architektury software jsem vnitřně nemohl dostat nic než jedničku (neudělal jsem žádnou zásadní chybu, a nic dalšího po mě nechtěli), tedy je docela možné, že jsem řekl více, než je třeba, a i menší odpověď by stačila na jedničku.
Závěr
Jsem trochu smutný, že mám státnice za sebou, protože moje doba na matfyzu byla moc pěkná, je to pro mě nejlepší škola na světě, a těchto pět let bylo nejlepších pět let mého života, a to z podstatné části kvůli škole, a nechce se mi odejít. Na druhou stranu jsem šťastný, že mám státnice za sebou, protože jsem byl velmi nervózní a ve velkém stresu při učení, a strašně jsem přitom nabral váhu, takže je zase na čase nejíst… mno, co se dá dělat. Byl to pěkný den. Hodně štěstí při vašich státnicích :).
Martin Töpfer says:
Díky moc za sepsání a gratuluju k jedničce. Já státnice plánuju až v únoru, tak jsem si moc rád přečetl, jak to na nich funguje.