sobota 21. ledna 2012

III. semestr na FIT ČVUT

 Ohlédnutí se za zimním semestrem 2011/2012 

Automaty a gramatiky (BI-AAG)

První ze série předmětů, které rozkrývají asi nejzáhadnější software v počítači – překladač – program, který překládá jiné programy. Radostná zpráva pro každého robinsona v podobě teorie, která staví most mezi „vysokým“ programováním a „nízkým“ strojovým kódem, kterému rozumí procesor. Zpráva o tom, že konstrukce překladače je v principu možná a že je čeho se chytit.

Náplní předmětu ale není návrh překladačů, ale zorientování se v teorii formálních jazyků a gramatik dle Chomského, podrobné zvládnutí nejjednodušší třídy jazyků (regulární jazyky) a úvod do formálních překladů a třídy bezkontextových jazyků. Dozvíte se mimo jiné, jak převádět regulární výrazy na konečné automaty, čehož si dosyta užijete na papíře. V rámci domácího úkolu si vyzkoušíte práci s programem flex pro lexikální analýzu.

Jakkoli se v semestru zdá, že tu jde hlavně o mechanické ovládnutí různých postupů na papíře, ústní část zkoušky s právem veta zkoumá pochopení teorie a velká část studentů se na ni podívá vícekrát. BI-AAG přednáší docenti Holub a Janoušek, z nichž Holub má pověst krutopřísného zkoušejícího a Janoušek zase toho hodného. Pan Janoušek také učí návazné předměty a na FITu patří mezi skvělé učitele.

Databázové systémy (BI-DBS)

Je-li pro vás relační databázový stroj sprosté slovo, v tomto kurzu zjistíte, jak se s ním běžně dorozumět. Je dobře, že na to jde trochu od lesa a nesnaží se co nejdříve o probírání jazyka SQL. Díky tomu je dříve než SQL a jeho stěžejní příkaz SELECT probrána relační algebra, která SELECT poměrně hezky (avšak ne úplně) popisuje řečí matematiky spíše než zdrojového kódu. Také databáze se navrhuje nejdříve konceptuálně a až poté se překlápí do relačního modelu. Dozvíte se, co je to databáze, relační databáze, jak ji navrhnout, jak posoudit kvalitu návrhu (normalizace, funkční závislosti), co je to transakční zpracování a proč se to v praxi někdy chová jinak (aktualizační anomálie), a dozvíte se základní příkazy SQL včetně vyčerpávajícího pojednání o příkazu SELECT.

Přednášky pana Valenty jsou zajímavé, s důrazem na praxi. Díky tomu se také dozvíte, co se v tomto předmětu nedozvídáte – že existují triggery, uložené procedury, že databázový stroj vytváří prováděcí plány atd. Pokročilé věci (které si někteří studenti asi slibovali od tohoto kurzu) se dělají až ve volitelném předmětu Jazyk SQL (BI-SQL).

Praktickou část předmětu tvoří vypracování vlastní databáze od návrhu po dotazy, což je pochopitelně velmi poučné. Pokud se student nerozhodne jinak, pracuje na školní Oracle databázi, což s sebou nese výhodu v podobě pohodlných grafických nástrojů pro návrh databáze (Data Modeler) a ladění dotazů (SQL Developer). Ačkoli má předmět jednou za 14 dní cvičení, nejsou popravdě moc platná, což je asi největší slabina BI-DBS. Naštěstí přednášky a prosemináře ke zvládnutí látky stačí.

Základy diskrétní matematiky (BI-ZDM)

Probírá se matematická indukce, relace, kombinatorika a řešení rekurentních rovnic (přesné a asymptotické). Na nějaké rekurentní rovnice sice došlo už v předmětu BI-ZMA, ale to šlo spíše jen o „strašení studentů“ prvního semestru tím, že v principu lze odvodit složitost algoritmu touto cestou. Zde již nejde jen o princip, ale i o praktickou aplikaci, se kterou počítá třeba předmět BI-EFA. Kombinatorika má zase blízko k různým hádankám a hlavolamům a relace se přímo objevují v předmětech BI-DBS a BI-AAG.

Zatímco Olšákova Lineární algebra (BI-LIN) pevně stojí a trvá na důkazech, diskrétní matematika doc. Koláře na důkazech předkládaných vět nelpí, ale zase lpí na schopnosti dokázat indukcí nějaký konkrétní vztah.

Cvičení s panem Frankem byla sice poznamenána tím, že pro něj šlo o třetí hodinu v řadě, ale dobře látku vysvětlil a doplnil i o širší kontext a různé zajímavosti; šlo spíše o pochopení, než o počítání velkého množství příkladů, což hodnotím kladně. Také zveřejnil seznam kombinatorických hádanek za bonusové body.

Efektivní algoritmy (BI-EFA)

Zde se seznámíte s efektivními datovými strukturami: kruhové pole, rozptylovací tabulky, vyhledávací stromy (B-tree, AVL, červeno-černé, trie), haldy (binomiální a „magické“ Fibonacciho haldy). Rozbory složitostí, rozpitvání řadících algoritmů vč. důkazu, proč je n log n dolní mez složitosti algoritmů řazení, které porovnávají a prohazují prvky. Na konci se dostane i na nějaké další věci jako je dynamické programování a QuadTree.

