Svaz poznání: Od filozofie k matematice a zpět

Často říkám, že informatika je vlastně jen z jedné třetiny filozofie, z druhé psychologie a z té třetí matematika. Že bez matematiky se informatika neobejde asi nikoho nepřekvapí. V tomto článku bych však chtěl ukázat, že i filozofie má v informatice značný význam. A dost možná i naopak.

Každý trochu méně pasivní student informatiky na Univerzitě Palackého jistě nějakým způsobem už někdy slyšel zkratku FCA. FCA, neboli Formal Concept Analysis, česky Formální a Konceptuální analýza, Formálně-konceptuální analýza, Analýza Formálních konceptů či dokonce Formální analýza konceptů (že je ta čeština krásná, co? Raděj se budu držet anglického FCA). Tím však zřejmě znalosti této ne moc známé informatické disciplíny končí, takže mi dovolte lehký úvod do FCA.

Formálně konceptuální analýza formálních konceptů?

FCA je technika pro zpracování dat, konkrétně tzv. data-miningová, tedy technika pro tzv. dolování dat, nebo jinými slovy získávání znalostí z dat (i zde je angličtina skromná a používá souhrnně pojem data mining). To znamená, že FCA analyzuje obvykle velké množství určitých dat, o kterých toho moc nevíme, a snaží se z nich vytěžit (doslova) co nejvíce informací.

Dobře, a jak, říkáte si? Na pochopení FCA se pojďme vrátit o pár století zpět (pokud tento článek bude číst někdo za pár tisíciletí, tak se omlouvám za nepřesnost). Konkrétně do století sedmnáctého. Ještě konkrétněji, chcete-li, do jeho šedesátých let. V této době totiž tak nějak (přece jen, tehdejší publikační činnost vypadala krapet jinak, než dnes) vznikla tzv. Logika z Port-Royal, resp. Port-Royalská logika. Jedná se o filozofické dílo, resp. myšlenku, názor, či pohled na svět.

Pochopitelně, nejsem filozof, situaci značně zjednodušuji, ale základní myšlenka Port-Royalské Logiky je až děsivě jednoduchá: Svět kolem nás je tvořen různými objekty. Každý takový objekt má určité vlastnosti.

Pokud budeme schopni popsat všechny objekty v našem okolí a budeme schopni popsat jejich vlastnosti, pak získáme přehled o celém světě, univerzu, éteru, či zakouřené putyce, ve které zrovna sedíme. Pro značnou část nefilozofů další důkaz toho, že filozofie je jen smíška … objektů s vlastností „být silně zapáchající“.

Ne však pro jednoho nejmenovaného německého matematika, který přesně toto v osmdesátých letech dvacátého století popsal matematicky. Proč? Protože to byl odborník na tzv. teorii uspořádání a právě v Port-Royalské Logice našel její uplatnění. No a tak vznikla FCA.

Přicházejí kočičky

Jako vždy si odpustím padesát slajdů definice-věta-důkaz a vše osvětlím na příkladu. Představme si, že pozorujeme nějaký fiktivní svět, který je tvořen jen šesticí zvířátek (od každého jedno), jak uvádí následující tabulka:

Tabulka našeho světa

Jak je vidět, v našem světě žije pejsek, který se zcela určitě někdy napije, je to savec a má srst. Stejně tak tam žijí další dva savci – kočka a vydra. Která je spolu s rybou, žábou a kachnou vodní tvor. A tak dále. Jak bylo naznačeno, FCA analyzuje tzv. formální koncepty. Co je to ten formální koncept? No, to je tvrzení, které v našem světě platí. Tvrzení ve tvaru „nějaká zvířátka mají nějaké vlastnosti“. Tedy například „všechna zvířátka pijí„, „ryba, žába, vydra a kachna jsou vodní zvířata“ nebo například „pes, kočka a vydra jsou všichni savci se srstí„. Kteří pijí.

Všimněte si, že všechna zvířata pijí. Poté se nám zvířata dělí na savce/se srstí (to je vlastně v našem světě totéž) a na případně vodní zvěř. Vydra je jak savec se srstí, tak i vodní zvěř. Toto všechno lze graficky znázornit jako tzv. konceptuální svaz (odtud název článku). Černé puntíky znázorňují jednotlivé koncepty. Všimněte si, že čím více je v konceptu zvířátek, tím méně mají souhrnně vlastností (a naopak).

Konceptuální svaz

Bohužel, v praxi se s takto „primitivním“ světem obvykle nesetkáme. V reálném světě by byla jak tabulka, tak konceptuální svaz ji zobrazující pochopitelně vskutku obrovský. Kupříkladu, výřez ze spodní části konceptuálního svazu reálného světa by mohl vypadat například takto (za předpokladu, že v Praze žije paní Nováková a má …):

Kdesi dole ve svazu...

Můžete pozorovat, že úplně dole máme vždy jeden jediný konkrétní objekt. Například kočka Mourek paní Novákové z Prahy. O takovém objektu můžeme určit opravdu nespočet vlastností. Kromě vlastností, které mají všechny kočky paní Novákové z Prahy (a tudíž i všechny kočky z Prahy a tudíž i všechny kočky)(např. jméno majitelky, adresu bydliště, počet končetin), můžeme o Mourkovi říct, jakou má barvu srsti, kolik má let či jakou má nejraděj konzervu.

And we need to go deeper…

Dobře, to je Mourek. Ale, co když se vydáme v konceptuálním svazu směrem nahoru? Mourek je paní Novákové, je z Prahy, je to kočka, to vím. A dál? Kočka je určitě šelma a současně náš oblíbený savec. Tudíž je určitě obratlovec. A tedy i zvíře. Každé zvíře je živým tvorem. Živý tvor je něco, co najdeme v přírodě na planetě Zemi. Co najdeme v přírodě na planetě Zemi je něco, co najdeme ve Sluneční soustavě. A tak dále. Všimněte si, že jsme začali používat slovo „něco„. Neurčitost vzrostla tak vysoko, že už vlastně ani nepopisujeme žádný objekt, ale jen „něco“ splňující pár vlastností (např. nachází se na planetě Zemi, je tvořen atomy a molekulami).

Téměř celý svaz poznání

Dříve nebo později (dobře, spíš později, vzhledem k tomu, že vesmír je nekonečný), bychom se dostal k něčemu natolik obecnému, že bychom o něm nemohli říct vůbec nic konkrétního. K něčemu, co obecně nesplňuje naprosto žádnou vlastnost. (Tedy, krom jedné – že toto něco je rovno číslu čtyřicet dva.) Dostali bychom se k něčemu, co popisuje celý svět, celý vesmír, prostě úplně všechno. A tomu se, nepletu-li se, říká vyvrcholení filozofie.

Hledání nekonečna

Dobře, toť teorie. Ale k čemu je nám to v praxi? A proč je v názvu článku „svaz poznání“? Jistě, poznat celý svět a najít ono mýtické něco je snad snem kdejakého filozofa. Takže konceptuální svaz popisující celý vesmír vlastně popisuje všechno naše poznání. Ale ono je to ještě praktičtější. Tedy, pravda, pro vědce, či další profese, které produkují určité poznání.

Často se říká, že životní cyklus vědy je následující: hypotéza – teorie – experiment – vyhodnocení. Pohledem svazu poznání není věda nic jiného, než objevování nových končin právě v tomto svazu. Pravda, zjistit, že paní Nováková z Prahy má kocoura Mourka asi zrovna není téma na dizertaci. Nicméně, objevit nový druh motýla, vymyslet Eulerovu větu či zobecnit Speciální teorii relativity, to už vědou docela zavání.

Vědci totiž obvykle dělají jednu ze dvou věcí. Buďto se snaží zobecnit nějaké poznatky („co mají společného tito motýli?“, „platí Pythagorova věta pro libovolný exponent?“) nebo naopak snažit se situaci zpřesnit („všechny kovy vodí teplo, který kov nejlépe?“, „za těchto podmínek soustava nemá řešení, co když se omezíme jen na x = 0?“). Tyto postupy odpovídají hledání nového konceptu, nového puntíku ve svazu poznání, a to buď někde nad (zobecnění) nebo někde pod (zpřesnění) puntíky, které odpovídají naší teorii/hypotéze. Nemám pravdu?

Je jasné, že nikdy nepoznáme svaz celý, ale je pěkné, že někde uprostřed nekonečna se nachází malinkatý flíček, který máme zmapovaný a velmi pomalu se zvětšuje.

Programování je vlastně skoro jako vaření

Už je tomu pár let, co jsem napsal poměrně zdařilý článek srovnávající platformy Windows a „Linux“. Už pár měsíců se mi hlavou honil způsob, jak podobným způsobem běžnému smrtelníkovi popsat programování popř. obecně vývoj software. Píši proto tento článek, který by měl snad každému tátovi, každé babičce a dokonce i kdejaké knihomolce, která o programování ví asi jako křováci v Africe o Terrym Pratchettovi, co to vlastně to programování je.

Úvodem: programování vs. vývoj software

Na úvod mi dovolte jedno malé rozseknutí. Asi nikoho nepřekvapí, že jak programování, tak vývoj software jsou činnosti, na jejiž konci jsou počítačové programy, popř. software. Rozdíl mezi programováním a vývojem software však přece jen nějaký je.

Vrátíme-li se do kuchyně, můžeme říci, že programování je něco jako vaření, zatímco vývoj software příprava večeře. Příprava večeře obvykle obnáší vše od nákupu surovin, jejich přípravy (např. omytí zeleniny, rozmrazení masa), přes samotné vaření, až po úklid kuchyně a následně servírování.

Velmi podobně, vývoj software je proces, který se sestává z mnoha podkroků, mezi které patří například volba vhodných technologií, vytvoření zázemí (spuštění vývojářských serverů, instalace vývojových prostředí), přes samotné programování až po nasazení do provozu, uživatelské testování a údržbu.

V tomto článku se budu zabývat pouze samotným programováním, poněvadž fakt, že je s tvorbou software nějaká práce navíc asi nikoho až zase tak moc nepřekvapí. Naopak, programování je něco, co trápí nočními můrami už i leckteré studenty středních škol.

Vařila myšička omáčičku …

