Poslední rok na FIT ČVUT

Po návratu ze Singapuru do ČR mě čekal poslední rok bakalářského studia na ČVUT. Kreditů jsem měl již díky množství volitelných předmětů dost, zbývalo tedy jen dostudovat oborové předměty mého studijního programu. Všechny jsem je zvládl vtěsnat do zimního semestru, takže celý letní semestr jsem se pak mohl věnovat už jen psaní bakalářské práce.

Pátý semestr na FIT ČVUT

[BI-PPR] Projekt, prezentace a rétorika –> B

Předmět slouží jako příprava k bakalářské práci. Probrali jsme strukturu odborné práce, práci se zdroji, prezentační dovednosti. Pro získání zápočtu bylo potřeba mít schválené téma BP a sepsat poziční zprávu. Během semestru jsme si napsali abstrakt, úvod a provedli prvotní literární rešerši. Na poslední hodině jsme pak své téma odprezentovali jako trénink na skutečnou obhajobu, a dostali zpětnou vazbu.

[BI-PST] Pravděpodobnost a statistika –> D

Poslední a pravděpodobně nejjednodušší matematický předmět na FITu. Pořád ale dost těžký na to, abych musel bojovat o každý bod potřebný k zápočtu. Náhodné veličiny, rozdělení pravděpodobnosti, konfidenční intervaly, testování hypotéz, lineární regrese. Součástí předmětu byl i skupinový projekt, kde jsme analyzovali jednoduchý dataset pomocí R.

[BI-EIA] Efektivní implementace algoritmů –> A

Jak implementovat výpočetní algoritmy v C tak, abychom dostali z počítače maximum výkonu? Tato oblast je známa jako High Performance Computing. Jde o to napsat kód, který umožní kompilátoru provést maximum optimalizací, využít vektorových instrukcí procesoru a efektivně pracovat s hierarchií vyrovnávací paměti. Nakonec jsme si ukázali, jak jednoduše paralelizovat algoritmy pomocí direktiv OpenMP. Všechny techniky jsme si vyzkoušeli na praktických úlohách, ve kterých jsme měli zrychlit nějaký existující kód. Nakonec jsme si vyzkoušeli i kompletní implementaci, optimalizaci a paralelizaci vybraného algoritmu, já řešil LU faktorizaci.

[BI-APS] Architektura počítačových systémů –> B

Hardwarový předmět, který se zabývá převážně architekturou procesoru a jednotlivými fázemi zpracování instrukcí. Dnešní procesory umožňují proudové zpracování instrukcí (pipelining), což znamená, že provádí více po sobě jdoucích instrukcí najednou, kdy každá instrukce je v jiné fázi zpracování. Takové chování je ale kvůli možným skokům v programu spekulativní a výsledky některých instrukcí se nakonec musí zahodit. Takové případy se snaží minimalizovat různé metody predikce skoku, které jsme si také představili. Na druhé straně je datový paralelismus využívající vektorových instrukcí, které umožňují v jedné instrukci provést více výpočtů najednou. Závěrem předmětu byla semestrální práce, ve které jsme implementovali skalární procesor ve Verilogu (jazyk pro modelování elektronických systémů).

[BI-EMP] Ekonomické a manažerské principy –> A

Předmět zabývající se ekonomikou podniku a jeho celým životním cyklem, finančními výkazy, základy účetnictví. Jelikož už pár let zkušeností s podnikáním mám, zas tolik nového jsem se nedozvěděl. Ale asi jsou to dobré základy, které by měl znát každý. Předmět nemá zkoušku, je zakončen prezentací zvoleného podnikatelského záměru a tvorbou business plánu.

Bakalářská práce

Téma bakalářské práce a vedoucího je ideální si zvolit už v zimním semestru, hlavně kvůli provázanosti s předmětem BI-PPR. Je možné si vybrat z nabízených témat v systému závěrečných prací, nebo si najít vedoucícho a navrhnout nějaké vlastní téma. To by mělo alespoň trochu souviset s vaším studijním oborem, například v teoretické informatice by se nemělo jednat o čistě implementační projekt. Já jsem přišel s návrhem napsat Bitcoinovou peněženku pro Android plně podporující zařízení TREZOR (hardwarová peněženka pro kryptoměny), jelikož žádná taková ještě na trhu nebyla. Zadání mi prošlo na první pokus. Cílem práce bylo napsat obecnou knihovnu pro komunikaci mezi Android zařízením a TREZORem, a následně vytvořit Bitcoinovou peněženku demonstrující využití této knihovny.

