Monthly Archives: February 2011

První semestr na Fakultě informatiky MU, obor Bioinformatika

Úvodní očekávání

Den otevřených dveří 2010

Den otevřených dveří na Fakultě informatiky mě velmi zklamal. Nejprve nudná »popularizační přednáška«, potom trocha otázek a odpovědí, kde se většina času věnovala naprosto nudným a nezajímavým věcem, který jsem si už třikrát přečetl na netu. Ti týpci (a hlavně jejich rodiče) si asi domácí úkoly nesplnili a tak jsme většinu času řešili, jak může študent zo Slovenska dosáhnout odpuštění přijímaček a další organizační detaily. V těhle fázi mi chybělo například představení oborů, které se na fakultě vyučují a nějaké jejich porovnání (na Gaudeamus MU nasadila panel studentských poradců, jednoho z každé fakulty. Mít na DoD reprezentační vzorek z každého oboru, to bych ale asi chtěl příliš…).  Další a závěreščná část DoD, prohlídka fakulty, ta byla docela fajn. V budově jsem se moc nezorientoval, některá místa, která jsem tehdy viděl jsem nyní musel pracně hledat :D , získal jsem si ale alespoň hrubou představu o rozsahu celé budovy a o tom, co mi může nabídnout. (Např v celé budově je docela málo učeben, alespoň se mi to tak zdá. Na střední jsme jich měli mnohem víc. Ale zase jsme neměli tři přednáškové haly.) Student, který nás provázel, (asi nějaký doktorand) byl docela sympatický. O bioinformatice nic nevěděl, ale jinak jsem si s ním docela dobře popovídal a tu debatu jednoznačně hodnotím jako vrchol celé akce. Během prohlídky se mě a ještě asi dalším třem lidem podařilo odpojit se od skupiny a ztratit se ve spleti fakultních chodeb :D Což zpětně nemůžu pochopit jak se nám mohlo podařit, protože ty chodby nejsou vůbec spletené.

Prvákoviny

Konečně někdo, kdo nám odpověděl i na otázky, které by nás v životě nenapadly. Konkrétně to znamenalo dvě studentky informatiky, Vlastu a Petru. Organizovaně jsme si zde také zaregistrovali předměty. Platil se účastnický poplatek 100 Kč a aby nám to nebylo líto, tak jsme nafasovali hrníčky.

Předměty

Matika

Matematika I, MB101, obnáší šest hodin výuky týdně – přednášku prof. Slováka v pondělí v podvečer, demonstrovaná cvičení s p. Panákem v úterý krátce po poledni a klasická cvičení s Mgr. Šlesingrem ve středu odpoledne. Ǔčastnil jsem se poctivě cvičení a počínaje čtvrtým týdnem i democvičení, odevzdal jsem dvanáct domácích úkolů, napsal tří písemky a prošel za C.

Informatika, IT a výpočetní systémy

» Poctivě jsem docházel na přednášky doc. Hliněného z Úvodu do informatiky v pondělí ráno. V průběhu semestru jsem získal 38 bodů a během psaní této věty se modlím, abych v pondělí dostal dalších tak 16, abych úspěšně ukončil za E.

» V pondělí jsem dostal dost bodů na to, abych ukončil za C. Další týden v pátek jsem si ještě šel napsat důkazovou písemku na zlepšení známky, ale z ní asi nedostanu dost bodů na B, takže mi asi C zůstane.

» Cé mi zůstalo.

“Pokud jste si doposud mysleli, že máte rádi informatiku, tento předmět vás vyvede z omylu.”

– neznámý student

Předmět hodnotím veskrze kladně.  Na jednu stranu představuje docela nepřilemné pošťouchnutí v tom, že vás donutí uvědomit si co je to vlastně informatika a hlavně co informatika není. Informatika není o programování, informatika není o výpočetních systémech a rozhodně není o bastlení webovek v Péhápku na Majsíkvelu.

Úvod do IT je mezi prvákovskými předměty význačný tím, že se jedná o předmět povídavý a biflovací. Kdybych měl k něčou přirovnat, tak nějak jako gymnaziální základy společenských věd.

“Internet je modrý”

– slajdy profesora Matysky