Máme tedy nachystány suroviny a jdeme vařit. Vezměme si učebnicový příklad: nějaká, téměř libovolná, omáčka. Rajská, koprovka či jakákoliv jiná. A, z druhé strany, takový typický elektronický obchod, e-shop. Ono bohužel i toto srovnání není úplně fér, vzhledem k tomu, že uvařit – byť sebepoctivější – omáčku nezabere víc, než pár hodin, zatímco nad e-shopem programátor může strávit dobrých pár týdnů. Pro ilustraci nám to ale bude stačit.

Když vidím, jakej jsem programátor, tak se bojím jít k doktorovi do kuchyně.

Jak takové vaření obvykle vypadá? Zde je první důležitý moment, protože stejně tak, jako se každá omáčka dá udělat jednoduše, rychle a obyčejně, tak i počítačový program se dá zkonstruovat méně či více propracovaně. Je rozdíl, jestli vaříte omáčku jako rychlou večeři nebo ke svátečnímu obědu pro celou rodinu. A stejně tak, e-shop prodávající jeden produkt s minimem dodatečných funkcí může být určitě vytvořen daleko snáze než propracovaný interaktivní systém s obrovským počtem uživatelů.

Jíška a vývar

Pokud omáčku budete začínat jíškou, bude vhodné si nejdříve jíšku připravit. Pokud ji budete zalévat vývarem, bylo by vhodné si nejdříve „uvařit“ vývar. Je tedy vidět, že i ve vaření se často setkáme s tím, že pro uvaření jednoho pokrmu je třeba mít uvařený nějaký/é další. Obdobně, pro vytvoření e-shopu je vhodné si nejdříve naprogramovat (samostatný/é) modul(y) – například pro připojení k databázi, přihlašování uživatelů, propojení se skladem a podob.

Stejně tak, jako se vývar dá nahradit bujónem, dá se obvykle propracovaný samostatný programový modul nahradit něčím jednodušším. Pokud si však vývar opravdu uvaříme, můžeme si část zamrazit a použít někdy příště. V oblasti vývoje software toto mívá mnohem větší význam – software se totiž nedělí ani nemrazí, ale prostě kopíruje. Takže „vývar“, který programátor jednou „uvaří“ může používat prakticky donekonečna.

Proto je víc, než jasné, že každý programátor se snaží tyto znovupoužitelné programové suroviny vytvářet jak jen to jde. Ve velkém množství případů však tyto suroviny ani nevytváří sám, ale – prostě si je koupí (popř. stáhne, pokud jsou zdarma). Na tom vlastně také není nic překvapivého: Kdo by se dnes doma mlel se strouhankou? Nebo si doma vyráběl vlastní majonézu?

Eintopf? Nein, danke!

Mimochodem, dnešní programování se dělí na dva hlavní (znepřátelené) směry: funkcionální a procedurální. Podíváme-li se na to pohledem přípravy omáčky, tak funkcionální programování vypadá asi takto: Programátor si nejdříve velmi pečlivě přichystá vše potřebné pro přípravu omáčky. Tedy jíšku i vývar, obě důkladně ochutí tak, aby s nimi pak při samotné přípravě omáčky měl minimum práce a současně nehrozilo, že mu výslednou omáčku zkazí. K tomu pak už jen přidá něco na ochucení omáčky, velmi jednoduše to smíchá dohromady a má zaručeno, že omáčka bude velmi pravděpodobně poživatelná.

Oproti tomu omáčka vařena procedurálně vypadá jako takový jeden velký eintopf. Procedurální vaření totiž připomíná spíše přípravu kouzelného lektvaru. Procedurální přístup znamená provádění jednotlivých dílčích kroků postupně za sebou. V praxi tedy jeden hrnec, do kterého se postupně přisypávají jednotlivé ingredience. I vývar by se nějak prapodivně měl vařit v hrnci, ve kterém se zvesela převaluje právě usmažená jíška. Postupným přidáváním dalších surovin by na závěr vznikla požadovaná omáčka.

Je jasné, že takovýto přístup je v praxi naprosto nepoužitelný. Funkcionální programování se zde zdá mnohem použitelnější. Z různých důvodů se však neprogramuje ani funkcionálně (protože to by například znamenalo, že jíška by se musela uvařit v kompletně svém vlastním hrnci a pak se zbytečně přelít do hrnce na omáčku), ale oba tyto přístupy se kombinují.

Málo slaná, co?

Nedílnou součástí každého vaření je ochutnávání. (Poznámka: bavíme se o ochutnávání, ale u pokrmu samozřejmě záleží také na vůni, barvě, konzistenci, palčivosti, teplotě…) Dokážete si představit, že uvaříte omáčku a ani jednou jste ji neochutnali? Bohužel, programátoři, kteří něco naprogramují a za celou dobu si nezkontrolují, že udělali všechno naprosto správně, jsou víc než běžnou záležitostí.

Zde nám trošku nahrává funkcionální programování. Pokud smícháme ingredience, které jsme důkladně ochutnali a ověřili si tak, že opravdu chutnají, jak mají, výsledný pokrm nám nezkazí. Naopak, při čistě procedurálním vaření vlastně až do poslední chvíle nemáme něco, co by stálo za to ochutnávat („není ta jíška s vývarem a kořením málo slaná?“).

Zkrátka a dobře, ochutnávání je pro vaření klíčové – a stejně tak i pro programátory. Chybička (nebo obecně cokoliv, co nezvykle ovlivní chuť) se totiž může stát vždycky. Tři malé místo dvou velkých cibulí, nezvykle silný česnek, či obvyklé „ups, asi mi trošku ujela ruka“.

Pokud se nám zdá omáčka málo slaná, dosolíme ji. Pak ji, pochopitelně, přesolíme, takže ji musíme doředit. Pak ovšem musíme přidat další koření, protože by byla slabá. Zkrátka, při každém takovém ochutnání často zjistíme, že je s omáčkou něco špatně a je potřeba to spravit. Tomu se v programování říká testování a ladění. Problém s testováním a laděním, s věčným ochutnáváním a dochucováním, je však ten, že se může opakovat velmi dlouho a pořád to není ono. Ve výsledku nám tak může vzniknout nějaký nepoživatelný paskvil, který tak akorát „za stálého míchání lijeme do hajzlu“. Bohužel i programátor se často setkává s tím, že pořád není spokojen, pořád to není ono, a tak neustále upravuje a upravuje, až mu nakonec stejně nezbude nic jiného, než to celé smazat a začít nanovo.

A to ani neříkám, že když jídlu něco schází, dá se docela snadno určit co. Sůl, koření, zahustit. Ale programátor má dost často jen informaci „je to dobrý“ a „není to dobrý“. Teprve studiem toho, co tam všechno nasypal může vyhodnotit, co asi udělal špatně.

Supermáma

Při programování se občas setkáme i s dalšími pojmy, které najdete i v kuchyni. Například synchronní a asynchronní programování. Pokud byste vařili synchronně, a věřte mi, že to tak občas určitě děláte, znamená to, že než se vám dokončí určitá část vaření, do které není potřeba zasahovat, tak stojíte u sporáku a čekáte. Až se voda ohřeje, až se máslo rozpustí, až to vychladne. Prostě stojíte a čekáte.

Oproti tomu, asynchronní programování znamená, že dáte vařit vodu, a jdete dělat něco jiného. Až bude voda uvařená, vrátíte se k ní. Logické, ne? No, bohužel, pro programátora je snažší si počkat. Už jen proto, že v momentě, kdy se voda dovaří, tak dost možná může být přerušen z nějaké činnosti, u které by neměl být rušen. Člověk při vaření na to myslí, ale – programátor za počítačem má poměrně omezené možnosti.

Spoustu legrace si také každý programátor užije při paralelním programování. Tedy, že v kuchyni není sám. Velmi často se totiž poštěstí, že se lidí po kuchyni potuluje více. A zkuste se ubránit situacím typu: „Cože, tys tu omáčku taky solil?“, „Ale já ten nůž potřebuju teď hned!“, nebo „Teď, teď jsem si tu solničku sem položil. Kdo mi ji vzal?“. Opět – v kuchyni docela humorné situace, avšak pro programátora noční můra. Omáčku osolí sotva špetičkou soli – a je přesolená. Nebo chce něco ukrojit a zjistí, že nůž na stole neexistuje. A hledejte chybu, kterou jste nezpůsobili vy.

Noční můra každého programátora? Kdyby Láďa Hruška začal programovat …

Obdobně, jako v kuchyni, i většina programátorů občas používá tzv. „hacky“. Tedy něco, co je naprosto nepřípustné, ale – ono mu to prostě extrémně zjednoduší práci. Mezi takové „hacky“ patří například zahušťování omáčky moukou namísto jíšky, nahrazení vývaru bujónem či tomatové omáčky kečupem. Ano, přesně tak, takový Jirka Babica. (Opravdu si nedokážu představit, jak by vypadal jako programátor.) Jsou to prostě věci, kterým se každý slušný programátor snaží vyhýbat jak jen to jde. Bohužel, ne vždy to jde (nebo je to vyloženě nutné).

Dobrou chuť!

Pomalu se blížíme ke konci, omáčka je téměř hotova, poslední přisolení, zamíchání a je hotovo. Můžeme servírovat, chutná skvěle. Náš e-shop je hotov a může být spuštěn. Někdo nám ale hned první den píše, že se do něj nedá přihlásit. A další. A další. Jak je to možné? Jednoduše – i ta omáčka, která nám chutnala (nebo to s ní naše chuťové pohárky prostě vzdaly a začaly našemu mozku tvrdit, že je opravdu skvělá), nemusí chutnat všem. To se tak bohužel stává. U programátora to může být tím, že po všem tom ladění a testování je prostě jen něco úplně obyčejně přehlédl. A nebo – prostě je tam něco, mezi židlí a klávesnicí, co způsobilo, že to funguje jen jemu a nikomu jinému.

Věřím, že mé srovnání programování s vařením někomu nemusí být po chuti. Je fakt, že by se dalo najít hned několik disciplín, kde se to k sobě hodí asi jak vegan a řízek. Nicméně, stále platí, že i programování, obdobně jako vaření, je prostě věda. Opravdu velká věda. Avšak pro programátora je i docela obyčejná omáčka práce na dlouhé týdny či měsíce. Tak tedy dobrou chuť všem programátorům!

Rok s androidím smartphonem: Nadávat jen tak nepřestanu

Už je to přibližně rok, co jsem odložil můj miniaturní Samsung E1070. Byl to skvělý telefon, ale výdrž baterky se při běžném používání snížila na nějaké tři, čtyři dny a hlavně, každý druhý hovor jsem byl nucen zahájit slovy: „dělej, mluv rychle, mám vybitej mobil, každou vteřinou se mi vyp….“.