Při implementaci mi hodně pomohla knížka Mastering Bitcoin, specifikace Bitcoin Improvement Proposals a konzultace s CTO Satoshi Labs, kteří mi dokonce poskytli na testování jejich TREZOR One i TREZOR Model T. Výsledek mé práce je k dispozici na GitHubu, do samotného textu práce je možné nahlédnout v digitální knihovně ČVUT. Text by kromě dokumentace měl posloužit i jako ucelený teoretický úvod do fungování kryptoměnových peněženek a nepředpokládá žádné předchozí znalosti kryptografie.


Bitcoinová peněženka pro Android podporující TREZOR

Státní závěrečná zkouška

Poslední den na FIT ČVUT

Po dopsání práce následovalo měsíční nepřetržité opakování všeho, co jsem se za celé studium naučil a zapomněl. Bylo zajímavé vidět, jak látka většiny předmětů do sebe zapadá, ale na druhou stranu bylo demotivující se učit znovu do detailů všechno, z čeho už jsem zkoušku udělal, a prokázal tak, že to umím.

Konečně nastal den státní zkoušky. Ráno dokončuji prezentaci k obhajobě a v poledne dorážím do školy. Dostávám 2 okruhy otázek a mám několik desítek minut času na přípravu. Obhajoba bakalářské práce proběhla bez problémů, komise žádné doplňující otázky neměla a dostal jsem A navržené vedoucím. Následovala teoretická zkouška z tematických okruhů. Tady jsem se trochu zamotal do teorie překladačů až tak, že mě skoro chtěli vyhodit, ale nakonec jsem dostal náhradní otázku. K té už jsem něco na místě vymyslel a nakonec si odnesl celkovou známku B. Ale znovu jsem si uvědomil absurditu celé zkoušky, když A s červeným diplomem od F dělila jedna nešťastně položená otázka. Naštěstí tímto dnem bylo mé studium na FITu úspěšně ukončeno.

Čtvrtý semestr na FIT ČVUT

Další semestr ukončen. Je vidět, že nejtěžší předměty už mám asi za sebou, protože tentokrát jsem zakončil zatím nejlepším průměrem za celé studium. Ale úplně bez práce to také nebylo. A co že jsem tento semestr studoval?

[BI-BEZ] Bezpečnost → B

Předmět se zabývá především kryptografií (věda o šifrování). Nejdříve se proberou matematické principy různých typů historických i v současnosti běžně používaných šifer, nahlédne se i do budoucnosti úvodem do kvantové kryptografie. Potom se prakticky jednotlivé šifrovací techniky vyzkouší při programovacích úlohách v C s využitím knihovny openssl, např. k zašifrování obrázkového souboru nebo ručnímu navázání šifrovaného spojení přes internet.

[BI-EP2] Efektivní programování 2 → A

Volné pokračování volitelného předmětu EP1. Tentokrát témata velmi úzce souvisí s paralelně zapsaným předmětem BI-GRA, takže jeho absolvování pomůže pochopit většinu algoritmů probíraných na přednáškách v onom předmětu. Forma je stejná jako u první části předmětu – řešení úloh z minulých ročníků programovací soutěže a následná diskuse různých řešení studentů. Předmět je ukončen semestrální prací, která spočívá ve vytvoření zadání vlastní úlohy, napsání referenčního řešení a přípravě testovacích dat. Je zajímavé se podívat na věci i z té druhé strany.

[BI-GRA] Grafové algoritmy a základy teorie složitosti → B

Docela zajímavý oborový předmět zabývající se různými grafovými algoritmy, které mají v praxi široké využití, od hledání nejkratší cesty na mapě po optimální rozvržení přednášek do místností. Bojoval jsem s ním však do poslední chvíle. Testy na cvičeních během semestru mi přišly dost těžké, především tím, že se na ně nedalo moc připravit. Nakonec jsem ale body dohnal na dvou programovacích úlohách, teoretickém midtermu a první části zkoušky. Na druhou část zkoušky se totiž také moc připravit nedalo, úkolem bylo analyzovat problém a navrhnout algoritmus pro co nejefektivnější řešení. Problém byl ale dost nepřiměřený tomu, co jsme dělali v semestru. A nebyl to jen můj pocit, úplně správné řešení totiž neměl nikdo.

[BI-OSY] Operační systémy → A

