Ladislav Vagner: První verze ProgTestu vznikla za týden

Jen málokteré jméno je s FIT ČVUT spojené tak jako jméno Ladislava Vagnera, otce ProgTestu a populárního vyučujícího programovacích předmětů. Jaká je historie jeho bílé klávesnice? Jak se ProgTest dostal do Mexika? A podařilo se někdy někomu do ProgTestu nabourat? To vše a ještě mnohem víc prozradil v unikátním rozhovoru pro náš časopis.

Ladislav Vagner

Ing. Ladislav Vagner, Ph.D. na FITu působí na Katedře teoretické informatiky. Je garantem a proseminujícím úvodních programovacích předmětů Programování a algoritmizace 1 (BI-PA1) a Programování a algoritmizace 2 (BI-PA2), kde má na starosti i přednášky. Dále ho studenti znají z proseminářů předmětu Operační systémy (BI-OSY). Je také autorem všem FIŤákům dobře známého vyhodnocovacího systému ProgTest, na který studenti odevzdávají své programovací domácí úkoly nebo na něm píší testy.

Na FITu jste mezi studenty vnímaný jako programovací legenda. Jak jste se vůbec k programování dostal? Byl to váš koníček už od mala?

To bylo na základní škole někdy okolo roku 1985/86. Tenkrát ještě počítače mezi veřejností moc nebyly a celá třída jsme jezdili programovat do vybraných škol, kde měli třídy zařízené PMD 85. Moc jsem tomu teda tenkrát nerozuměl, ono to taky ani moc dobře nešlo, protože nás tam seděla celá třída, 30 dětí, dva u počítače a akorát nám říkali, co máme mačkat. Ale pak se otevřely kroužky, já jsem se přihlásil a tím jsem se k programování dostal.

Počítač PMD 85
[1] 8bitový osobní počítač PMD 85

A to vás tak okouzlilo, že jste se později rozhodl jít na vysokou školu studovat informatiku?

Já jsem pak ještě zažil začátek 90. let na střední škole, kam nám ve druháku přivezli PCčka. A na těch jsme se tenkrát strašným způsobem vyřádili. Každé odpoledne jsme trávili v počítačové učebně a něco zkoušeli. Takže když jsem pak šel na vysokou, měl jsem už poměrně jasno. Věděl jsem, co programování obnáší, a měl jsem nějakou zkušenost.

Šel jste studovat na ČVUT předpokládám?

Ano, na FEL.

A vystudoval jste, nevím, jestli už tehdy existoval, obor Teoretická informatika?

Tenkrát to byla Elektrotechnika a výpočetní technika.

Proč jste se rozhodl zůstat v akademické sféře? Co vás na tom tak chytlo?

V 5. ročníku jsem se v předmětu Tvorba překladačů dostal k LR gramatikám a paralelní syntaktické analýze. A tenkrát to prezentoval profesor Melichar jako něco, co ještě není dobře poznané a kde je prostor pro výzkum. Tak jsem se přes Vánoce díval, co bych vymyslel. Něco jsem vymyslel, nebylo to sice úplně dobře, ale bylo to zajímavé. A pak jsem se rozhodl zůstat jako student na doktorátu.

Jak dlouho už vlastně na FELu/FITu učíte nové generace studentů programovat?

Byl jsem na civilní službě, ale na FELu a později na FITu učím od roku 2000.

Na stránkách fakulty jsem našla, že se na Katedře teoretické informatiky věnujete také výzkumu v oblasti Arbologie.

No, ve výzkumu to teď není žádná velká sláva. Pravda je, že od syntaktických analyzátorů k Arbologii není tak daleko, nicméně faktem je, že z výzkumu jsem toho v poslední době moc neudělal.

Baví vás víc výuka?

Spíš zabere tolik času, že ho pak už nezbývá moc na nic jiného. Je velký rozdíl učit předmět, ve kterém je 20 studentů, a předmět, ve kterém jich je 600.

Vaše prosemináře jsou mezi studenty neskutečně populární, v předkoronavirové době byl často velký problém najít v přednáškové místnosti volné místo k sezení. Jaký to je pocit programovat před tolika diváky? Nemáte občas trému?

Ta učebna není zaplněná zdaleka vždycky. Návštěvnost v průběhu semestru vždycky opadává, takže to, co jste říkala, platí možná prvních 14 dní v semestru, ale pak na konci semestru bývá poloprázdno. Co se týká programování před publikem, to má určitě svoje specifika. Někdy zažívám horké chvilky, kdy mi něco nefunguje a nevím proč. Je v pořádku, když mi program nefunguje a vím proč, to dost často předvádím. A studenty vždy pobaví, pokud je v programu chyba, nechce se projevit a já se marně snažím, aby program spadl.