Kromě toho, občas se hodí mít po ruce zařízení, co se dokáže připojit na WiFi a občas něco vyfotit. Jo a taky mít paměť na víc, než 200 SMS. Ač jakožto informatik musím neustále poslouchat věčné: „Jé, ty seš přes ty počítače, neporadil bys mi, kterej počítač/mobil/tablet je dobrej?“, sám se rozhodně neřadím mezi technologické nadšence. Koneckonců, být uživatelem mobilu se 3 pozadí plochy, displejem jehož pixely se daly počítat a baterkou, co vydrží víc než den, je v době, kdy se řeší, jestli by mobily neměly mít 4K displeje, toho docela jasným důkazem.

S ohledem na fakt, že (nově pořizovaný) mobil by pro mě měl být spíše jen zařízení vynahrazující mi počítač (pokud ho zrovna nemám po ruce), než samostatně fungující jednotka umožňující mi pohodlnou funkčnost i bez počítače, jsem ani nechtěl „žádné dělo“. Obzvláště při pohledu do mé studentské peněženky.

Čím chytřejší telefon, tím hloupější uživatel.

 — internetové rčení

Vybral jsem tedy Lenovo A1000, jak jsem pochopil, nejslabší model z nižší střední třídy. Výbavou měl být standardní, jako bonus však dualsim. Nebudu zde podrobně rozebírat technikálie, jak říkám, zaprvé tomu nerozumím a zadruhé tenhle článek má spíše shrnout mé dojmy.

Počkej, zítra mu zavolám

No, rozčarování přišlo už po prvním zapnutí. K mému nevelikému překvapení, první chybová hláška vyskočila ani ne půl minuty po spuštění. Spadl launcher (taková ta aplikace, co zobrazuje plochu). Resp. nespadl, jen pro nízký výkon telefonu měl operační systém pocit, že se zasekl a tak jej odstřelil. Jak jsem v průběhu roku zjistit, toto bude oblíbený problém. Telefon nezvládá dvě činnosti současně, takže pokud se v pozadí něco načítá, nahrává či aktualizuje, tak aplikace v popředí, se kterou je potřeba pracovat, automaticky padá s tím, že se zasekla.

Ono s rychlostí se ukázalo být docela problém tak nějak všeobecně. Modelová situace: „Připojím se na wifi, mrknu, kdy přesně, že mi to jede ten autobus, a rychle poběžím.“ v praxi vypadá obvykle takhle: „Chci se připojit na wifi, abych se podíval na autobus. Když se po pár vteřinách wifi nepřipojí, jdu se chystat. Po deseti vteřinách stále nic. Teprve v momentě, kdy rozkliknu nastavení se zázračně připojí. Spouštím aplikaci na jízdní řády, mobil mi řve, že aplikace spadla. Začnou mi vyskakovat notifikace, protože jsem konečně online a mobil zjistil, jak strašně moc jsem díky tomu oproti celému světu pozadu. Ve spěchu se překliknu a omylem jednu z notifikací rozkliknu. Začne se spouštět patřičná aplikace. I ta začne padat. Nejde ukončit a už vůbec ne se vrátit k jízdním řádům, které ještě ani nenaběhly, natož, abych v nich vyhledal kýžený spoj. Konečně. Snažím se vyťukat počáteční a cílovou stanici. Přes pomalost telefonu se napsaná slova se všemi těmi překlepy objeví až po stisku tlačítka „Vyhledej“. Snaha o navrácení se zpět pomocí hardwarového tlačítka (softwarově to ani nezkouším) je pochopena mylně jako žádost o ukončení aplikace. Opět se pokouším spustit aplikaci. Zadávám dotaz, tentokrát opatrněji a kontroluji si a opravuji překlepy. Na tlačítko „Vyhledat“ klikám už na odchodu. Načítání, načítání. Chyba spojení se serverem. Wifina se ztratila. Utíkám na autobus s několikaminutovým zpožděním a totální neznalostí konkrétního času odjezdu.

Problémů je tam více. Občas se aplikace ani neuráčí spadnout a sestřelí pro jistotu celý telefon. Například občas, pokud natáčím video. Nebo když je moc horko (typické letní venkovní teploty) či zima (typické zimní venkovní teploty). Jen zázrakem se mi ještě nerestartoval uprostřed hovoru! A víte, co je na tom nejvtipnější?

Telefon má docela malou interní paměť. Většinu z ní zabírá Android samotný, de facto zbytek pak na-něj-navázané aplikace. Všechny ostatní aplikace jsem si musel odstěhovat na paměťovou kartu. A, dle mého názoru, při spouštění telefonu se aplikace z karty načítají tak nějak nedeterministicky, takže se mi jejich ikony na plochách objeví v de facto nahodilém pořadí. Dobře, to bych ještě chápal. Ale že se mi aplikace, které moc nepoužívám, vysypou ze složek a mám tak najednou 5 ploch s ikonami aplikací, z nichž používám tak maximálně 6? A, dokonce, že se mi o jedno políčko posune ikona aplikace Fotoaparát anžto sedí (spolu s ikonou aplikace Chrome) na dolním pruhu (a obě jsou pochopitelně v paměti telefonu)? To opravdu nechápu.

Už ti píšu, zítra to bude

Není vůbec nepravda, že z mých úst často uslyšíte slova: „Zavolej mu rači ty, u mě by to bylo na hodinu“. Kromě neustálého hledání ikony aplikace na telefonování jde i o aplikaci samotnou. Zde si dovolím být trošku konkrétní a rozebrat „dvojaplikaci“, co používám na volání a SMS. Jedna z prvních aplikací, kterou jsem v Google Play hledal, byl klient Vodafone Parku (který ke konci tohoto dubna stejně končí). Nenašel jsem, místo něj jsem však objevil aplikace Call+ a Message+ od Vodafonu. Čekal jsem, že třeba budou nějak s Vodafone Parkem spolupracovat (tedy SMS do Vodafonu zdarma, synchronizace kontaktů a SMS odeslaných z internetu). Ne.

Obdržel jsem otesánka, kde volání i psaní SMS je za trest. A to od místa na kartě, přes rychlost aplikace až po efektivitu používání. Když mi někdo volá, trvá to asi tak 5 vteřin, než se vůbec načte obrazovka se jménem kontaktu a tlačítkem pro přijetí hovoru (dřív jen slyším vyzvánění a koukám na černou obrazovku). Pro volání konkrétnímu kontaktu je třeba dvou „kliknutí“ namísto očekavatelného jednoho nebo žádného (= psát jméno ihned po otevření aplikace). Každému hovoru předchází obrazovka zvaná „Připravit hovor“, která slouží jen k tomu, abych mohl volitelně (placeně pomocí SMS/MMS, samozřejmě) poslat svoje GPS souřadnice nebo selfie. Opravdu praktické. Asi jako obrazovka „Dokončit hovor“ (po nespojeném hovoru) nabádající k napsaní SMS: „Volal jsem ti, ale tys mi to nezvedl. Zavolej mi.“. To by dotyčného volaného skutečně nenapadlo.

„Proč jste postiženému nezavolal záchranku?“

„Já chtěl, jenže mobil se mi sekl, pak se dvakrát restartoval, pak mi řekl, že nelze spojit hovor a pak už se jen vybil a umřel.“

Psaní SMS je také legrace. Netuším proč, ale když píšu SMS na mobilu, tak je omezená na nějakých 86 znaků, zatímco z webu asi tak 148 (v závislosti na množství diakritiky). Ano, snad jediné pozitivum této „dvojaplikace“ je, že má webového klienta. Takže můžu psát SMS pohodlně z počítače. Jenže – podporují jen Firefox a Chrome, takže pro psaní SMS musím mít speciální okno s Firefoxem (jinak používám Operu). Navíc, celé je to stavěné tak, že se v mobilu musí povolit přístup z webu, ten se s mobilem spáruje (buďto jednorázovým heslem nebo QR kódem)(takže mobil musí být po celou tu dobu online) a webové rozhraní poté přes servery někde v Americe komunikuje s mým mobilem, co mám vedle sebe na stole. Přihlášení tak trvá v průměru 5-10 minut, protože spojení obvykle několikrát selže a celý řetězec přihlašování se přeruší a musí se začít znovu.

Další vtipností je bezesporu dualsim. Když používám jen jednu SIM kartu, tak se mi na úvodní obrazovce zobrazuje, že nebyla vložena SIM karta. Pokud používám obě, tak sice fungují obě, ale zobrazuje se mi jen ta první. Donedávna. Před pár týdny mi telefon přestal sekundární kartu i akceptovat, takže z ní nejde ani volat ani psát. No, pravda, ne, že by to nějak závratně šlo i před tím. Aplikace Call+ není na dualsim stavěná, takže dědí systémové nastavení SIM karet. Nastavil jsem si proto, aby mi to vždy dalo vybrat, kterou SIM kartu telefon má na hovor/zprávu použít. U hovorů to pochopil, u SMS nikoliv. Takže mi vesele odesílal soukromé zprávy z pracovního čísla a naopak.

To bych ještě ale pochopil. Ale, co mi vyloženě vadilo, tak, že si aplikace nikde neevidovala, na kterou SIM kartu mi bylo voláno/zaslána zpráva. Takže v momentě, kdy objevíte zmeškaný hovor z cizího čísla, tak nevíte, jestli to byl hovor soukromý či pracovní a tudíž, z jaké SIM karty volat zpět. A když už se vám podařilo hovor přijmout, tak informace o tom, na kterou zprávu vám je voláno byla napsána malým písmem nahoře, a to slovy: „Volání prostřednictvím poskytovatele [první písmeno z názvu operátora]…“. Ano, debilní (až zbytečná) hláška, která zbytečně zabere místo názvu operátora. Buďme rádi, že nemáme v česku dva operátory se stejným prvním písmenem. Ale, co kdybych měl jak soukromou, tak pracovní SIMku od stejného operátora? Zde by se označení „primární“ a „sekundární“ SIM karta víc, než hodilo. A nebo – pane bože, žijeme ve třetím tisíciletí, to by byl takový problém přiřadit k SIM kartě slovní popis?!