Základní principy fungování všech operačních systémů – komunikace mezi procesy a vlákny, přidělování výpočetního výkonu vláknům, stránkování operační paměti, principy fungování různých souborových systémů. Součástí hodnocení byly 2 programovací úlohy – implementace vícevláknového programu typu producent–konzument a simulace stránkování paměti. U zkoušky pak počítací příklady zaměřené na přesné pochopení jednotlivých oblastí.

[BI-PJP] Programovací jazyky a překladače → A

Další oborový předmět, kde pochopíte, k čemu byla všechna ta teorie v BI-AAG. Výstupem je semestrální práce, jejíž náplní je implementace frontend části překladače pro zjednodušený jazyk Pascal – tedy vytvoření lexikální analyzátoru, syntaktického analyzátoru a překlad do abstraktního syntaktického stromu backendu gcc. Pro plné bodové hodnocení bylo potřeba v jazyce podporovat základní konstrukty jako deklarace a přiřazení proměnné, pole, podmínky, cykly, funkce s parametry a rekurzivní volání.

[BI-PSI] Počítačové sítě → B

Tady jsme se naučili, jak funguje internet a prošli detailně všechny vrstvy modelu ISO/OSI. V laboratořích jsme pak teorii procvičovali konfigurací Cisco routerů. Programovací úlohy spočívaly v napsání TCP klienta a UDP serveru.

Zbývá mi teoreticky poslední rok, ale už teď vím, že si studium ještě o rok prodloužím. Na další dva semestry totiž odjíždím studovat do zahraničí. O tom ale asi napíšu více v dalším článku.

Třetí semestr na FIT ČVUT

Mám za sebou třetí semestr, což také znamená, že už jsem v polovině bakalářského studia. Třetí semestr je doba, kdy je dobré mít vybraný svůj studijní obor, protože tady se začínají lišit doporučené průchody studijním programem. Ještě před nástupem na FIT jsem měl představu, že budu studovat Softwarové inženýrství, praktický obor zaměřený na práci v týmu na reálných projektech.

Nakonec jsem se ale rozhodl pro obor Teoretická informatika. Proč? Nevěnuje se tu tolik času tomu, jak programovací jazyky a nástroje používat k tvorbě aplikací, ale spíše jak skutečně fungují a třeba i jak si vytvořit jazyk vlastní nebo rozšířit existující. Neučí se tedy věci, které mohou být jinak ještě než školu vystudujete, ale základy, na kterých to všechno stojí. Naučit se postavit něco nad tím už je pak podle mě záležitost samostudia a praxe.

[BI-AAG] Automaty a gramatiky → C

aag-strip Z tohoto předmětu je mezi studenty asi největší respekt. Jeho cílem je seznámit s hierarchií formálních jazyků, gramatik, kterými se dají tyto jazyky zapsat, a výpočetních modelů, které tyto jazyky přijímají. Od konečných automatů, přes zásobníkové automaty až k Turingovu stroji. Nakonec základy teorie složitosti a vymezení problémů, které už počítač vyřešit neumí.

Zkouška se skládá z rozstřelu, písemné části a ústní zkoušky. Je to první předmět, u kterého je ústní zkouška povinná součást a neslouží jen k vylepšení známky. Je tedy potřeba opravdu dobře všemu rozumět, umět formálně zapsat, ale i vysvětlit.

[BI-DBS] Databázové systémy → A

Calkem jednoduchý předmět pro každého, kdo někdy pracoval s databází. Začne se uvedením formálního systému relační algebry, která poskytuje teoretický aparát, který je základem všech relačních databázových systémů. Hlavním cílem předmětu je pak naučit se jazyk SQL a vyzkoušet si návrh a implementaci databáze v databázovém stroji Oracle.

[BI-EFA] Efektivní algoritmy → B

První oborový předmět, pojmenoval bych jej spíše Datové struktury. Po zopakování polí a spojových seznamů jsme se vrhli na rozptylovací tabulky, binomiální a Fibonacciho haldy, vyvažované vyhledávací stromy (B–stromy, AVL a Červeno-černé stromy). Během semestru nás čekaly 3 domácí úlohy v Progtestu, při kterých jsme si některé struktury zkusili implementovat. Jsou to sice věci, které člověk neprogramuje každý den, ale hodí se vědět, díky čemu fungují indexy databází nebo file systémů.

[BI-EP1] Efektivní programování 1