Protože jsem dneska zhlédl přednášku o grafice, nemohu opomenout, že prof. Matyska se dopustil několika chyb při popisu OpenGL. Jednak celou dobu se popisoval tzv. immediate mode, režim práce, který byl z OpenGL vyhozen ve verzi 3.1 a už od verze 2.1 se vpodstatě nepoužíval pro seriozní práci (=hry). Dále vyučující velmi nepřesně popsal funkce použité v hello-worldu, krerý měl ve slajdech. glShadeMode(GL_NICEST) nemá nic co dělat s antialiasingem čar, ale konfiguruje shader ve statické pipeline aby výsledek vypadal jako na tom obrázku co měl ve slajdech vpravo. No a mám pocit, že pořadí operací při vykreslování taky bylo dost pomýchaný, např. nejsem si jistý, jestli to, jak přednášející popsal transformaci souřadnic bylo úplně korektní, podle článků na webu se to provádí v trochu jiném pořadí, ale co už.

“Akademický internet ukazuje cestu”

“Malé je pěkné”

Výpočetní systémy. Tříhodinové přednášky z výpočetních systému pro mě byly vždycky velkou výzvou. Udržet se bdělý, zvláště v závěru, vyžadovalo aktivní úsilí. Dokonce ani psaní poznámek nepomáhalo a já jednou nebo dvakrát i vypustil nějakou část výkladu. Což byla nepochybně škoda, protože k těmto nízkoúrovňovým věcem se už jen tak nedostanu. Několik přednášek jsem nenavštívil z toho důvodu, že se mi předmět překrýval se cvičením z funkcionálního programování, které probíhalo každých čtrnáct dní. Po nějaké době jsem si s vyučujícími domluvil změnu skupiny, takže pak jsem o další přednášky tímto způsobem už nepřicházel.

Programování

Zapsal jsem si dva programovací předměty. Úvod do funkcionálního programování, povinný předmět, zaobírající se nepříliš praktickým programovacím jazykem Haskell, předmět dle studijního katalogu doporučovaný právě pro první semestr. Druhým kurzem byl úvod do programování, na jazyk C orientovaný předmět, který si klade za cíl představit studentům tento jazyk a sjednotit jejich znalosti v impoerativním neobjektovém programování.

  1. S úvodem do programování, IB001, jsem skončil v druhém týdnu semestru, několik dní před koncem orientačního období – čtrnactidenní periody, kdy je možno si bez jakýchkoli následků si několika kliknutími myši v ISu zrušit zápis (téměř) libovolného předmětu. Z tohoto důvodu nemohu v této věci dát víc, než popis první hodiny cvičení, kdy jsme si nakonfigurovali IDE (vývojové prostředí) CodeBlocks, aby nám do budoucna hezky sloužilo, a přeložili si nějaký Hello World. Cvičení vedl nějaký suplent, neb řádný cvičící se tou dobou ještě nezhostil svých pracovních povinností. S tímto cvičením by mi od dalšího týdne bývala začala kolidovat hodina angličtiny, nenašel jsem úpravu rozvrhu, která by mi umožnila navštěvovat postupně obě hodiny a tak jsem si úvod do programování dal odepsat.
  2. úvod do funkcionálního programování se mě drží doposud. Jedná se o předmět povinný a dost obávaný. Na prvákovínách, akci pořádané pro nově přijaté studenty na většině fakult MU (účastnicky poplatek 100 Kč, za což dostanete »zábavu« na dva dny, informace na tři roky a vkusný hrníček) jsme my účastníci vyslechli několik osobních příběhů o tom, za jakých různých okolností (např. pět minut před skouškou ve vstupní hale) je dojít ve věcech Haskellu k osvícení. Možno se jen domýšlet, jaký je osud těch, kteří osvícení nedojdou. FIT VUTbr? 8-)

Ať už je ale pověst Haskellu jakkoli špatná, spousta odborníků se domnívá, že právě funkcionáílní prvky nás mohou vyvést ze současné »krize výpočetní techniky«, způsobené pádem Moorova zákona. Procesory po padesáti letech už nezvyšují svůj výkon tak, jak by podle pana Moora měly, tedy podle exponenciální křivky, technologie narazila na své limity a místo vyšší rychlosti nyní máme více procesoru (dual core, quad core, …). Klasické programovací techniky jsou pro víceprocesorové stroje nevhodné a idee referenční transparentnosti nebo imutabilních datových typů tak nacházejí uplatnění na poli paralelního programování. Je tedy Haskell jazykem budoucnosti? IMHO určitě ne, protože jsem ještě neviděl jazyk, který by byl tak I/O unfriendly. Spíš to bude F#, Scala, Clojure nebo ještě něco úplně jiného. Functional Ruby? :D