Když už jsem psal o omezování délky SMS, to bude zřejmě „problém“ s kódováním, které aplikace používá. Trpí tím i kontakty – mám tak v kontaktech několik jmen buďto bez diakritiky, nebo s useknutým příjmením, protože se tam prostě nevešlo. Vzpomínáte, třetí tisíciletí?

Blik, cvak, píp, hrk, prd

Foťák. Asi vás nepřekvapí, že můj stroj nebude mít foťák nijak zázračný. No, máte pravdu. Na běžné focení na fejsbůk to sice stačí, ale to je asi tak všechno. Ve tmě (i s bleskem) prakticky nepoužitelný, přibližování žádné, kvalita panoramatu mizerná, u videa se občas i restartuje. Jo a mimochodem, teprve před asi tak měsícem se mi konečně nějak podařilo vyřešit (nebo se to vyřešilo nějak samo?) problém s umlčením zvuku závěrky.

Jak jistě víte, zvuk je tvořen určitými zvukovými vlnami. Pokyn k jejich generování vydává procesor(?) telefonu do reproduktoru. Když se však opravdu hodně sekne a nestíhá ani udržet frekvenci generovaného tónu, zvuk, který vydával přejde do zvuku připomínající letící dělovou kouli či Papinův hrnec těsně před explozí. Ano, tak jsem si zase jednou zopakoval parakotoul.

— já

Vždycky jsem tak nějak předpokládal, že když si vypnu zvuky (jakože fakt všechny), tak se umlčí všechny zvuky všech aplikací. No, ne. Tak jsem si v nastavení foťáku vypnul zvuk závěrky a – ejhle ono ho to vydávalo pořád. A to i v případě, kdy opravdu bylo velmi nevhodné, aby asi tak 120 lidí vědělo, že se snažím fotit. O to horší je fakt, že hardwarové tlačítko hlasitosti slouží ve foťáku jako spoušť. Takže ve snaze o zeslabení hlasitosti mobil začal divoce fotit. Opravdu hrozná sranda.

Když už jsme u těch zvuků, osobně mi trvalo snad půl roku, než jsem pochopil, jak to vlastně funguje s vypínáním zvuků. Parádní funkce je vypnutí všech zvuků na určitou dobu. Prý včetně budíků (ale že se mi i přes to ve škole nejednou rozezněl), ale jak víme, tak to ignorují i další aplikace. Uvítal bych však, kdyby se mi po/při uplynutí nastavené doby zobrazila notifikace. Zvuky si pochopitelně vypínám vždy raději na delší než kratší dobu a pak je mám zbytečně někdy i pár hodin vypnuté jen proto, že si je zapomenu zase zapnout. Nebo mě naopak informovat, že už patřičná doba vypršela a zvuky bych si měl ještě na hodinku vypnout, je-li to nutné.

Další ukázkou toho, jak jde i banální věc totálně podělat je správa časů. Tedy hodiny, budíky, stopky a odpočet času. Uživatelské rozhraní pro každou z těchto funkcí je totálně nejednotné (a přitom odpočet času je z pohledu nastavení prakticky stejný jako budík, jen se neurčuje „v kolik“ ale „za jak dlouho“). Jednou se čas nastavuje jako na ciferníku (budík), jindy se vyťukává jak na kalkulačce (odpočet). Budíky mají názvy, proč odpočty ne? U budíku je v základním nastavení změny tónu, proč ne u odpočtu?

Ten trapný moment, kdy si vypnete budík a on vám o pět minut později začne vesele zvonit…

Navíc, budíky jsou v základu řazené podle času. Což je fajn možná tak pro pracujícího, ale ne pro vysokoškoláka, který vstává každý den v jinou hodinu. Něco jako seřazení podle názvu by nešlo? Nebo výraznější zobrazení těch, co budou zvonit v následujících 24 hodinách? Proč si můžu u každého budíku změnit délku opakovaného buzení, ale jeho interval je společný pro všechny? A už jsem říkal, že u notifikace informující, že za pár minut se mi spustí budík, tlačítko „Zrušit buzení“ funguje jen na oko?

Snahy o používání GPSky jsem taky už prakticky vzdal. Stačí pár stromů v okolí a signál se ztrácí. Nebo mě na jeden bod cesty teleportuje o pár kilometrů vedle. To se pak člověk raduje, že uběhl 15 kilometrů a maximálku měl nějakých 168km/h!

A když tohle všechno přežije, tak mi určitě nabití baterie klesne pod 50%. Asi to bude technologií baterie, ale jakmile nabití baterie klesne pod 50%, tak se vybíjí rapidně rychleji. Není výjimkou, že operace vyhledání odjezdu autobusu ze začátku tohoto článku je schopno zredukovat stavy baterky klidně o 5-10%. Pod 10% telefon navrhuje přechod do úsporného režimu. Doteď jsem nepochopil, v čem je oproti běžnému režimu rozdíl. Pomalý je pořád stejně, možná tak akorát trochu sníží jas obrazovky (a možná ubere i tak špatnému výkonu WiFi a GPS).

Shrňme to … ze stolu

Kromě toho je tu spousta dalších drobností, například pro mě, jakožto vyznavače open source, placené aplikace nebo (a to hlavně) aplikace s reklamami. Taky mi začínají odcházet hardwarová tlačítka hlasitosti a i mikroUSB konektor už začíná protestovat. Laviny notifikací po připojení k WiFi se už nejspíš taky nezbavím. Nebo, že ani po roce se mi nepodařilo nenaučit se psát „všema dvouma“ či zjistit, jak spustit foťák gestem (bez odemčení).

Chápu, že velká část problémů je spjata se samotným hardwarem. Například rychlost, občasné restartování a podob. Stejně tak, určité záležitosti zcela určitě spadají do kategorie „chyba je někde mezi židlí a klávesnicí“ – například právě psaní nebo budíky. Ale zcela bez pochyby je telefon plný naprosto fatálních softwarových prohřešků.

„Kde to jsme?“

„No, podle mýho mobilu někde uprostřed severního Atlantiku.“

Například ten, že mi už pár měsíců padá aplikace Google. Po spuštění se začne načítat, pak chce jakože vyskočit nějaký panel s novinkami a aplikace se ukončí. Žádné hlášení o chybě, aplikace prostě tiše spadne úplně sama. Když chci upravit „nastavení“ (= změnit heslo) k již uložené WiFi síti a zadám heslo moc krátké, namísto upozornění na chybný vstup uvidím jen: „síť se nepodařilo uložit“.

Ještě mě tak napadá – díky malé interní paměti bývá problém se stahováním aplikací (a občas i aktualizací). Ač paměťová karta, kde bude aplikace nainstalována, je prakticky prázdná, v paměti telefonu je posledních pár set MB a tak se aplikace nedá stáhnout (a je tak nutné vždy něco pomazat). Což mi připomíná, že snad pokaždé, když připojím mobil k počítači za účelem přenosu dat, tak mi zmizí složka s fotkami a musím fotky zachraňovat pomocí data recovery nástrojů. Za to sice dost možná může linux – ale – proč?!

Takže, mé očekávání bylo, že budu po kapse nosit přenosnou náhražku za můj notebook. V praxi něco takového sice mám, ale všechno trvá 10x dlouho, navíc to – ostatně jako každý smartphone – nevydrží dlouho bez dobíjení. A jako bonus jsem si moc nepolepšil ani co se volání a psaní SMS týče. Je to fajn, ke svému starém mobilu bych se určitě už nevrátil, ale – čekal jsem to lepší. Člověk to hold musí nějak přežít.

Nedávno jsem přemýšlel, kdybych si mohl vybrat některý z produktů Apple, co bych si vybral. Na linux nedám dopustit, tablet nepotřebuju, avšak iPhone bych za androidí mobil s radostí vyměnil.

Aktualizace

Vzhledem k tomu, že tento příspěvek způsobil na sociálních sítích docela bouřlivé reakce, tak mi dovolte shrnout, co v článku zřejmě nebylo důkladně osvětleno:

Úkolem článku nebylo nijak napadat platformu Android. Jen jsem se snažil poukázat na to, že v dnešní době není problém sehnat telefon na kterém bude tato (a myslím, že mohu s klidem říct, že i jakákoliv jiná) platforma totálně nepoužitelná. Koneckonců, proto jsem na závěr zmínil i společnost Apple, jelikož ta by si něco podobného, tedy prodat zákazníkovi něco, co je mu vlastně prakticky k ničemu, nedovolila.

Ano, dobře, přiznávám, chtěl jsem si i trochu rýpnout do Androidu. Ale protože si to zaslouží. Ne však slovy: „Android je na ho*no!“, jak to většina pochopila, ale spíše slovy: „Škoda, že si s tím nedali ještě trochu víc práce, mohl to bý bezva systém.“.

Perceptroni

Přicházíte na bar za svou přítelkyní. Potkáte ji tam s nějakým jejím kamarádem. Evidentně zrovna dostali své nápoje a chystají se jít za vámi. Slyšíte ho, jak jí říká, „Tak fajn, dlužíš mi drink.“. Načež ale zpozoruje vás a tak se otočí na vás a prohlásí: „Vlastně ne, to ty mi dlužíš drink.“.

 

Je celkem přirozené, že tento mladík jen a pouze chtěl zapůsobit jako gentleman a vaši přítelkyni na drink pozval s tím, že by bylo milé, kdybyste mu to splatili. To je přece logické, ne?

Pokud vaše první reakce byla naprosto, ale naprosto, nechápavá, nasadili jste takový ten totálně WTF výraz a vypustili ze sebe: „Coo? Prooč?!“, pak pro vás mám špatnou zprávu. Je totiž docela možné, že jste perceptron.

V poslední době jsem totiž začal pozorovat, že několik lidí, se kterými se stýkám, mají takovou zvláštní – no, ehm, vlastnost. A to mě přimělo se nad tímto zamyslet, a dokonce tuto vlastnost, resp. lidi touto vlastností disponující pojmenovat. A příznačně jsem použil pojem perceptron, pojem z oblasti artifical inteligence, neboli teorie umělé inteligence.

„Kolega včera shodil hlavní server.“

„On je hacker?“

„Ne, debil.“

Pojďme se nyní podívat na to, co právě onen „perceptron“ je. Dovolte mi drobný úvod právě z teorie umělé inteligence. Umělá inteligence je (dle jedné z mnoha definic) počítačová simulace něčeho inteligentního. Například člověka. Resp. jeho mozku (ono kupříkladu takové srdce zpravidla moc inteligentní není, spíš naopak). Nejtypičtějším způsobem, jak takovou umělou inteligenci vytvořit je pomocí umělé neuronové sítě.