Na povinných programovacích předmětech mi vadilo, že nikdy nebylo zveřejněno vzorové řešení. Člověk tedy skoro vždy za úlohy nějaké body získal, ale nikdy se vlastně nedozvěděl, v čem spočívalo efektivní řešení. A říká se, že nejvíce se člověk naučí právě čtením cizího kódu.

I z tohoto důvodu se mi tak líbil tento volitelný předmět. Každých 14 dní je zveřejněno několik úloh převzatých z mezinárodní programovací soutěže ACM. První týden je na každém, aby zkusil vyřešit, co zvládne. Poté jsou na přednášce vysvětleny principy možných řešení, včetně ukázky kódu, a zveřejněna vstupní data. Další týden je pak možnost za menší počet bodů úlohy dopsat.

[BI-SI1] Softwarové inženýrství 1 → B

flowchartNa začátku semestru jsme se rozdělili do týmů, ve kterých jsme si pak vyzkoušeli kompletní proces vývoje informačního systému od sběru a analýzy požadavků, přes návrh až po jeho implementaci. Pro některé studenty je to asi první zkušenost s prací v týmu, používáním verzovacího nástroje a vývoje nějaké reálné aplikace. Já si z toho odnesl jen seznámení s UML notací a potvrdilo se mi, že Softwarové inženýrství jako obor by pro mě nebyla šťastná volba. Většinu těhle věcí se člověk zvládne naučit sám, nebo během prvních pár dní práce ve firmě.

[BI-ZDM] Základy diskrétní matematiky → B

Oproti předchozím semestrům celkem pohodová matematika. Prochází se základy z různých oblastí matematiky, které se nám mohou hodit v jiných předmětech. Matematická indukce, teorie množin, binární relace, kombinatorika, rekurentní rovnice a základy teorie čísel.

[BI-3DT] 3D Tisk → A

Zábavný volitelný předmět, kde si zkusíte postavit 3D tiskárnu, naučíte se programovat parametrické modely v OpenSCAD a pomocí slicovacího nástroje Slic3r připravovat modely pro tisk. Po absolvování předmětu se vám otevřou dveře do 3Dprint Labu, kam si můžete přijít cokoliv vytisknout.

Abych to shrnul, třetí semestr mi přišel v mnohém jednodušší a zajímavější než druhý, ale nic není zadarmo. Pokud však něčemu věnujete dostatečný čas, i zprvu obtížná látka nakonec začne dávat smysl a všechno do sebe zapadne.

Druhý semestr na FIT ČVUT

V červnu jsem zakončil první ročník na FITu. Druhý semestr už byl v mnohém náročnější než ten první, ale také zajímavější. Pojďme si rozebrat jednotlivé předměty.

[LIN] Lineární algebra → E

Zatím nejtěžší předmět, s jakým jsem se setkal. Už jen pro získání zápočtu je potřeba vynaložit nemalé úsilí, i když zápočtové testy jdou napsat stylem nevím co to je, ale umím to spočítat. Před zkouškou jsem se věnoval nepřetržité skoro dva týdny studiu teorie a počítání všech možných typů příkladů. I přes skvělou podporu od vyučujících (konzultační hodiny, odpovídání na dotazy na FB) zápočet dostala jen asi polovina studentů, z nichž polovina u zkoušky neprošla. Předmět je náročný asi hlavně svojí obsáhlostí a množstvím teorie, kterou je potřeba znát.

Linda

[PA2] Programování a algoritmizace → C

Úvod do C++, objektového programování a abstraktních datových typů. Každý týden dvě programovací úlohy odevzdávané a automaticky hodnocené v Progtestu. Zkouškou je obhajoba semestrální práce, na které student samostatně pracuje během semestru. Téma dostal každý náhodně přiřazené, já vytvářel karetní hru Bang! s hrou po síti a umělou inteligencí. Předpokládá se dost samostudia, jelikož náročnost většiny zadání byla mnohonásobně vyšší, než cokoliv, co jsme se učili.

[SAP] Struktura a architektura počítačů → A

Praktické uplatnění některých znalostí z matematické logiky – návrh a minimalizace logických a sekvenčních obvodů, jejich sestavování v Xilinx ISE, následné nahrávání do FPGA přípravku. V druhé polovině semestru jsme poznávali Assembler v AVR Studiu. Při samostatných úlohách se programoval např. displej s posuvným textem nebo časovač bomby s využitím přerušení.

[TED] Tvorba elektronické dokumentace → A

Jeden s lehčích předmětů, naučili jsme se sázet text v LaTEXu, tvořit diagramy v Graphviz, grafy v Gnuplot a generovat dokumentaci ze zdrojového kódu pomocí Doxygen. Také jsme se seznámili se základy typografie.

