/ janturon.cz / Výuka / Javascript / O programování

O programování

Co to je

Programování je instruování počítače k tomu, aby dělal, co chceme. A lidé od počítačů očekávají:

Člověk a stroj

Člověk vytváří hodnotové asociace, zaujímá postoje, prožívá emoce, uvažuje, je cílevědomý. Počítač testuje a přepíná stavy, což je kvalitativně odlišné od elektrochemického přenosu signálu mezi neurony: ať se člověk koncentruje sebelépe, do každé myšlenky se mu pletou desítky dalších, které ho odvádí od problému (líbí se mu to nebo mu je to protivné, verbalizuje si, je mu teplo/zima, dostal na něco chuť, něco zaslechl - a mozek se tomu podvědomě věnuje bez ohledu na vůli), v důsledku čehož je schopen provádět nejvýše jednotky operací za sekundu. Počítač je milionkrát rychlejší a neřeší nic jiného, než se mu zadá: například co dělat, když nastane něco nečekaného.

Stisk klávesy

Člověk komunikuje s počítačem přes rozhraní operačního systému, které mu umožňuje abstrahovat od hardware: stiskne klávesu a na displeji se ukáže písmenko. Ve skutečnosti stisk klávesy jen vyvolá HW přerušení BIOSu první úrovně (IRQ1) číslo 09H, které (mimo jiné) zapíše znak do vyrovnávací paměti. OS neustále volá přerušení 16H, aby se dozvěděl, je-li fronta neprázdná. Pokud ano, zkontroluje uživatelské nastavení klávesnice. Je-li to písmenko a má-li OS aktivovaný GUI prvek s textovým vstupem, zavolá WinAPI funkci SetWindowText, která změní textový obsah políčka. Aby se to také rozsvítilo na monitoru, zavolá OS rozhraní GDI, kterému podle použitého fontu řekne, které pixely má rozsvítit. Toto rozhraní provede podobný dialog s grafickou kartou, která upraví pár desítek bitů ve své paměti a za pár milisekund je při příštím obnovení displeje promítne v podobě písmenka.

Nízkoúrovňové a Vysokoúrovňové programy

Tato lidská cílevědomost přeložená do jazyka změn stavu hardware se nazývá program. Většina programů má svůj vstup (zde stisk klávesy) a všechny mají výstup (zde rozsvícení písmenka na displeji). Čím blíže má program k hardware, tím je nízkoúrovňovější. Nízkoúrovňové programy nemají nijak oslnivé výstupy (rozsvícení pixelů na displeji málokoho vytrhne), ale bývají využívány v programech vyšší úrovně: celý tento program (a více) je ukrytý ve WinAPI příkazu CreateWindow. Tu můžeme použít i pro vytvoření tlačítka a do smyčky událostí vložit odkaz na kód, který se provede po stisknutí tlačítka. Tento program může být ukryt v události (což je kód vyvolaný ze smyčky událostí příkazem DispatchMessage volající WinProc příkaz onclick - neřešte).

Vysokoúrovňové programy řeší pouze to, co se má provést po stisku tlačítka. Dobrý vysokoúrovňový programátor nepotřebuje vědět, jak fungují formulářové prvky: ví, že např. příkaz button zobrazí tlačítko, které se bude chovat podle očekávání.

Kompilátor a Interpret

Programovací jazyk je sada takovýchto příkazů, které jsou programy nižší úrovně (programy nejnižší úrovně ovládají přímo hardware a většinou jsou v EEPROM zařízení jako firmware). Příkazy vyšších úrovní jsou zadány jako vstup programu nazývaným kompilátor (a linker), který je přeloží do příkazů spustitelného kódu (nebo knihoven, má-li být program použit ve vyšším programu) pro příslušný hardware a operační systém. Této závislosti jsou zbaveny interpretované programovací jazyky: jejich programy nejsou překládány pro operační systém, ale vykonávány příkaz po příkazu v interpretu, což je program zkompilovaný pro příslušný operační systém. Daní za tuto jednoduchost je nižší rychlost.

Výběr jazyka a délka učení

Každý jazyk má svou specializaci: jeho syntaxe je účelově přizpůsobená snadnému popisu úkolů pro které byl vytvořen. Všechny jazyky mají společné rysy: nástroje pro rozděl a panuj, větvení a opakování kódu. Naučit se první jazyk trvá asi rok. Naučit se druhý trvá asi týden. Stát se expertem v nějaké specializaci trvá v průměru asi dva roky, musí vás to ale bavit, jinak to nejde.

Náš první programovací jazyk bude javascript. Je to velmi vysokoúrovňový jazyk umožňující psát formulářové aplikace několika příkazy. Je interpretovaný internetovým prohlížečem a obsahuje i příkazy pro manipulaci s HTML.

Možná nechcete být programátory

Nemusíte se stát experty v žádném jazyce, přesto má programování na člověka zpětný vliv, který byste si měli osvojit, chcete-li být moderním člověkem.

Po pádu středověku, kdy jediné povolené poznávání bylo zkoumání boha, dala doba vzniknout dvěma alternativním nápadům:

Anglický filosof David Hume obojí rozmetal na padrť. Přijde vám logické, že když se oteplí, sníh roztaje? Že každý má svého rodiče? Omyl. Je to jen vaše zkušenost nutící ke svazujícím předsudkům, pouhý zvyk, statistika: mezi vztahy není žádná poznatelná souvislost. Nevěříte?

Dobrá. Zkuste definovat cokoliv. Třeba ovoce. Nebo spravedlnost. Nebo počítač. Každé malé dítě s těmito pojmy běžně operuje, ale když se je pokoušíme důsledně definovat, dostáváme se do složitých abstraktních úvah, které jsou nejisté a nemají se zkušeností nic společného. Takto nelze vyjádřit nic absolutního, absolutně lze pouze věci vyvracet. Teplé není studené.

Programování učí lidi myslet. Nutí je vyjádřit myšlenku pomocí základních příkazů, o kterých neví, jak fungují, pouze věří, že fungují. A překladač jazyka vás upozorní vždy, když v tom vyjadřování uděláte chybu. Asi vás překvapí, kolik chyb zpočátku na každém kroku uděláte.

A stejné je to i s myšlením. Nevzdělaný člověk se vyjadřuje absolutně: Máš pravdu., Bude pršet.. Vzdělaný člověk ví, že nezná absolutní pravdu, a vyjadřuje se ve vztazích: Souhlasím s tvou úvahou., Mraky vypadají na déšť.. Pokud budete nějakou dobu programovat, získáte dovednosti k odhalení chyb ve vlastním myšlení, a tím i v hodnotách, v citech, v duši. Asi vás překvapí, jak moc to člověka změní.

Můžete se toho bát. Zavřít oči, zasmát se tomu, žít jako v Matrixu. Anebo můžete přijmout výzvu a poznat svět mnohem pestřejší než ve sci-fi thrillerech. Tak tedy: červenou nebo modrou pilulku?

 

Otázky