Stalo se vám už někdy, že něco nefungovalo a na prosemináři jste to nevyřešil?

Snad se mi nestalo, že bych to nevyřešil. Ale asi před 3 lety jsem něco předváděl, vydali jsme se trochu jinou cestou, než jsem měl rozmyšleno, a program se choval jinak, než se měl chovat. A já jsem nevěděl, proč se tak chová. Trvalo mi dobrých 5–⁠10 minut, než jsem si ujasnil, co se v programu děje, a pak jsem to opravil. Ale ten čas, kdy jsem nad tím přemýšlel, to bylo dost horkých 10 minut.

Jenom 10 minut, to je ještě dobrý čas.

10 minut je dobrých, ale 10 minut, kdy na vás kouká 200 lidí, dobrých není.

Takový váš slavný artefakt je bílá klávesnice, kterou si s sebou během prezenční výuky na prosemináře nosíte. Neprozradil byste o ní podrobnosti? Jaká je to značka, jak ji máte dlouho, jestli se k ní třeba váže nějaká historka…?

Klávesnice je obyčejná, taková, která se rozdávala ke stolním počítačům, když se vybavovaly kanceláře. Teď už vím, že je to Chiconka (klávesnice zn. Chicony, pozn. red.), ale kdyby se mě na ni lidi neptali, tak si to ani nepamatuju. A byla to klávesnice za nějakých 150 korun, takže není nijak zvláštní. Má teda výhodu, že vydržela už 12 let a ještě stále funguje. Až na levý shift. A veselá historka se k ní váže. Kolega Petr Hodač (Hody) kdysi, když ještě fakulta neměla vlastní insignie, z legrace prohlásil, že by na ni mohli studenti v Betlémské kapli přísahat.

To je skvělý nápad, myslím, že by se to určitě ujalo.

To bylo myšlené samozřejmě jako nadsázka a od té doby škola už insignie má.

A jestli se klávesnice jednou rozbije, plánujete si koupit úplně stejnou?

Ona už se snad ani nevyrábí. A Das Keyboard mi fakulta asi nekoupí.

Ladislav Vagner s klávesnicí
[2] Ladislav Vagner se svou slavnou klávesnicí

Teď bych se přesunula k distanční výuce. Koukala jsem, že se z vás teď stal tak trochu YouTuber, kdy pro studenty připravujete streamy na YouTube. Jaký je vůbec pocit, komunikovat se studenty jen přes chat? Pomáhá třeba, že se víc ptají, nebo naopak? Jaká je pro vás výuka na dálku?

Vzdálená výuka se dost kritizuje, že to není ono. To je do nějaké míry samozřejmě pravda. Na druhou stranu vznikají materiály, které si student může přehrát kdykoliv a myslím, že třeba kombinovaní studenti to teď mají o dost jednodušší. Faktem je, že u přednášek vzdálená výuka skoro nevadí nebo rozdíl nebude tak velký. U proseminářů mi vadí, že chybí kontakt ze strany studentů. Dotazy přes chat mají vždycky nějaké zpoždění. Vymyšlení otázky, její napsání, nějaké zpoždění ve streamování… To všechno dohromady může dělat minuty a interaktivita se pak ztrácí. A druhý problém, který se taky asi začne projevovat, je ten, že máme studenty ve druhém semestru, kteří nikdy nebyli na kontaktní výuce. A oni se ani neptají a nejsou zvyklí se ptát. Protože jim připadalo už od začátku, že ptát se prostřednictvím chatu je náročnější a zdržuje to. A to je špatně a bude to do budoucna problém.

Já jsem právě slyšela, že PA1 mělo letos nižší průchodnost. Takže si nemyslíte, že online výuka dokáže úplně nahradit tu prezenční?

Asi úplně ne. Dokážu si představit, že třeba u přednášek přes streamování rozdíl nebude veliký, ale ty ostatní formy výuky… Schovat se doma za monitorem a mlčet celou dobu je prostě jednoduché.

A neuvažujete o tom, že byste něco z online výuky zachoval až se zase podíváme prezenčně do školy? Třeba nahrávání proseminářů nebo přednášek?