[ZUM] Základy umělé inteligence → B

Volitelný předmět, který rozhodně můžu doporučit. Postupně se na přednáškách projdou různé oblasti umělé inteligence, některé se i prakticky vyzkouší na cvičeních – prohledávání stavového prostoru, evoluční výpočetní techniky, plánování, multiagentní systémy, teorie her, strojové učení, umělé neuronové sítě. Semestrální prací bylo řešení NP-úplného problému minimálního vrcholového pokrytí grafu pomocí genetického algoritmu (algoritmus inspirovaný biologickou evolucí, který implementuje křížení, mutaci, selekci a některé další pokročilé metody pro diverzifikaci populace).

Líbilo se mi propojení některých předmětů, Doxygen z TED jsem využil při dokumentaci semestrálky z PA2, LaTEX pro semestrálku ze ZUM, kterou jsem pak upravil na semestrálku pro TED. A ZUM se hodily i při programování AI pro semestrálku z PA2 a jeden úkol.

Už se začínám těšit na druhý ročník, který bude určitě zase trochu zajímavější. Ale do té doby musím trochu vydechnout, ještě zbývají 2 měsíce prázdnin.

První semestr na FIT ČVUT

Své osmileté působení na gymnáziu jsem úspěšně završil maturitou. Po trochu delších prázdninách jsem přesídlil do velkoměsta a poprvé vstoupil do budovy FIT ČVUT jako její student. Nyní mám první semestr na fakultě informatiky za sebou. Jak takové čtyři měsíce vypadají z pohledu prváka?

[ČAO] Číslicové a analogové obvody → A

Asi nejlehčí technický předmět. Jde spíše o seznámení se softwarem Wolfram Mathematica. Pomocí různých metod se zapisují jednoduché elektrické obvody a počítá napětí na součástkách. Při testech jsou k dispozici jakékoli materiály včetně internetu. Říká se, že pokud student nedá tohle, tak ani nic jiného.

[MLO] Matematická logika → B

Captain "Tarski" Obvious

Cílem je naučit se základy výrokové a predikátové logiky. Na přednáškách, jejichž náplní je čtení prezentace plné důkazů, ve kterých se ztrácí i přednášející, se to moc nedá. Že na cvičení se toho probere polovina, tomu nijak nepomáhá. Ale samostudiem ve zkouškovém se dá většina látky pochopit.

[PAI] Právo a informatika → C

Právní úpravy, které se hodí v odvětví IT znát. Smluvní právo, elektronický podpis, autorské právo, licence, právo doménových jmen. Zkouška je zaškrtávací formou, výběr ze 4 odpovědí. Jestli se to dá natipovat, chtěl zjistit Joe Reacher.

[PA1] Programování a algoritmizace 1 → B

Progtest. Každý týden nové zadání algoritmické úlohy, každý víkend strávený vymýšlením algoritmu, následnou implementací v jazyku C a debuggováním memory leaků ve Valgrindu. V průběhu semestru malé teoretické testy zaměřené na právě probíranou problematiku. IMHO fail byl ale zkouškový teoretický test, kvůli kterému ještě v průběhu zkoušky museli snižovat hranici, aby vůbec někdo prošel. Jeho obsahem byly všemožné záludnosti Céčka, debuggování rekurzivních funkcí a hledání memory leaků bez použití překladače. Ale Lenka Bártů dostala áčko, tak asi cajk.

[PS1] Programování v shellu 1 → A

Naučíte se ovládat libovolný UNIXový operační systém z příkazové řádky na úrovni pokročilého uživatele. Skrytým účelem je zřejmě nenásilně studenty donutit opustit Windows a přejít na Linux. Pro mě asi nejhodnotnější předmět semestru.

PSnF11

[ZMA] Základy matematické analýzy → D

Limity posloupností, derivace, integrály a hromada teorie k tomu. Bylo pro mě trochu překvapení, když jsme na první hodině probrali látku, co by na gymplu vyšla tak na rok. Časem se člověk do tempa ale dostane, nic jiného ani nezbývá. Taky jsem nikdy dřív nebyl nucen se učit definice nazpaměť. Ale složení zkoušky se mi líbilo, teoretické otázky doplněné o příklady, ve kterých se právě vyslovené definice využijí v praxi. Přesto v rozložení známek Gaussova křivka nějak není vidět.

Takže druhý semester, here we come!