Předmětem jsem prošel na A, hlavně proto, že otázky na prvním termínu závěrečného testu byly naprosto primitivní. Druhý termín to, co jsem slyšel, trochu napravil ;-ú

Angličtina

Angličtina na FI je nepovinná. Povinná je jen závěrečná zkouška z angličtiny, kterou musíte absolvovat před tím, než můžete ke státnicím.

Tento rok je především poznamenaný absencí obávaného angličtináře dr. Dvořáka, který je na FI tak trochu legendou. Protože tu není, tak jsem ho ještě ani neviděl. Jestli mám být za to rád, nevím. Každopádně cvičení jsem měl s K. Svačinou, který byl podle některých spolužáků tak příšerný, že do Angličtiny dokonce přestali docházet, podle mě se dal přežít.

Pokud ale chcete zažít opravdovou FI angličtinu, tak jedině s pí Tulajovou nebo Nečasovou.

Předmět všeobecně vzdělávacího charakteru

Z nabídky na straně 38 studijního katalogu jsem si vybral Panorama fyziky. Na přednášky jsem moc nechodil, protože se mi kryly se souběžným studiem na přírodovědě, nebylo to ale ani nutné. Zápočet se dával za vypracování nadpoloviční většiny domácích úkolů. Takže stačilo vybrat si ty jednoduché.

Ostatní

Biochemie – přednáška, předmět vyučovaný na lékařské fakultě. Stržen příkladem svých spolužáků z oboru jsem v závěru semestru přestal chodit na přednášky. Před zkouškou jsem toho pak hořce litoval. Nakonec jsem dostal za B, za což děkuji štěstině.

Laboratoř systémové biologie byl blokově vyučovaný předmět. To znamená, že nemá pravidelný rozvrh, jsou stanoveny v tomto případě tři dny, kdy se bude vyučovat od 9 do 14. Jedná se v podstatě o exkurzi do Bohunického kampusu pro Informatiky. Konají se dvě cvičení, v prvním se měří fotosyntéza rostlin a ve druhém se mělo dělat něco chemického (pro nemoc učitele se nekonalo). Třetí část je informatická, v programu COPASI se modelovaly biochemické reakce. Z obou částí se odevzdávaly protokoly. Fotosyntetický protokol jsme dělali jako skupina, takže to se dalo, informatický protokol naštěstí 1) nevyžadoval přílišné pochopení toho, co ten program vlastně počítá 2) učitel ho snad četl až potom, co nám předmět uznal, takže fajn. Jinak předmět je za čtyři kredity, ukončený kolokviem, které je za odevzdání protokolů.

Nahrávání přednášek

Dobrá věc. Úvod do IT jsem celý viděl ze záznamu, doplnil jsem si takhle dvě přednášky z Úvodu do informatiky, co jsem neviděl. Výpočetní systémy jsou předmět, který se nenahrává (přání vyučujícího; teda, on se nahrává, všechno se automaticky nahrává, jen prostě studentům nejsou přístupné záznamy, ale to vyjde nastejno)

Extrakurikulární aktivity

Jakožto student dojíždějící jsem trávil čas po škole spíše ve vlaku, než někde jinde. Jen na přelomu září a řijna, tedy na začátku roku, jsem se zúčastnil několika hospodských setkání. Ani pořádně nevím, kdy, kde a jak často se toho a všeliakých jiných pařeb zůčastňovali jiní, neb později v průbehu semestru jsem toho postupně zanechal a začalo to jít tak nějak mimo mě. Akorát v polovině zkouškového jsem došel na Klub deskových her.

Závěr

FIT enough?

Neodpustím si krátké zamyšlení na téma konkurentčních škol. Bylo by mi lépe na Fakultě informačních technologií VUTbr? Případně MENDELu? Všechny školy jsou více méně ve středu Brna, relativně blízko sebe, s dopravou by tak problém nebyl.