Umělá neuronová síť je tedy nástroj pro zjednodušenou simulaci lidského mozku. A to, konkrétně a již dle názvu, založena na neuronech, tedy nervových buňkách. Jak jistě z přírodopisu či biologie víte, mozek vlastně není nic jiného, než síť nervových buněk, neuronů, které jsou spolu navzájem propojené určitými „vlákny“, tzv. synapsemi. Prostřednictvím synapsí se mezi neurony šíří tzv. vzruchy, tedy něco, co by se dalo považovat za nějaké signály.

A umělá neuronová síť je vlastně to samé. Tedy, soubor neuronů, které jsou navzájem popropojované synapsemi. Avšak vzhledem k tomu, že nikdy nemáme k dispozici kompletní model mozku do posledního neuronu (už jen proto, že ten se neustále vyvíjí), tak si jej pro účely počítačové simulace zjednodušujeme.

Například tak, že si stanovíme, že každý neuron má synapse vstupní a výstupní, a signály tak mohou proudit pouze stanoveným směrem. Jako další zjednodušení se používá popis toho, co neuron se vstupními vzruchy má udělat (tedy, kdy vygenerovat výstupní vzruch). Nejtypičtěji, v nějakém poměru sečte jejich hodnoty (typicky 1, pokud byl vygenerován vzruch a 0, pokud ne) a pokud tento součet překročí nějakou stanovenou (tzv. prahovou) hodnotu, dojde k vygenerování vzruchu na všechny výstupní synapse. A takto se vzruchy šíří od vstupních synapsí celé neuronové sítě (vstupní data ke zpracování, například vhodně zakódovaný obrázek) přes její neurony až na výstupní synapse (udávající např. počet obličejů na vstupním obrázku).

Složité? Netvrdím, že ne. Proto se často pro jednoduchost uvažuje neuronová síť s jedním jediným neuronem. Tedy taková, která jen zpracuje vstupní data (např. pomocí výše zmíněného váženého součtu a prahování) a výsledek pošle na výstupní synapsi (když máme jen jeden neuron, tak nám stačí jedna výstupní synapse). Takové neuronové síti se říká perceptron.

Asi vás nepřekvapí, že takový perceptron je docela hloupá „umělá inteligence“. Ano, máte pravdu. Představte si, jak by asi tak vypadal člověk, který má v mozku jeden jediný neuron. Jeden jediný. Podotýkám, že obvyklé číslo je v řádech desítek miliard. A přesně těmto lidem já říkám perceptroni.

„Proč jen jsou všichni korem tak nabrbrí?“

— z filmu Team America: světovej policajt

Abych byl ale konkrétnější, perceptroni nejsou jen lidé, kteří nejsou zrovna dvakrát inteligentní. Nebo, kteří jsou dokonce hloupí. Jsou to lidé, kteří jsou tak hloupí, až člověk žasne, že jim polovina orgánů v těle už dávno neřekla: „Tak s něčím takovým, jako je tam nahoře, odmítám spolupracovat. Sbohem a díky za všechny ty ryby.“ a následně tělo řízeně neopustila. Natož, že někdo takový dokončil základní školu, udělal maturitu a dokonce hrozí, že získá nějaký akademický titul (nebo už ho snad i má).

Abych vám to nějak připodobnil. Nulté stádium perceptronu, Winston Groom, Robert Zemeckis i Tom Hanks prominou, je kupříkladu Forrest Gump. Na Forrestovi je totiž krásně vidět jedna charakteristická vlastnost každého perceptrona. Perceptron totiž má nadání na velké věci. Podobně jako u Forresta být součástí klíčových historických událostí, tak i perceptroni se často nachomýtnou k něčemu velkému. „Bohudík“ pro Forresta, opravdový perceptron se většinou nachomýtne k něčemu špatnému. A obvykle to sám způsobil. A hlavně – dost možná si to ani neuvědomuje.

Nejhorší na tom je to, že – mozek perceptrona dokáže nahradit kdejaký kapesní kalkulátor data výroby 1972 a novější. Takže simulovat, resp. představit si, jak zareaguje na určité podněty není vůbec nic těžkého. A to je problém. Vám je totiž naprosto jasné, že bude průšvih, protože naprosto přesně víte, jak dotyčný zareaguje. Ale – nemůžete s tím nic dělat. Protože pokud se o to pokusíte, tak budete okamžitě zdementováni (jaká ironie, co?) slovy, že vše je přeci v naprostém pořádku. Jistě, zatím.

Nikdy neříkej, že něco nejde, protože vždycky se najde nějaký blbec, který neví, že to nejde a udělá to.

Další ironií je, že perceptronovi se občas poštěstí nezpůsobit průšvih, ale – právě naopak. Zatím, co vy vymýšlíte sotisfikované řešení problému, analyzujete, konzultujete, optimalizujete a kontrolujete, přijde perceptron a vychrlí řešení na úrovni mentálně postiženého brontosaura s tuctem mozkožroutů. Vyplodí něco tak příšerně debilního, že by vás to ve snu ani nenapadlo. Úplnou náhodou je však jeho řešení lepší, což je sice super, ale tak akorát se tím dostanete do průšvihu vy. Protože po roce a půl intenzivní práce přijde a z vás udělá totálního vola. A ještě se vám vysměje, že si za to můžete vlastně sami. To se prostě vašim nadřízeným nebude moc líbit.

Takže je povýšen a vy, pro změnu vy, s totálně nechápavým výrazem sedíte a koukáte, jak dál svou blbostí ohrožuje své okolí a obáváte se momentu, kdy to praskne a něco nepěkného se skutečně stane. Problém je v tom, že nestane. Takoví perceptroni už zkrátka jsou. Všechno, všechno jim prostě tak nějak od přírody vychází. Taky to znáte? Taky JE znáte?

Pokud se tento článek někoho dotknul, tak se upřímně omlouvám. Ale co – perceptron čtení článku nejspíš vzdá někde u prvního substantiva, takže tuto omluvu si zřejmě nikdy nepřečte. A ostatním je to jedno. I tak se ale omlouvám.

 

 

Základní otázka života, smrti a vůbec

Ona přijde. Víme to všichni. Ty, já i on. Ale stejně, kdykoli, kdy přijde, tak jsme z toho v šoku, stejně tak jak silničáři z prvního sněhu nebo davy bojující o poslední výtisk nového Ládi Hrušky dva dny před Vánoci.

Člověk se s ní, s kmotřičkou, co kosou pohladila už nespočet krků, nepřímo setkává téměř denně. Další vážná nehoda na D1. Pěti lidmi sdílený článek z idnesu začínající slovy: „Hvězda popu 80. let“. Bruce Willis likvidující jednoho záporňáka za druhým.

Slyšíte houkačku. Za zády vám projede sanitka. V ten moment – pokud vůbec – nemyslíte snad na nic jiného, než na to, že řidič, ten tvrdej chleba má. A že zase další babi uklouzla před domem a nejspíš si zlomila nohu. A rozbila si při tom hlavu.

Co má člověk psát, když má smutek na duši,
co má člověk psát, když ho ten druhej neslyší?

— Záviš 

Vůbec, vůbec by vás nenapadlo, že vlastně onen (milovníci černého humoru doplňte: „vánočně“) blikající vůz se svým nepříjemným tónem razí cestu k pomoci. K těm pánům v bílých pláštích, kteří sice mohou nahánět strach, ale mají zázračné ruce. Ruce, které uzdravují. Ruce, které často dokáží zázraky.

Snad jen v nějaké noční můře – nebo Burtonovské povídce – by vás napadlo, že v tomto voze s nápisem“továrna na zázraky speedition“ (a malým podtitulkem „P.S. s ručením omezeným“), cestuje i jeden černý pasažér. Černý jako smrt. Sem patří poznámka z teorie uspořádání ohledně maximálního a největšího prvku v množině, ale pro stručnost bude vynechána. Jen si tak stojí v zadní části vozu a velmi, velmi pomalu přejíždí brouskem po čepeli. Tedy – pokud jí jej někdo nezapomněl do kabely nachystat, že ano, pane Svěrák.

Ale vy jdete dál, jako by se nic nestalo. Vám. Ani nikomu z vašich blízkých. A nebo ne? Co, když v té blikající krabici skutečně ležel někdo z vašich blízkých, jen jste o tom v ten moment nevěděli? Ne, ne. Ne, to ne. To by bylo moc jednoduché.

Nepřipadá vám až ironické spojení: „Smuteční slavnost“?

Aniž byste měli sebemenší tušení, má vaši adresu na seznamu. A taky se na vás náležitě usmála, jak na vás vykoukla z onoho sanitního vozu. Vy však dál kráčíte k domovu. Brzy tam budete, když v tom najednou ztratil vědomí. To první, první věc, co vám v ten moment proletí hlavou je: „Co teď? Co mám dělat? Co mám kčertu dělat?“. Najednou vám jsou všechny ty hodiny zdravovědy úplně k hovnu.

V ten moment děkujete pánubohu za to, že s sebou máte někoho, kdo alespoň tuší, co je to stabilizovaná poloha. Voláte pomoc, ty anděly v bílých pláštích. Všechno tak strašně trvá. A přitom se to celé odehrává tak strašně rychle. Zahajte neprodlednou resuscitaci, znělo z telefonu. Resuscitace. Jak nadějně zní toto slovíčko. Znáte to z filmů, tam to přece vždycky zabere!

Raz, dva, tři, čtyři, výdech. A znovu, a zase. Pomáhá to? Nevím, nevím nic. Fibriluje. Nevzdáváte, to. Bojujete. A pak ji spatříte. V jeho očích. Díváte se na ni a ona se dívá na vás. Marně hledáte chladné prazdroje, kterými byste ji uplatili. Prosíte ji, ať to nedělá. Prosíte, jako o život. Bohužel doslova. Tohle prostě není možné. Továrna na zázraky už je blízko. To místo, kde prý dokáží mrtvým navrátit život.

Noradrenalin do srdce. Ten ve filmech pomůže vždycky. Hrdina se po něm zhluboka nadechne, a otevře oči. Jenže on je má otevřené pořád! Jako by zůstal v hlubokém údivu. Zornicový reflex negativní. Další cizí slovíčka. Jazyk těchto mágů je prapodivný, ale člověku dává naději. Naději, že neodešel přímo v našem náručí, přímo před naším domem. Úplně jako ve filmu.

 