Přednášky jsou asi docela dobrý nápad, u proseminářů přece jenom chybí interaktivita. Nahrávat se dají, ale ve chvíli, kdy je proseminář postavený na tom, že se studenty spolupracujeme a něco vymýšlíme –⁠ oni navrhují špatnou cestu, nebo já naopak navrhuju špatnou cestu –⁠ a chybí zpětná vazba od studenta, který by říkal tudy ne, nebo tudy ano, je ten proseminář logicky ochuzený. Proto mi streamování v normálním režimu nepřijde tak užitečné. Teď je to samozřejmě potřeba, protože nemáme nic lepšího, ale v normálním režimu si myslím, že by bylo lepší vrátit se ke kontaktní formě. Co je docela zajímavá možnost, jsou třeba v PA2kách obhajoby semestrálek. Tam si myslím, že nějaká vzdálená forma šetří čas všem, nám i studentům, a umožňuje nám líp naplánovat průběh. Vzdáleně zkoušet to je… No, to není tak dobrý nápad.

BI-PA2 přednáška na YouTube
[3] Jan Trávníček a Ladislav Vagner pro studenty streamují přednášky a prosemináře z předmětu BI-PA2

Pro hodně studentů je zlatým hřebem zkoušky, když si s nimi na konci zkoušky potřesete rukou. Neplánujete i tohle nějak přenést do virtuálního světa, aby o to studenti nepřišli?

Přenést do virtuálního světa? No od příštího roku by si se studenty měl potřásat rukou Honza Trávníček jakožto garant, takže mu předám tuhle povinnost. A co se týká virtuálního potřesení rukou, nevím, některé věci možná do virtuálního světa nemusíme přenášet.

Třeba byste poslal nějaký email, nevím, nějaký certifikát.

Jako podepsané potřesení rukou, třeba.

Na studenty si vymýšlíte zapeklité progtestové úlohy. Když si vzpomenete na sebe jako studenta, jak myslíte, že byste ProgTest vnímal? Bavilo by vás úlohy řešit, nebo byste si spíš říkal, co si to na vás kdo zase vymyslel?

To je dobrá otázka. Přístup ve věku 18/20 let je dost jiný než přístup ve věku 25 let. Když se člověk už ve věku 18 let člověk dozví, že se některé věci nechají řešit líp, snadno anebo elegantněji, tak to je určitě dobře. Já bych některé věci, na které se dneska studentů ptám, taky nevěděl. Byl bych asi schopen řešit úlohy na úrovni toho, co považuji za základ, bez nějakých algoritmických vylepšení. Určitě bych měl ve věku 18/20 let na začátku svého vysokoškolského studia problém s algoritmickými fintami, to bych si musel nastudovat. Je ale obrovský rozdíl mezi rokem 2020 a 1994. V roce 1994 jsem na internetu nenašel přehled algoritmů, kterými by se dala tahle nebo ona finta zprovoznit. Dokonce ani kdybych ten algoritmus znal jménem, tak bych ho tenkrát asi nenašel. Takže na jednu stranu by mně to možná dělalo trochu problémy, na druhou stranu bych se hodně věcí naučil dřív.

Takže hlavně aby se v tom studenti snažili vidět třeba i nějakou zábavu a nedělali si nic z toho, když nejsou jedničky na ProgTestu.

Tak být první na ProgTestu je samozřejmě potěšující, ale to není tak důležité. Snažíme se být připraveni na to, že studenti jsou dnes různí. Mezi nimi jsou lidé, kteří umějí programovat velmi dobře, a lidé, kteří moc programovat neumějí, nebo neprogramovali nikdy v životě. A škola by všem studentům v prvním ročníku měla nabídnout aspoň něco. Aby to na jedné straně zvládali a na druhou stranu, aby měli kam růst. Takže být v progtestovém žebříčku ne na prvním, ale na padesátém místě a mít ne 120 % bodů, ale 95 % bodů, je ještě pořád pěkný výsledek.

Je nějaký studentský kód odevzdaný za ta léta na ProgTest, který vám opravdu utkvěl v paměti, ať už v dobrém nebo ve špatném slova smyslu?

V dobrém a ve špatném slova smyslu… Například když se kontroluje opisování, tak jsou v těch programech nejrůznější poznámky a někdy je opravdu úsměvné si je pročítat. Třeba tam je napsáno něco jako: „Hlavně tohle oprav, neodevzdávej to v týhle podobě, ať na nás nepřijdou“. Tak to jsou takové, teď nevím jestli veselé, nebo smutné historky, které utkví v paměti.

Jak dlouho vám tak vlastně trvá vymyslet a otestovat nové progtestové zadání? Jak těžké je vymyslet všechny možné edge casy a připravit testovací vstupy? A co zadání ProgTestů z BI-OSY?

