Myslet jako programátor – komplexně nekomplexní

V předchozí kapitole jsem s nostalgi popisoval rodící se obrovský nový svět informačních technologií, který začínal postupně pronikat do našich životů, značně idealizovaným pohledem malého kluka.

S přibývajícím věkem i prací s výpočetní technikou začínalo být i tomu největšímu idealistovi jasné, že tak jednoduché to být nemůže.

Za pěkným koláčovým grafem se sice skrývala jednoduchá čistá pravda, ale stějně tak veliké zjednodušení. Samotný graf, který se rozhodnete vykreslit třeba v dnešních moderních nástrojích (třeba i v tom obyčejném excelu) je možné realizovat 40 různými způsoby. Koláčovým, Síťovým, Spojnicovým atd… U každého z nich vidíte jiný pohled na tu samou realitu. Na ten samý soubor dat. Co je v jednom zobrazení do očí bijící, v jiném nerozeznatelně zaniká.

K mé hrůze jsem začal pomalu zjišťovat, že ani svět počítačů není ušetřen oné světové komplexnosti. Nestojí mimo ni. Nevymyká se. Napak. Chaos vznášející se nad naší denodenní realitou dokázal proniknout i sem. Do dříve bezpečného světa jedniček a nul. Do světa který zná jen dva stavy. Ano a Ne, Splněno a Nesplněno, Platí a Neplatí.

Úkolem mě „harcovníka“ který se světem počítačů protlouká už nějkou tu řádku let, je předat svá pozorování všem těm, kteří jsou zde noví. Cítím nutkání, potřebu, varovat vás před (na první pohled možná né úplně zřejmými) pastmi které na vás tento svět přichystal a do kterých jsem se sám zachytili. Vymotávání z nich mnohokrát není snadné. Byla by škoda ztrácet čas následováním stějně chybných předpokladů a tvrzení která mě samého svedla kolikrát na zcestí.

Abych se tedy konečně dopracoval k tématu souvisejícímu s programováním a myšlením, mám pro vás první poučení plynoucí z předchozích řádek.

Počitače jsou stejně komplexní jako svět sám a většina zadání není tak jednoduchých jak se na první pohled jeví. Pokud mají naše programy / algoritmy fungovat v živém světě (a nezůstat jen statickým zápisem zdrojového kódu v učebnici programování) čekejte nečekané,

Trpí stejnými problémy a některé dokonce ještě zhoršuje (ukážeme si na příkladech pozdějí). Nenechte se tedy zmást jednoduchým zadáním. Protože i za tím nejjednotušším zadáním se může skrývat noho hodin programování.

Myslet jako programátor – Úvod

V dobých kdy jsem se začal zajímat o počítače byly ony samotné ještě v podstatě v plenkách. Byla 90 léta 20 století. Pro mě tehdy netušeným problémem byla jejich velikost i výkon. V podstatě právě končila éra obrovských výpočetních sálů, do kterých chodili naši tatínkové s děrnými štítky po kapsách a programy psali takzvaně na první dobrou, protože jakýkoli chybějící „středník“ (jeho odhalení a oprava) dokázal zničit desítky hodin strojového času. To si člověk jó pořádně pohlídal, aby takovou kravinu udělal v životě opravdu jen jednou. Počítače se v této době konečně vymanily z obrovských hal a hledaly si cestu k drobným uživatelům – do jejich domácností. Ti méně vizionářsky ladění z nás, si říkali k čemu že jim taková „hloupost“ doma bude. Větší vizionáři už se viděli jak na nich zpracovávají své začínající účetnictví či připravují na porady tabulky či grafy (to chtělo opravdu vizi, protože dostat něco takového v té době z počítače – rovnalo se opravdu nadlidskému úkonu). Zatímco my děti měly jasno. Bude se paříííít!!! Každý koho jsem tenkrát znal chtěl mít doma počítač!

Pravda s výrokem o plenkách by asi naši tatínkové těžko souhlasili. Vždyť první funkní turingovsky úplný stroj zvnikl již před drahnou řádkou let – 1933. Nicméně počítače jak je známe dnes, tedy něco co nám leží na stole či pod stolem, tiše si vrčí, čouhá z toho pár drátků k monitoru, myši a klávesnici se prostě ve zmňovaných letech teprve rodilo.

Mě samotného k počítačům táhla grafika. Když se po pádu komunismu začaly v české televizi objevovat první koláčové grafy vytvářené zjevně na počítačích, byl jsem vždy u vytržení. Počítače ve mě vzbuzovaly touhu vytvářet taky něco tak krásného, tak jednoduchého, zbavéného všech složitostí okolního světa… prostě do něj nastrkáte hromadu nesourodých dat a na druhém konci z něj vypadne krásný jednoduchý vše říkající koláčový graf….

Nemá smysl si nic nalhávat, samozřejmě že o hry šlo také :-). Obě motivace si byly nicméně rovnocenné.

Ta čistota počítačové logiky mě samotného – kluka s hlavou v oblacích – unášela. Začni; Čekej na vstup; Když bylo stištěno W jdi nahoru; Když bylo stištěno S jdi dolů… Nádhera… žádný prostor pro jiný výklad, který mě v běžném světě tak ničil.

Co tím jiným výkladem vlastně myslím? Ok. Tak si představte, že vám někdo řekne „Otoč tím kolečkem doleva“. Co uděláte? A jakmile si odpovíte co uděláte tak si zkuste odpovědět také na otázku proč jste to takto udělali? Proč jste kolečkem neotočili na opačnou stranu? Copak má kolečko vůbec nějakou stranu?

Nebo jiný příklad. „Zaparkuj za tím červeným autem“ Postavíte své auto tak že kolem červeného auta projedete a zastavíte za ním – tedy váš zadní kufr k jeho přednímu? Nebo ještě před tím než by jste červené auto předjeli zabrztíte a postavíte se tak že jeho zadní kufr bude navazovat na váš přední? A pokud ano, proč? Proč spousta lidí vnímá napřiklad přechod jinak než auto? Proč „zastav za přechodem“ kažý pochopí stejně, ale „zastav za tím červeným autem“ je problém?

Vypadalo to (alespoň mi se to takto jevilo) že svět počítačů nás všech těchto mnohovýkladovch situací dokáže zbavit. A to jednou pro vždy.