VUT i MENDELu mají zavedený kreditový strop respektive cosi jako kreditové poukázky, které limitují, kolik si toho můžete zapsat. Poukázky navíc omezují na FI běžnou praxi Zapíšu si všechno a první týden si polovinu nechám zase odepsat. Taková flexibilita by mi chyběla. Co vím o FITu, tak nabídka volitelných předmětů je tam velice omezená.

Na druhou stranu, podle toho, co jsem četl porůznu v blozích studentů FIT, myslím si, že by se mi i tam líbilo ;-) Naše informatikářka na střední měla, co jsem se s ní tak jednou bavil, rozhodně pravdu v tom, že tamní styl je mi asi bližší. Ale co už, takhle si na MU zase můžu zapsat laboratorní cvičení z fyzikální chemie pro biology (C4680), což by na VUT asi moc dobře nešlo :P

Úplný závěr

Celkem se mi tu líbílo a těším se na další spolupráci. Jak si moji oblíbení blogeři bakalářský FIT chválí, magisterské studium se jim povětšinou až tak nezamlouvá. Přesto ale, dá-li Pánbů, za ty tři roky plánuju opět důkladně vybírat, na jakou školu půjdu.

O smyslu a významu funkcionálního programováni dnes a pro dny příští

Četl jsem, že každý student se na informatické fakultě svého výběru dříve či později setká s funkcionálním programováním, ať už studuje Fakultu informatiky na Masarykové univerzitě nebo třeba Fakultě informačních technologií VUTbr, kde si tedy funkcionální programování, neboli funkcko, šetří až pro magistry.

Většina studentů odchází funkcionálním programováním relativně nepoznamenána, čest výjimkám. To vyvozuji jak z četby on-line diskusí, tak z pohledu na praxi, tak z vlastního pocitu. Chce se mi rýpnout, že ta poznamenaná menšina studentů odchází na VUT, což ale jistě není pravda. Za sebe říkám, že některé naprosto zásadní myšlenky funkcionálního programování jsem pochopil až dlouho za půlí semestru a půlsemestrálním testem (“každá funkce v Haskellu se z jistého pohledu vždy aplikuje na právě jeden argument”), přes tato svá zaváhání však relativně prospívám a pokud si na závěrečné písemce povedu jako doposud, měl bych se ctí prolézt ;-)

Pozn: dostal jsem Áčko

Co bychom si tedy měli z funkcionálního programování, řekněme z toho vyučovaného na Fakultě informatiky MU odnést? Když pominu vedlejší věci, třeba že právě na přednášce z funkcka jsme byli poprve uvedení do probému asymptotické složitosti algoritmu, že nám byli představeny některé jednoduché datové struktury a že na cvičení jsme byli poprve nuceni pracovat s počítači na Fedoře, zbývá jádro předmětu – funkcionální programování a Haskell, jako konktétní zhmotnění příslušných myšlenek. Co nám tyhle dvě věci přinesly?

Procvičníme si rekurzi, to jest když funkce volá sama sebe. Haskell nemá klasické cykly. To, pokud nevíte, vychází z celého funkcionálního paradigmatu, ve kterém jsme se rozhodli nemít informaci o stavu. V počítaném cyklu nutně potřebujeme počítadlo, které bude měnit svůj stav – počet dosud provedených cyklu či tak. Protože jsme se rozhodli být bezstavoví, počítaný cyklus je mimo a místo něj musíme chytře použít rekurzi. Cyklus nepočítaný, nějaký ten while či tak, ten se dá nahradit (rekurzí, nebo nějak úplně jinak) relativné přímočaře.

Jsme nuceni používat jiný přístup k řešení problémů: Generátory seznamů, lambdu, funkce vyšších řádů (funkce, která vrací funkci.) Pod vlivem funkcka jsem minulý týden v Pythonu spáchal svoji první lambdu a napsal si variaci na Haskellovskou funkci group :P

V Haskellu nebylo naprogramováno mnoho vzrušujících věcí. Seznamy Haskellového software bývají krátké a položky na nich lehce obskurní: verzovací systém Darcs, okenní manažer xmonad, několik málo her, generátor jmen pro počítače (něco originálnějšího, než “Počítač v kuchyni” a “Tereza-PC”)

Návrat do budoucnosti

Sequence, selection, iteration