… v záhrobí totiž vládne pouze klid a mír,
povídá, budeš se mít lépe nežs tu žil.

— Záviš 

Exitus. Říkáte si, k čemu jsou všechna ta kouzla, magie, diagnózy. Všichni ti „američtí vědci, kteří náhodou možná objevili lék proti rakovině“, když ani nezmůžou jeden malý zázrak. Bohužel – nezmůžou. Ani malinkatý.

Věnováno Jerrymu, Jerrynkovi, *1. 9. 2004, †25. 12. 2016

Generátor vánočních koled

Vánoce. Ten skvělý čas, kdy se všichni radují, veselí, slaví – a jsou šťastní. Co jiného jim také zbývá?

A o tom to je. Vánoce jsou vlastně taková docela kýčovitá záležitost. Nezdá se vám to? Všechny ty výzdoby, pohádky, dárky, písničky, atmosféra, filmy.

Podívejte se třeba do televizního programu: pohádky, rodinné komedie, romantické filmy. Mrazík, Sám doma, Láska nebeská? Ano, to je jen malý výčet toho, čím se vás televizní stanice snaží naladit na vánoční vlnu. To vše k Vánoční atmosféře zcela jistě patří. Ale – co mě už pár let překvapuje, šokuje a já nevím, co všechno, tak jsou rádia.

Asi to přišlo ze západu. Nebo se to zrodilo někde v hlavě některého z tuzemských hudebních producentů: máme tu letní hity, tak proč nenapsat nějaký vánoční? Ten nápad se docela ujal, a tak každoročně vznikne pár nových zaručených vánočních hitů. Pokud jste o nějakém hudebním interpretovi dlouho neslyšeli (nebo se mu naopak v poslední době daří a rád by své popularitě trochu napomohl), je docela pravděpodobné, že před Vánoci o něm určitě uslyšíte. V lepším případě o hudebním interpretovi. V tom horším se jedná o herce, moderátora či nedejbože politika.

Vzhledem k tomu, že rádia moc neposlouchám, tak informace ohledně nového vánočního hitu Vánoc 201x ke mě doputují zpravidla pouze pomocí sociálních sítí. Co si tak vzpomínám, z posledních let tu máme Vánoční čas od skupiny Nightwork, Štědrý večer nastal od XindlaX či dokonce parádní funky hit Santa Claus od bláznivé kombinace Gunčíková, Jandová, Suchánek a Genzer. Dokonce koukám, že i redakce rádia Evropy 2 si opět pro letošní Vánoce nazpívala svůj song. Chválu nebo naopak kritiku těch uměleckých děl ponechám odborníkům a jen dodám, že Hudební masakry by ve svých análech jistě vyhrabaly spousty daleko horších exemplářů.

A přesně v ten moment mě to napadlo. O čem to k čertu vlastně chtějí pořád zpívat? Ježíšek, cukroví, dárky, radost, purpura. Stromeček. Dobře, ještě kapr. A cukroví. Tak moment, to už tu bylo? Dobře, nejsem sice textař, ale – nemohu se zbavit pocitu, že takovéto „koledy“ jsou prostě pořád o tom samém.

A v ten moment mě napadlo, jestli by nešla práce takového textaře nahradit počítačovým programem. Tak jsem to zkusil a – no, posuďte sami:

Generátor vánočních koled (online)

Pokud by vás zajímalo, jak takový elektronický textař funguje, prostě a jednoduše za sebe skládá víceméně náhodné verše. Samozřejmě, nic není je tak. Verše se musí rýmovat a také mít nějaký rytmus (resp. alespoň stejný počet slabik v každém verši).

Zajímavější je, jak se generují jednotlivé verše. Základní idea spočívá v tom, že každý verš popisuje nějakou činnost. Tuto činnost může provádět určitá skupina osob/věcí. Například děti mohou psát dopis Ježíškovi, rodiče pít punč a zvířátka ležet u krbu. Verš se tedy sestavuje tak, že se vybere některá z těchto aktivit a k ní se pak už jen vybere některý z aktérů. V případě, že je tato kombinace moc krátká, tak se tam doplní pár slov typu: „zase po roce“ nebo „dnes celý den“.

náhled
Koleda s číslem 80147628.

Trochu odborněji řečeno, můžeme tak mluvit o (probabilistické) formální gramatice typu 2, tedy bezkontextové. Pochopitelně, s určitými restrikcemi, takže to čistě bezkontextová gramatika není. Nicméně, celá idea generování veršů je na principu gramatik od počátku založena.

Kdo by měl zájem, celou aplikaci mám nahránu na openshiftu, takže si ji (když mi dáte klíč) můžete naklonovat, nebo si ji proklikat přímo v testovací produkci pod touto adresou: xmasgen-martlins.rhcloud.com na clusteru někde v Kalifornii. Tímto bych chtěl také poděkovat studentskému spolku UP Crowd za hosting v Česku a koncekonců také za propagaci.

Tak vám přeji hodně zábavy při generování a hlavně zpívání (byť nepředpokládám, že by některé z koled snad byly zpívatelné) vygenerovaných koled. A samozřejmě Veselé Vánoce a štastný nový 2017 rok k tomu!

Živá nebo mrtvá? Ta kočka v krabici, samozřejmě

Ano, mluvím o kočce pana Schrödingera. Té malé roztomilé, co je zavřená v krabici. A možná už je mrtvá. Nebo umře, než dočtete tento příspěvek. Kdo ví…

Tiše předpokládám, že Schrödingerovu kočku vám jistě nemusím představovat. Symbol popularizace vědy, kvantové fyziky a nekonečný zdroj vtipů. Ale pro úplnost: Jedná se o myšlenkový experiment, který si klade za cíl poukázat na nedostatky tehdejší kvantové fyziky (přesněji kvantové mechaniky), vzhledem k tomu, že to v té době bylo docela mladé téma.

Šlo o to, že máte kočku. V krabici. A s ní je v této krabici zavřeno také jisté zařízení. Toto zařízení obsahuje nuklid, tedy látku, která se postupně radioaktivně rozpadá. Je stanoveno, že tento nuklid se s 50% pravděpodobností do hodiny rozpadne. V takovém případě zareaguje patřičný detektor a uvolní jed, který nebohou kočku usmrtí.

Asi netřeba dodávat, že já kvantové fyzice rozumím asi jako křováci v Africe, ale – v čem je tento pokus – krom praktikování pokusů na zvířatech – tak zajímavý? Nu, jde asi tak o to, že kvantová fyzika uvažuje nějaké superpozice. Tedy, že nuklid je nějakým způsobem rozložen i nerozložen současně. Tudíž, by i kočka měla být mrtvá i živá současně. Což je samozřejmě nesmysl. Tak jak z toho ven?

Ptejte se Einsteina nebo Hawkinga! Já dnes chci mluvit o něčem úplně jiném. Podívejte se hned na první větu za „Ale pro úplnost:“. Myšlenkový experiment. To je ono. Víte – občas někdo utrousí poznámku na téma jak k tomu asi přijde nebohá kočka. To jistě. Ale napadlo vás někdy, jak se asi musí cítit pan Schrödinger?

Při představě, že je přesně 50% pravděpodobnost, že v momentě, kdy kráčí chodbou ze své kanceláře k laboratoři s krabicí, jeho kočka už je dávno mrtvá? Nebo stále žije? A nebo se nuklid špatně vyspal a rozpadl se hned, co Schrödinger opustil laboratoř, a on tak po dalších 59 minutách najde jen tělíčko v začínající fázi rozkladu?

Něco takového je jistě pro každého z nás děsivě nepředstavitelné. Nebo nepředstavitelně děsivé. Ale – víte, že vlastně ne? A není to jen přítomnost roztomilé chlupaté koule, která dělá z myšlenkového experimentu z kvantové fyziky každodenní záležitost.

Ani nemusíme chodit daleko od fyziky: Psali jste test z fyziky. Vy fyziku, samozřejmě, jako každý student, k smrti nesnášíte. Takže, v momentě, kdy rozporuplni odevzdáváte papír popsaný výpočty, náčrty a vzorečky, nevíte. Jste jako Schrödinger, který ukládá kočku do krabice a odchází. „Za týden budou výsledky.“, říká profesor. A vy čekáte. A za týden krabici otevřete, a dozvíte se, jestli vaše fyzikální kočka zemřela, nebo přežila. Protentokrát.

Ale toto není zdaleka jediný případ. Zkoušíte úplně novou pizzu. Co na vás vykoukne, když otevřete krabici? Bude na vás radostně koukat a nedočkavě se k vám lísat? Nebo se zmůžete jen na důstojné rozloučení u odpadkového koše?

Nebo – ve schránce najdete dopis s červeným pruhem (nebo tak něco). Může to být jen pokuta za stání na invalidech. Osahávání kolegyně na zvrhlém firemním večírku. A nebo prostě a jednoduše na vaší zahradě sousedův pes vyhrabal mrtvolu.

Příkladů je opravdu spousta. Telefonát z neznámého čísla. Boty koupené přes internet. Žádost o povýšení. Namazaný chleba padající na zem. A nebo typický mužský problém: „Odepíše mi?“. Dobře, namazaný chleba asi není úplně ten případ. Ale to bychom opustili Schrödingera a přešli k Mikešovi (kočka jako kočka, co?).

Vraťme se ale zpět do univerzitních chodeb. Na tu dlouhou chodbu, schodiště, několikery dveře, kancelář a laboratoř. Pohodlné křeslo za velikým pracovním stolem. Všude spousta papírů, ocenění, diplomy. Fotka manželky. Toto vše je jeden obrovský koktejl, který se neustále míchá kolem sedícího a dumajícího Schrödingera. V hlavě se pak odehrává největší bitva v historii lidstva. Život versus smrt oné nebohé kočičky. Přežije to? Prosím, ať to přežije!

Vše se najednou točí kolem té jedné zatracené krabice dole v laborce. Kancelář jako by zavoněla jejím papírově-kočičím pachem. Na rameni jakoby ucítíte dotek její srsti. Celým tělem vám najednou projede ten nepříjemný ostrý impulz. Na čele vám vyraší kapka potu. Ale kdepak, to se mi jen zdálo. Ona je přece pořád zavřená dole v krabici.