Pracuje se na papír a na tabuli, ale také jsou dvě programovací úlohy, letos na téma rozptylovací tabulky a B-stromy, které jsou nepovinné, lze za ně však dostat poměrně hodně bodů (při brzkém odevzdání bonus 50 %). Zkouška je příjemná v tom, že po získání minimální hranice z první části už lze skóre pouze vylepšit (srovnej právo veta v BI-AAG a „sázku“ −5 bodů pro absolvování další části zkoušky v BI-ZDM).

Přednášky pana děkana nepatří mezi zvláště zábavné, ale prezentace jsou až vyčerpávajícím zdrojem informací včetně animací a důkazů a pseudokódů. Během semestru došlo k poměrně kuriózní situaci při probírání Fibonacciho hald, jelikož jde zřejmě o poněkud exotickou datovou strukturu, ke které je nedostatek literatury, a tak nebylo zcela jasné, jak přesně má fungovat „magický“ příznak jejích uzlů, který ji udržuje pohromadě. Každopádně pseudokódy byly opraveny a teď už je snad vše, jak má být.

Objektové modelování (BI-OMO)

>>> class Pes:
...     def pozdrav(self):
...         print("Haf haf!")
>>> class Kočka:
...     def pozdrav(self):
...         print("Mňáááu!")
>>> alík = Pes()
>>> micka = Kočka()
>>> domácí_zvířata = [alík, micka]
>>> for zvíře in domácí_zvířata:
...     zvíře.pozdrav()
Haf haf!
Mňáááu!

Objektově orientovaným programátorům dnes patří svět. Předmět dr. Pergla však není kuchařka „1001 návrhový vzor“, ale naopak jde (anebo alespoň míří) do překvapivé hloubky objektově orientovaného paradigmatu.

Příklad výše demonstruje polymorfismus nezávislý na dědění. Programovací část předmětu se ale neodehrává v Pythonu, ale ve Smalltalku, pozoruhodném vývojovém prostředí a jazyku, který v sobě kombinuje λ-kalkulus, přirozený jazyk a přístup „vše je objekt“:

alík := Pes new.
micka := Kočka new.
domácí_zvířata := OrderedCollection with: alík with: micka.
domácí_zvířata do: [ :zvíře | zvíře pozdrav ].

Předmět se zabývá návrhem informačních systémů z pohledu OOP: rozbor slovního zadání, vytvoření konceptuálního modelu (entity a vztahy zanesené do UML diagramu tříd), až po prototyp ve Smalltalku. Na rozdíl od BI-ZSI je návrh systému pojat spíše způsobem „jak se v tom zorientovat, kdybych to měl dělat sám“, UML se neprobírá do šířky.

Přidanou hodnotu předmětu tvoří (kromě Smalltalku) poměrně dlouhá série přednášek na téma ontologického přístupu k tvorbě konceptuálního modelu. Dr. Pergl zde čerpá z práce dr. Giancarla Guizzardiho, který vytvořil nadstavbu UML (OntoUML) obohacenou právě o ontologii (a také teorii okolo, založenou na modální logice).

OntoUML například zdůvodňuje, proč by Student a Učitel neměl být podtyp Člověka: Člověk je objekt, který má identitu sám o sobě, zatímco Student a Učitel jsou role, kterým identitu propůjčuje nějaký Člověk (ani nejsou navzájem exkluzivní). Pokud bychom přesto chtěli použít dědičnost, bude to mít negativní následky: student, který je zároveň učitel, musí být v systému dvakrát, atd. OntoUML mělo letos svůj první běh, takže to místy trochu skřípalo, ale časem se to jistě vyladí.

Základy softwarového inženýrství (BI-ZSI)

Předmět pro studenty mimo obor Softwarové inženýrství, který je má utvrdit v tom, že si zvolili správně :-)

BI-ZSI se podobně jako BI-OMO zabývá tvorbou informačních systémů, ale z jiné strany. Během celého semestru se po skupinách 4–6 lidí vytváří IS: analýza, návrh a část implementace. Stěžejní je projektová dokumentace a funkční ukázka aplikace.

V praxi jde o demýtizaci klasické úlohy „Jeden kopáč kope výkop x hodin, jak dlouho budou kopat tři kopáči?“, kombinované s kreslením roztodivných UML diagramů v mamutím programu Enterprise Architect – fakt, že v BI-OMO se diagramy kreslí v UMLetu, docela vystihuje rozdíl mezi těmito předměty.

Jde o předmět otravný, nicméně vás poměrně podrobně obeznámí s notací UML a nastíní, jak se může dělat „software ve velkém“. A když zahodíte 80 % „byrokracie“, může to snad být k užitku i pro „software v malém“.

 

Žádné komentáře:

Okomentovat

Úvod do translatismu X. aneb Obrácená strana medaile

Hlídejte si svá holoubátka! Po více než třech letech dospěl filologicko-psychologický seriál o nové vědní disciplíně translatismu ke s...