Pokud přeskočíte hudební vložku (týpek bubnuje) a kosmologickou vložku (týpek popisuje vznik sluneční soustavy; oboje dohromady trvá prvních 5 minut), uslyšíte poměrně zajímavou přednášku, která zazněla na Rails Conf v roce 2010.

Osnova:

  1. hudební vložka a kosmologická vložka
  2. současné počítače jsou 10^²⁵× lepší, než to, s čím přednášející kdysi začínal. (týpek vynásobil dohromady spoustu dílčích zlepšeni)
  3. stručná historie imperativních programovacích jazyků, jazykové rodiny – ALGOLová a Lispová
  4. současné přestupy k programování jsou ~padesát let staré, dokonce i principy internetu byly formulovány už v roce 1962
  5. od té doby se vyvíjel jen hardware, který se zlepšíl 10^²⁵× , teorie za tím vším stagnuje a nový software jsou vlastně jen variace na to, co tu už bylo
  6. zajímavé odhady, třeba že v každém okamžiku je v datových kabelech v pohybu 50 gramů elektronů. V pohybu je udržuje výkon 50×10⁶ koňských sil. ;-)
  7. současné programovací přístupy neumí efektivně využít vícejádrové procesory, těžko se pro ně programuje a výsledek je extrémně obtížné udržovat a skoro nemožné udržitelně modifikovat
  8. exponenciálnímu zrychlování HW je konec, místo toho se vyrábí vícejádrové procesory
  9. ve víceprocesorovém systému je problém udržovat stav a tím se všechno komplikuje. Funkcionální jazyky jsou bezstavové. Rozumné funkcionální jazyky se nesnaží být fundamentálně bezstavové a proměnné podporují. Dokonce automaticky řeší synchronizaci.
  10. V poslední době se vynořují nové funkcionální jazyky, např F# od Microsoftu a mnohé další
  11. Průběžně během přednášky: tři knížky, které si prostě nemůžete nepřečíst

Youtube: http://youtu.be/mslMLp5bQD0 Podcast (mp3): http://itc.conversationsnetwork.org/shows/…

Tackling the Awkward Squad

Awkward Squad, to je důvod, proč podle mého názoru přímo Haskell tím jazykem budoucnosti nikdy nebude. Awkward Squad, to je v Haskellu vstup a výstup, výjimky, vícevláknový běh programu a volání vzdálených procedur. Všechny tyhle věci, které, dovolím si tvrdit, tvoří jádro moderního programování, Haskell sice má, dokonce jsou velmi mocné, jsou pojaty velice elegantně a konzistentně (alespoň to tvrdí haskellisti), problém je, jak sami Haskellisti uznávají, že výsledek je tak trochu »awkward«. Prostě to není hezké. Četl jsem názor jednoho programátora, který tvrdil, že vždycky když v Haskellu musí programovat vstupně/výstupní operaci, má pocit, že jazyk se mu snaží vnutit představu, že je něco špatně, že tím narušuje čistotu programu. To ho samozřejmě velice frustruje. Věc se odráží i v terminologii, funkce, které zajišťují rozhraní mezi programem a světem se v Haskellu nazývají impure. Co je to za jazyk, který v zájmu ideologické čistoty komplikuje vytváření užitečných programu? Odpověď je jasná, takový jazyk je  jazyk akademický.

Scala, F# × Clojure

F# je reinkarnace Ocaml, v kompatibilním módu je s Ocaml kompatibilní, v nekompatibilním módu není a podporuje nějaká rozšíření. Program se překládá pro .Net.

Programy ve Scale se překládají pro JVM.

Clojure je nezávislá iniciativa jednoho člověka, nezávislá na jakékoli firmě (jako Ruby, Python, PHP,…), překládá se pro Javu, tedy JVM, alternativně existuje port pro .Net, tedy CLR.

Jak si můžete všimnout, tyhle jazyky jsou úzce navázány na již existující a široce používané »ekosystémy«. Znamená to, že ve svém programu můžete bez problémů používat knihovny, které existují pro tu danou platformu, na které je jazyk vystavěn.

Doslov

Zdá se mi, že funkcionální programování má budoucnost.

Jak je možno dovodit porovnáním výše napsaného a diskuse pod tímto článkem, nechal jsem se v první části tohoto blogu značně inspirovat názory více či méně anonymních diskutérů. Děkuji autorovi článku za rozpoutání podnětné debaty.