2.1 Počítání a abstrakce

Matematika dala světu řadu algoritmů, výpočetních postupů, které lze vzít a přímo použít na konkrétní, často velmi úzce zaměřený, problém. Za všechny uveďme třeba  rychlou Fourierovu transformaci (FFT, uplatnění při zpracování signálu, např. v  mp3 formátu),  Simplexový algoritmus (uplatnění v algoritmech strojového učení a optimalizačních úlohách), nebo kryptosystémy jako např.  RSA založené na teorii čísel, či kryptosystémy založené na  eliptických křivkách (ECC), atd. Další zajímavé příklady algoritmů může čtenář nalézt v článku (Cipra, b.r.).

Otázkou ovšem je, jestli lze při studiu IT matematiku zredukovat pouze na tento její výpočetní aspekt, tak jak se zpravidla děje na středních školách. Nejen dle autora tohoto textu není vhodné takovouto kastraci vysokoškolské matematiky provádět hned z několika důvodů. Pokusme se na tomto místě zmínit alespoň ty nejdůležitější.

Matematika je velmi úzce spjata s tzv.  vědeckou metodou poznání, o které lze bez velkého přehánění prohlásit, že tvoří základ naší civilizace. Častým lidským cílem je hledání hlubšího porozumění světa a řešení různých problémů. Matematika v této činnosti nehraje roli pouhého početního stroje. Přístup, který se ukázal jako extrémně plodný, spočívá v několika krocích. Nejprve je nutné problém analyzovat, rozebrat ho na důležité části a zkoumat jejich vztahy a chování. Typicky dojde k vytvoření matematického modelu, který (více či méně) dobře vystihuje náš problém. Následně se v rámci tohoto abstraktního modelu snažíme dobrat k závěrům a poznání původního problému, provádíme porovnání předpovědí modelu a reality pomocí experimentu. Jako jednoduchý příklad zmiňme Galileovo zkoumání padajících těles, jehož výsledkem byla jednoduchá a kompaktní matematická formulka popisující závislost výšky na čase daného tělesa.

Podobně abstraktně lze (a velmi často se tak děje) uvažovat nad programováním, tedy tvorbou programů řešících zadaný problém. Typicky je programátor postaven před reálný problém, který nejprve musí analyzovat a popsat. Navrhnout jeho řešení, rozmyslet si jak o problému uvažovat (vytvořit například podrobný objektový či databázový model; rozmyslet si jak problém popsat pomocí vhodných funkcí a metod, jaké vhodné datové struktury použít, atd.). Následně se pustí do implementace, řešení. Bez dobrého návrhu založeného na porozumění problému je nepravděpodobné, že by jeho řešení bylo kvalitní.

K tomu jak program logicky strukturovat – jak abstraktně uvažovat nad jednotlivými částmi kódu – slouží několik programovacích paradigmat, například

Není náhodou, že prakticky všechna uvedená paradigmata jsou úzce inspirována matematickým způsobem myšlení. Cílem těchto snažení je vnést do řešení daného problému řád a usnadnit tak jeho porozumění. Výše uvedená paradigmata představují různé abstraktní způsoby jak o modelech a algoritmech uvažovat a přemýšlet.

Dále je dobré si uvědomit, že některé praktické úlohy nemají efektivní řešení, tedy řešení ve středoškolském smyslu „proveď tyto početní úkony a toto podtrhni, je to tvůj výsledek“. To může být pro studenty čerstvě přicházející ze středních škol malý šok. Školní příklady jsou ovšem hodně speciální druh problémů často vybraných právě tak, aby měly hezké řešení. Neexistence efektivního řešení přesněji znamená neexistenci vhodného algoritmu, který by danou úlohu efektivně řešil. Opět lehce překvapivě, tento fakt nemusí být vždy na škodu, ba naopak může mít dobré využití, například v počítačové bezpečnosti, kde přesně takové problémy (jako například faktorizace přirozených čísel) hrají zásadní roli.

Příklad 2.1

Uvažme například úlohu rozhodnout o přirozeném čísle $n$ zda-li je prvočíslem či složeným číslem. Můžeme se snažit hledat faktory (netriviální dělitele) čísla $n$, to je ale těžká úloha. Na druhou stranu lze efektivně rozhodnout o neprvočíselnosti čísla $n$ aniž bychom jeho faktory znali. Na tomto pozorování je založen výše zmíněný kryptosystém  RSA.

Na závěr této abstraktněji laděné části textu si dovolme ještě jednu poznámku. Absolventi vysoké školy by měli zejména umět přemýšlet o tom, co, jak a proč dělají. Práce, kterou lze automatizovat, byla, je a bude prováděna více či méně nemyslícími stroji. Současný rozmach AI také ukazuje, že na důležitosti pro člověka získává právě schopnost abstrakce a širšího uchopení problému. Dále by měli absolventi mít chuť se učit a poznávat nové věci. U studentů a studentek IT toto platí několikanásobně, řádově několikanásobně. Nikdy nevíte, před jaký problém budete v budoucnu postaveni, ani nevíte, kam se za dobu vašeho studia posunou v oboru používané technologie a nástroje. Nejnovější JavaScript framework, který během vašeho studia může být horkou novinkou, bude v den vaší promoce beznadějně zastaralý. Matematika, jakožto systematický a logický způsob uvažování, vám v tomto snažení může jen pomoci.

Navíc je matematika krásná.