To zabírá docela dost času a je to překvapivě náročnější, než by si člověk myslel. Když jsem s ProgTestem začínal, tak jsem předpokládal, že se do něj ty úlohy jednou vyplní, pak od toho bude pokoj a dlouho se na to nebude muset sáhnout. Takhle to ale samozřejmě nefunguje, příprava úloh dá mnohem víc práce než nějaká údržba systému. U těch úloh je samozřejmě rozdíl mezi PA1čkovou úlohou, která má být někdy na začátku semestru a výsledkem je 30 řádkový program, a úlohou na OSY, která může mít řádků stovky. PA1čková úloha se nechá zvládnout tak za den. Déle trvá vymyslet, co by úloha měla řešit, nějaká pohádka okolo a co by mělo být přínosem. A hlavně teď už taky, aby úloha nebyla stejná jako některá, co už běžela, aby se řešení nedalo někde stáhnout a opsat. Převažuje čas, kdy nad tím člověk přemýšlí a nemusí sedět u počítače, například cestou do školy, v metru a podobně. Opakem je úloha do předmětu OSY. Tam implementace dokáže potrápit, aby se dobře paralelizovala, a jsou nejrůznější důvody, proč se to může chovat jinak, než člověk předpokládá. Někdy člověk třeba zjistí nějaké zvláštní vlastnosti procesorů, které se uplatní a o kterých nevěděl, a to je schopné zabrat libovolně dlouho. Úloha na OSY bývá tak týden práce.

Jak často se vám stane, že v zadání progtestu zapomenete něco ošetřit? Třeba vám to pak nějaký student napíše?

Taky se stane. Mimo jiné proto jsme zavedli, že všechny progtestové úlohy kontrolují i cvičící, ještě předtím, než se zveřejní studentům. Ideálně když máme 2 další řešení, aby se pokud možno vychytaly problémy. Důležitá je i kontrola textu zadání. Často si cvičící přečte text a řekne, že v něm něco není jasné, a já to přeformuluji. Díky tomu se nalezené chyby vyskytují méně, než třeba v dobách, kdy ProgTest začínal.

Jestli můžete říct, podařilo se do ProgTestu někdy nějakému studentovi nabourat ať už omylem, nebo záměrně?

Studenti se snaží a je svým způsobem hezké, že se někteří studenti snaží a zkouší, co vydrží. Dokonce v předmětu Etické hackování byla jedna úloha na hackování ProgTestu. Některým studentům se některé věci podařilo nabourat nebo se dostali k něčemu, k čemu se dostat neměli. Ne že by to vyloženě ohrožovalo funkci ProgTestu, ale pokud se něco takového studentovi povedlo, tak jsem se pak snažil díru zalátat.

Jak dlouho už se na FELu/FITu ProgTest používá? Programoval jste ho sám? A proč vlastně vznikl?

ProgTest začal fungovat v zimním semestru 2008/2009 ještě na FELu. Tenkrát jsem učil předmět Programování v jazyce C++ ve druhém ročníku – tam se v prvním ročníku učila hodně elektrotechnika, takže to měli trošičku posunuté – a měl jsem na starosti paralelku, ve které bylo přes 150 studentů. Na tu paralelku jsme byli celkem 3 a měli jsme obsloužit přednášku, proseminář i cvičení. Na jednoho člověka připadalo hrozně moc práce. Tak jsme museli hledat nějaké strojovější řešení. Já jsem ten předmět měl na starosti poprvé v roce 2007, tehdy jsem zjistil, že se to stíhá velmi obtížně, takže jsem na konci léta 2008 vyrobil ProgTest. Tenkrát vznikl zhruba za týden, co jsem byl doma sám, když byla manželka s dětmi někde na dovolené. Ta první verze byla ale samozřejmě dost ořezaná.

Takže na FELu předtím neměli žádný vyhodnocovací systém?

Pokud vím, tak tam nic takového nebylo. Nebo aspoň ne nějak systematicky použitelného.

Zaujalo mě, že v hlavním menu ProgTestu jde zvolit i mexická univerzita Tecnológico de Monterrey. Jak se v dalekém Mexiku o ProgTestu dozvěděli?

To byla taky taková historka, která nevím, jestli je spíš pozitivní nebo negativní. Tenkrát byl v Mexiku na výměnném pobytu jeden ze cvičících a protože tam měl za úkol učit nějaké základy programování, poprosil mě, jestli by to nemohl dělat na ProgTestu. Tak jsem přidal možnost, že se  ProgTest nechal přepnout a vyčlenit část úloh pro jinou univerzitu. Ještě byl trošičku problém, že v Mexiku mají jiné časové zóny, takže se docela dost muselo změnit ve vnitřních reprezentacích času. No a s velkou slávou se tam zadala první úloha, kterou vyřešil jen jeden student. A v Mexiku dospěli k závěru, že to celé zruší.