Sedíte a přemýšlíte. Máte pocit, že se nemůžete ani hnout. Ano, ta bezmoc. Ta strašlivá bezmoc! Připadáte si jako kus hadru, který někdo vyždímal a pak prostě jen tak pohodil na křeslo. V ten moment nejste nic. Jen bezvládně sedíte a přemýšlíte. Entropie (=neurčitost, neinformovanost) je na maximu. Každým pórem se do sebe snažíte nasát malilinkatý kousek informace, která vás z tohoto mučení má vytrhnout. Detail, drobnost. Cokoliv!

Posloucháte tikot hodin na stěně. Máte pocit, že se vám snaží něco sdělit. Opravdu? Skutečně? Ach bože, jen to ne. Ať to není pravda. Prosím, řekněte, že ne! Diplome, klávesnice, pavučino v rohu! Cítíte, že vše kolem vás žije. A moc dobře ví, co zrovna prožíváte. Ale všechna ta okolní hmota, všechny ty předměty kolem vás však nevyslyší vaše volání, vaše prosby. Potřebujete to vědět! Z vteřin jsou minuty, z minut hodiny. Ten čas běží tak pomalu.

Ticho! Venku zafoukal vítr. To není dobré znamení. To se mi určitě snaží naznačit – to nejhorší. A nebo ne? Já nevím, nerozumím tomu. Co to má znamenat? Srdce mi buší jak ještě nikdy. Bože, ať už to skončí, jsem smířen s osudem!

Čas se pomalu chýlí ke konci, opatrně se zvedáte ze svého křesla a vydáváte se na dalekou pouť. Saháte na kliku a v ten moment vás to napadá. Já to nechci vědět. Půjdu tam a tu krabici nikdy neotevřu. Možná to tak bude lepší.

Jdete chodbou, tou neskutečně dlouhou chodbou. Znáte to, chodíte tudy několikrát za den. Máte napočítaný každý krok. A každým dalším se pomalu blížíte k pravdě. Ne, já to musím vědět. Chci znát pravdu!Třesete se. Přidáte do kroku, smířeni s nejhorším. Uhýbáte ke schodišti a zářivka za vámi zablikala. To něco musí znamenat! Proč jen tomu nerozumím?! Určitě to muselo být něco důležitého, ba dokonce rozhodující. Mozek se vám vaří.

Scházíte po schodech. Máte pocit, že o dvě patra níže se něco šustlo. To je další znamení. Bodejť by nebylo, vždyť bude jedna ráno. Ale jaké? Poslední schody, už jen pár desítek kroků. Srdce vám buší jako o závod. Dveře laboratoře jsou přímo před vámi. Čekají jen a jen na vás. Z celého vesmíru vás nezajímá nic víc, než tyto dveře. Máte pocit, že vás přitahují nějakou magickou silou.

Saháte po klice a otvíráte dveře. Rozsvítíte a temná místnost se najednou zalije životodárným světlem. Marně doufáte, že se odněkud ozve radostné „mrau“. Jen ticho a bzučení zářivek. Váš zrak se upírá na tu papírovou krabici, která si jen tak osamoceně leží na stole u zdi. Nerozvážným krokem přicházíte k ní. Kontrolujete čas, jsem tu přesně. Čtyři, tři, dva, jedna, tak a můžu. Tlukot vašeho srdce přehlušil i ambientní bzukot zářivek. Opatrně odklápíte víko krabice. Nejste schopni ani dýchat. Odsouváte víko, to poslední, co vás dělí od vašeho miláčka. Už za pár milisekund pohlédnete pravdě do očí. A pak ten moment skutečně nastane…

Fyzika nezklamala. Jako obvykle.

Každý jsme takový Schrödinger, který má všude kolem sebe krabice s kočkami, nuklidy a jedy. Jen si to většinou neuvědomujeme. Je zajímavé se nad tím někdy zamyslet.

Poznámka: Tento článek vznikl recyklací mého konceptu s názvem „Syndrom Schrödingerovy kočky“. Představte si, že jako Schrödinger se cítí každým dnem každý programátor. Stát před krabicí zdrojového kódu, koukat na něj a očima hypnotizovat načítající se ikonku. Bude to fungovat? Opravíte chybu – a ptáte se zase. Opět zemřela. A tak zase. Po několika pokusech se pravdy začnete děsit. Ano, možná teď už kočka konečně přežila – ale, co když ne? Prokrastinujete, hlavně, ať se nemusím podívat té zhoubné pravdě do očí. Máte strach. „Velký“ strach.

Prokletí informatika

Právě jsem se vrátil ze zkoušky. Dopadla – jak to tak u mě většinou bývá – víc než úspěšně. Místo bujarých oslav si však (opět) říkám, jestli je to vlastně v pořádku.

 

Než se však pustím do vyprávění toho, co se vlastně stalo a proč už v sobě nemám třetího panáka, dovolte mi jednu důležitou poznámku na úvod.

V názvu článku stojí „informatika“. Lidé, kteří mě znají, tak ví, že já mé spolužáky či kolegy rozděluji na ty, kteří jsou „informatik“ a na ty, kteří jsou „student informatiky“ (popř. „absolvent informatiky“). Tento na první pohled nenápadný rozdíl je však prakticky fatální.

Většina lidí si totiž myslí, že když studují (nebo již dostudovali) informatiku, stali se z nich informatici. To je však velký omyl. Vezměte si sebe – kolik z vašich spolužáků ze střední, kteří školu skutečně vystudovali, to skutečně umí (a případně dělá)? Když se zamyslím já, tak z mých spolužáků ze střední, elektrotechnické průmyslovky, se elektrotechnice věnuje možná tak polovina. Zbytek třídy, ač na to mají papír, bych jako elektrotechniky rozhodně nikdy nenazval.

A s informatiky je to podobné. Znám spoustu lidí (netvrdím, že přímo mých spolužáků; vzhledem k tomu, že nás aktuálně studuje 6, tak bych prakticky musel být konkrétní, což bych nerad), kteří studují informatiku stejně jako já a přitom informatiky nejsou. Ano, určitým způsobem třeba umí programovat, zadaný úkol nějak vyřeší, ale když se jich zeptáte, proč to řešili tak a tak, nebo jestli je třeba jakože nenapadlo použít to, co nás učili dva roky zpátky, tak neví. Neví, neznají, nenapadlo je to, už si to nepamatují.

Tito lidé prostě o informatice, no, dobře, nechci říkat, že neví nic, ale – z jejich práce je patrné, že prostě nejsou informatikové. Chodí do školy, učí se na zápočty a zkoušky, ale je vidět, že tomu, co se učí důkladně nerozumí a hlavně – neumí to použít v praxi. Takový člověk informatiku pouze studuje, nic víc. Jo – a samozřejmě na ni nadává. Že se musí učit teoretické nesmysly a zbytečnosti, které mu budou v praxi k ničemu.

Tak přesně o těchto lidech tento článek není. Tento článek popisuje smýšlení někoho, kdo na přednáškách přednášejícího neposlouchá, kdo na přednáškách slova přednášejícího hltá po kilech. Mluvím tu o člověku, pro kterého zabývat se teoretickou informatikou není odporná zbytečnost a ztráta času, ale něco zajímavého. Něco natolik zajímavého, že se nebojí tomu obětovat část svého volného času.

Takto nějak se vidím já. Přiznávám, že tato představa je poněkud idealizovaná, ale to koneckonců nevadí – ani já nejsem dokonalý informatik. Dobře, ale říkáte si, co je na tom tedy tak špatné?

No, první věc, která nejspíš napadne každého, je těžká integrace do praxe. Člověk zvyklý na přednášky a hluboké dumání nad rozličnými teoretickými problémy zpravidla velmi těžce nese fakt, že najednou nejhlubší problém, který ho čeká, je zjistit, proč zákazníkovi aplikace spadla.

Ale o tom jsem nechtěl mluvit. Toto totiž zjevně trápí kdejakého studenta či absolventa vysoké školy. To, proč píši tento článek pramení přímo z podstaty informatiky, resp. jejich aplikovanějších podob.

Jedním z úkolů informatiky totiž je něco, čemu já souhrnně říkám „teorie programování“. To je, zjednodušeně řečeno, sada informatických disciplín, které nám ukazují, jak by se mělo programovat. Pochopitelně, znalost teorie programování je jeden ze základních předpokladů každého informatika. Každý informatik totiž pak nejen, že něco nějak naprogramuje, ale je si vědom toho, co a jak vyřešil, že jeho řešení je nejlepší možné a pokud není, tak dokáže přesně popsat proč.

Pořád si říkáte, co je na tom špatné? Ukážu názorně: Informatik je postaven před úkol vytvořit jednoduchou databázovou aplikaci. Něco jako telefonní seznam nebo tak. Nu, aplikaci si kompletně navrhne, vytvoří si malý databázový framework, sadu GUI komponent a důmyslný systém jednotkových testů. Na závěr vše spojí dohromady a po dvou týdnech má hotovou perfektní aplikaci.

Když před tentýž úkol postavíte neinformatika, založí si projekt, vloží třídu, otevře hlavní metodu, do ní nabuší příšerné množství kódu, aplikaci spustí, prokliká a má hotovo. Za jedno odpoledne. I s pauzou na kafe. Hodinovou.

A na to, že to celé funguje jenom nějakým zázrakem a že se každý bojí v té aplikaci cokoliv změnit, protože je mu jasné, že by okamžitě odkráčela do křemíkového nebe (a ještě cestou sestřelila nějaké dopravní letadlo, prostě jen tak), se nikdo neptá. Obzvlášť v komerčním prostředí, kde každá minuta je drahá. A rozdíl třinácti a půl dne je v tomto případě značný.

Tuto situaci si asi dokážete představit. Ale pointou tohoto příběhu dvou programátorů není příšerná práce neinformatika, ale – naopak precizní práce informatika. Tady je totiž krásně vidět, že informatikovi naprosto vůbec nezáleží na tom, na jak rozsáhlém projektu pracuje, on je precizní vždy.

I když si jen píše v excelu vzoreček pro výpočet počtu sazenic na záhon, naprosto automaticky dokumentuje a testuje. A výpočet si dělí na dílčí kroky. A tak podobně. Prostě dělá vše, co je mu jakožto informatikovi vlastní.

A v tom je ten problém. Informatik je totiž takový detailista, puntičkář, chcete-li. Nedokáže se od toho odprostit. Ve všem musí mít dokonalý systém. A pokud ne, celé to zahodí a raděj to udělá celé znovu. Co naplat, že ztratí dva dny práce. Nedokázal by se smířit s tím, že vyprodukoval něco, co není podle jeho představ. Co se mu na 100% nelíbí. Co není ideální.

Tohle všechno stojí čas. To věčné zdokonalování, vylepšování, uhlazování. A vždycky se objeví nějaký další problém. Takže kus práce zahodit a zase znovu.

Zprvu je to skvělé, člověk má radost, jak se jeho dílo posouvá stále více a více kupředu. K dokonalosti. Ale časem začne sledovat, jak vždy, když má cíl na dosah, tak mu o kousek uskočí. A to začíná být frustrující. A únavné. A celé to skončí zpravidla tím, že to prostě vzdá a je nucen se spokojit s výsledkem, který rozhodně není dokonalý. Pořád je 1000x dokonalejší než to, co by vyplodil kdejaký neinformatik, ale – není to ono.

Takže zpravidla člověk, i když projekt zdárně dokončí, je totálně vyčerpán – jak fyzicky, po nekonečných dnech a nocích za počítačem, tak psychicky – žít s tím, že po tak usilovné práci a takovém množství času projekt stejně nedotáhl do konce. Ke kýžené dokonalosti.

Jedinou útěchou tak pro něj může být, když se zjeví problém. Neinformatikovo veledílo totiž v takovém případě havaruje a z neinformatika se stává hromádka neštěstí, zatímco informatik na to byl připraven a problém tak vyřeší velmi snadno. Toť teorie. V praxi se – bohužel – vždycky se objeví něco, s čím ani sebelepší informatik nepočítal a hromádka neštěstí se stává z něj. Podařilo se totiž najít (další) důkaz toho, že jeho dílo skutečně není dokonalé.

Takže zatímco neinformatikové si žijí ten svůj život smířeni s tím, že hold občas budou muset řešit nějaký ten problém, život informatika je jeden velký problém. A to je problém. Prokletí.

 

Koho by zajímalo, jak (nedokonale dokonale) vypadá jednoduchý překladač programovacího jazyka po dvou měsících informatické práce, mkrněte na github. Už je oficiálně odevzdán, takže jej, myslím, můžu veřejně uveřejnit.

 

Existuje 10 typů lidí …

Znáte ten starý známý ajťácký vtip? Myslím tento:

Existuje 10 typů lidí: ti, kteří rozumí binární soustavě a ti, kteří nerozumí.

A znáte také jeho upravenou variantu?

Existuje 10 typů lidí: ti, kteří rozumí trojkové soustavě, ti, kteří nerozumí a ti, kteří si mysleli, že toto je vtip o dvojkové soustavě.

Když se nad tím zamyslíte, jistě vás napadne, že tímto zdaleka nekončíme. Takovýchto vtipů může být vlastně docela dost. A to, přesně řečeno, nekonečně mnoho.

To je docela hodně, já vím. Ono i přečíst je všechny by nějaký ten čas zabralo. Nicméně, připravil jsem krátký seznam těch prvních:

Jen tyto dva

Prvních 5

Jak se píše v patičce stránky, počet vtipů, které chcete zobrazit, je dán parametrem stránky. Takže si ho můžete klidně změnit na téměř jakýkoliv (dobře, ve skutečnosti až do symbolických 64).

Pár důvodů, proč nemám rád .NET a C#

Ti, kdo mě alespoň trochu znají, tak už to o mně dávno ví. Jsem javista a vyvíjím pod linuxem. Kdykoliv mám vyvíjet pod Windows tak nadávám. A co teprve, pokud mám vyvíjet v jazyce či na platformě, kterou si sám Microsoft vytvořil. A k nim pochopitelně patří i jazyk C# a platforma .NET.

Vzhledem k tomu, že jsem nyní nucen příležitostně v tomto jazyce vyvíjet, mám alespoň částečnou možnost srovnávat. Srovnávat C# s Javou. Ale taky s tím, co by – podle mě – mělo být správné, nebo co by se mně osobně líbilo.

Vývojář

Microsoft. To je kapitola sama pro sebe (a že pokud nebudu po uveřejnění toho článku ukamenován, mám v plánu něco napsat). To, že je celá platforma .NET v režii společnosti Microsoft beru jako jednu z nejvýraznějších nevýhod. Jednak člověk na každém rohu naráží na totální přešlapy, které jsou pro produkty Microsoftu typické. A pak – platforma, která je vyvíjena jednou(!) a ještě navíc komerční(!) společností, to nemůže vést k ničemu dobrému. Je to jako být si sám sobě oponentem u akademické práce nebo plodit potomky se svou vlastní sestrou. To zřejmě eliminaci oněch přešlapů moc nenapomáhá.

Co však asi napadne každého: uzavřenost, nepřenositelnost a nerozšiřitelnost. Pro mě jako pro javistu je to naprosto nemyslitelné. Na druhou stranu – abych zase jen nekritizoval – tyto tři vlastnosti vedou i k výhodám, jako je optimalita a odladěnost.

Vývojové prostředí a nástroje

Microsoft vydává vlastní vývojové prostředí, Microsoft Visual Studio. Už jen ten název – co má společný vývoj software se slovy vizuální a studio (s názvy produktů si obecně v Microsoftu hlavy nikdo moc neláme – stačí říct Internet Explorer nebo Windows)? Má to prý umět úplně všechno. To asi ano (ač jsem nikdy nepoužil víc jak 5% toho, co by asi tak mohlo nabízet), takže je těžkopádné, náročné a často pomalé.

Opomenu-li některé dle mého názoru fatální po uživatelské stránce pochybení (např. IntelliSence, rádoby kontrola kódu ještě před překladem, nebo našeptávač, který v základu našeptává všechny identifikátory, na které kde narazil), tak – jedno IDE je prostě špatně. Znám spoustu lidí, co na MS VS nadávají, ale – prakticky nemají možnost změny.

A to ani nemluvím o úplné absenci nějakého jednoduchého (ne nutně konzolového) nástroje. Čekám, kdy budu muset spouštět VS jenom proto, abych opravil překlep na webové stránce. Nemluvě o migraci projektu („solůšny“) mezi verzemi VS a vůbec – celý deployment aplikací. Pro Javistu, obzvlášť pracující na libovolném unixu, je projekt složka se zdrojovými kódy (a dalšími „resources“) a obvykle jeden konfigurák, který se stará o projekt jako takový. IDE slouží jen jako nástavba, není žádný problém se o veškerou konfiguraci a deployment projektů starat ručně (vše je standardizováno a zdokumentováno).

Jazyk C#

Nu, můj první dojem (který trvá doposud) byl: „Oni se asi drží pravidla čím kratší kód, tím míň chyb.“ A tak do jazyka vkládají spousty udělátek, které jej komplikují, ve snaze snížit délku napsaného kódu. Programátor je tak obtěžkán nutností myslet také na prvky jazyka, nikoliv jen čistě na programování.

Také často říkávám, že C# je slátanina VisualBasicu a C++. Hraje si na vysokoúrovňový jazyk, ale přitom používá tak primitivní a nízkoúrovňové nástroje, jako je např.  :  (zápis pro dědičnost) namespace  či enum  a struct . Namespace působí, jako nástroj, který má zabránit kolizím názvů a ne jako nástroj pro strukturizaci projektu. Výčty sice najdete i např. v Javě, ale mnohem propracovanější a použitelnější. Struktury Java nemá vůbec – v Javě je (kromě primitivních datových typů) všechno objekt.

Vlastnosti – nástroj, který má programátora ušetřit od psaní zapouzdření. Jenže i zapouzdření jsou metody. A proto by se s nimi podle toho taky tak mělo zacházet. Gettery mohou být parametrizované (a to často častěji než neparametrizované), navíc umožňují i smysluplnější pojmenování (např. find nebo create). Rozdíl klíčových slov  readonly , const a proměnné bez setteru nechápu doteď.

Třešničkou na dortu jsou pak kolekce. Tedy vlastně nejsou. Mám na mysli javovské kolekce, které totiž v C# úplně chybí. Většina C# programátorů říkává: „Když vím, kolik toho je, použiju [ ] , jinak List<> .“ A co když budu potřebovat rychle vyhledávat (přidávat, odebírat)? A nebo automaticky objekty uspořádávat? A nebo nemít duplicity? A v neposlední řadě – já osobně se polím vyhýbám jak jen to jde (vždyť je to prehistorický nástroj, který, jak známo, např. Python už nemá vůbec).

Závěrem

Je toho pochopitelně ještě mnohem víc. Například konvence – ostré závorky na samostatných řádcích mě vyloženě vytáčí, kód je pak strašně roztahaný – a tím i pro mě nepřehledný. Také mi vadí podtržítka v názvech proměnných a vlastnosti psané s velikým písmenem – tedy stejně jako třídy. Ale, co by jste chtěli, když nemáte  getProperty  a setProperty ? Hold je potřeba si dopomoct nějakým umělým způsobem.

Sečteno, podtrženo, C# na mě působí „neprofesionálním“ dojmem. To znamená, že se snaží co nejvíce ušetřit práci programátorovi na úkor toho, že ho často přiměje k porušení (resp. nedonutí k dodržení) některých nepsaných pravidel programování. Jeden příklad za všechny – klíčové slovo  partial . Proč používat další nástroj pro rozdělení kódu třídy do více souborů, když máme dědičnost a agregaci/kompozici? Pak člověk zjistí, že minimálně dva jeho kamarádi (a to programují v C# minimálně tak, jak já v Javě) nepoužívají, nebo používají nesprávně něco tak základního, jako je dědičnost.

Na druhou stranu, jak jsem zmínil na počátku – nespornými výhodami je fakt, že platforma .NET je odladěna na míru operačnímu systému Windows, takže je to (oproti Javě) určitě rychlejší. A díky tomu, že se nikdo nezabývá přenositelností, tak mnohdy i jednodušší (typický příklad – lomítka v cestách k souborům).

A to hlavní – vývoj je tak rychlejší a levnější (a z mé zkušenosti v C# programují lidé s nižší kvalifikací). Čímž se ovšem dostávám k tomu, že u programování se prostě musí přemýšlet, což si často lidé bez patřičného vzdělání moc neuvědomují. Zeptejte se třeba Donalda Knutha, koneckonců je to jeho myšlenka. Bez přemýšlení prostě programování nebude programováním, ale psaním příkazů do souboru. A mám pocit, že Microsoft se občas trošku snaží razit právě touto cestou.