Hlavní menu Progtestu výběr mexické univerzity
[4] V Mexiku ProgTestu na chuť nepřišli

Tak to je vtipné, že díky jednomu mexickému studentovi je ProgTest takhle mezinárodní. Teď bych na vás měla otázku, když na proseminářích z předmětu BI-OSY učíte studenty základy operačních systémů, zkoušel jste si někdy napsat vlastní operační systém?

Vlastní operační systém se to nazvat nedá, i když trošku možná jo. My jsme si tenkrát, když jsem byl na střední škole a měl ještě nějaký volný čas, hráli s programováním na nízké úrovni v DOSu (operační systém, pozn. red.). Tenkrát samozřejmě DOS neběžel v chráněném režimu, takže jsme si zkoušeli psát kusy kódu, které byly schopné přepnout se do chráněného režimu a něco v něm provádět s hardwarem. Hloupé bylo, že jsme to psali v assembleru, a hloupé bylo, že to samostatně bylo schopné dělat jenom nějaké velmi jednoduché úlohy. Ucelený operační systém to teda rozhodně nebyl.

A můžete prozradit, jakému operačnímu systému jste věrný?

Jsem věrný Debianu posledních 15 let.

Jaký je váš nejoblíbenější programovací jazyk? Je to C, C++ nebo snad nějaký úplně jiný, který neučíte?

Asi to C++.

Každoroční zahřívací úloha na ProgTestu BI-PA1 je překlad citátů z klingonštiny. Jste fanoušek Star Treku?

Dokonce jsme měli i úlohy u zkoušky ze Star Treku, takže myslím, že odpověď je jasná. A rozhodně popírám, že by zkouška ze Star Trekových úloh byla Kobayashi Maru.

A umíte něco klingonsky?

Ne, klingonsky jsem se neučil. Ale klingonské citáty jsou v té první úloze z dobrých důvodů, to má hlubší pedagogický smysl. Někteří studenti sem přijdou a chtějí to opisovat ručně na klávesnici, neumí použít copy & paste. A citáty v klingonštině se ručně opisují dost špatně.

Klingonské citáty v zadání ProgTestu
[5] Jak studenty naučit šetřit si práci? Pomůže klingonština

Máte nějaké koníčky, kterým se rád ve volném čase věnujete, když zrovna neučíte nebo neprogramujete?

Jsem otcem od rodiny na plný úvazek.

Co říkáte na to, že jste populárním námětem pro memes, které vytvářejí studenti? Viděl jste nějaké? Zasmál jste se jim?

Vím, že vznikají, takováhle tvorba vznikala už na FELu, když byl nasazený ProgTest. Zasmál jsem se tomu, ale tak nějak nemám čas to sledovat. Na sociálních sítích nejsem přítomný, takže mi toho asi uniká víc.

Meme o ProgTestu
[6] Studenti si často dělají legraci z množství času, který tráví nad progtestovými úlohami

A máte třeba nějaký oblíbený programátorský vtip?

Oblíbený programátorský vtip? Když tyhlety otázky jsou takové hrozně narychlo, musím o tom trošičku přemýšlet… Mně se líbí některé vtipy na C++ jako například „Jak se naučit programovat v C++ za 21 dní“ nebo se mi líbí komiks xkcd, ve kterém se dost často objevují nějaké narážky na programování obecně nebo třeba na C++ konkrétně.

Na závěr se chci zeptat, jestli nemáte něco, co byste takhle prostřednictvím časopisu rád vzkázal studentům?

To nevím… (přemýšlí) Já bych to radši vzkázal osobně třeba přímo na prosemináři nebo na přednášce, tam to bude konkrétnější.

Foto:
[1] cs.wikipedia.org
[2] Archiv Ladislava Vagnera
[3] youtube.com
[4, 5] progtest.fit.cvut.cz
[6] Facebooková stránka FIT Meme

Kristýna Klesnilová

Na FITu studuju bakaláře na oboru Znalostní inženýrství, a abych školu poznala i z jiné stránky než jen z té studijní, rozhodla jsem se přidat do redakce časopisu. Když o sobě zrovna nemůžu říct: „Nemám čas, dělám progtest”, tak si s oblibou kromě cppreference.com přečtu i nějakou jinou zajímavou knížku nebo se zvednu od počítače a vyrazím si ven zasportovat. Kontaktovat mě můžete na klesnkri@fit.cvut.cz.