„Skúška. Nula jedna, nula jedna.” Aj pri testovaní mikrofónu skombinoval celoživotnú lásku k počítačovým vedám a svoj nezvyčajný zmysel pre humor.
Prednášková sála bola plná, väčšinou študentov IT, ktorí profesora Knutha poznajú ako autora legendárneho diela Umenie programovania. Knuth začal ságu písať v roku 1962 a pracuje na nej neúnavne dodnes.
Pri rozhovore s Donaldom Knuthom (81) si pripadáte, ako by ste čítali knihu. Nad každou otázkou sa zamyslí, aby vám dal presnú odpoveď. Je na ňom vidieť, že berie do úvahy svoje publikum a hľadá to najlepšie vysvetlenie a metafory.
Aj napriek pokročilému veku aktívne programuje, vymýšľa aj rieši hádanky a hľadá nové spôsoby, ako priblížiť informatiku ďalším generáciám študentov.
Po prednáške na Fakulte informatiky Masarykovej univerzity v Brne sme si s profesorom Knuthom sadli do tichého kúta hotelovej haly. Pôvodne na krátky rozhovor, ale nakoniec sme hovorili deväťdesiat minút.
Ak čitateľom bude nasledujúci článok pripadať príliš rozvláčny, znamená to len, že sa nám nepodarilo slová profesora Knutha sprostredkovať dostatočne verne.
Počas chvíle nás totiž preniesol naprieč časom aj priestorom až do začiatku päťdesiatych rokov. Do sveta filozofie poznania, jednotiek a núl, biblických symbolov, presných definícií a umelej inteligencie, uvádza Technet.cz.
Ako by ste definovali nekonečnú slučku?
To je zaujímavá otázka. K tomu sa ešte vrátime.
Keď vás na začiatku prednášky predstavovali, moderátor vaše životné úspechy a ceny uvádzal niekoľko minút. Ako by ste sa čitateľom predstavil vy sám?
Samozrejme by som mohol vymenovať, kde som študoval, ktoré knihy som napísal a takéto všeobecné veci. Ale môžem povedať niečo konkrétnejšie pre vaše publikum, a to že som hviezda. Alebo skôr planétka. Českí astronómovia objavili objekt s číslom 21656 a nazvali ho po mne Knuth. Samozrejme dúfam, že sa nikdy nezrazí so Zemou alebo tak niečo.
Niekedy ste označovaný za otca analýzy algoritmov. Ako počítače za posledných 70 rokov menili ľudskú civilizáciu?
Čo je to civilizácia? Povedzme, že je to všetko, čo sa nevyskytovalo v prírode, ale čo pridali alebo vynašli ľudia. Len v tejto hale si môžeme všimnúť stoviek rôznych výtvorov civilizácie. Svetiel, skla, aj to, že sedíme a sme oblečení, budovy samotné. Naša civilizácia je neuveriteľne zložitá; a bola zložitá už predtým, než sa objavili počítače.
Keď som bol vo vašom veku, boli počítače príšerne pomalé. Používam prirovnanie, že ide o rovnaký rozdiel, ako medzi slimákom a tryskovým lietadlom. A čo sa týka úložísk... Dvadsať rokov som programoval s menej ako megabajtom pamäte. Dnes môžete mať vo vrecku terabajt.
Veľa vecí bolo nepredstaviteľných - ani sme nevedeli, že by sme ich mohli chcieť - a dnes fungujú a sú bežné. Počítače sú úplne všade. Digitálne môžeme nasimulovať prakticky čokoľvek. Iste, digitálneho jedla sa nenajeme, ale je ťažké nájsť nejakú oblasť našej civilizácie, ktorú počítače nezmenili.
Pretože počítače sú všadeprítomné, máme problém, ktorý sme pred dvadsiatimi rokmi nemali. Dlhú dobu nás, počítačových vedcov, nikto nepočúval. Mám obavy, že teraz nás ľudia počúvajú až príliš a majú pocit, že vieme viac, než v skutočnosti vieme. Máme podľa nich vyriešiť úplne všetko.
Takmer každý odbor dnes využíva počítače. Dokonca aj hudobníci a básnici využívajú počítače. To dáva nám, počítačovým odborníkom, príliš veľkú zodpovednosť. Samozrejme, všetko by mohlo byť lepšie. A alebo tiež horšie.
Ohromné nebezpečenstvo predstavujú samostatné zbrane (ako napríklad vo filme Slaughterbots). Tisíce ľudí z môjho odboru, ma nevynímajúc, podpísali otvorený list, ktorý varuje pred týmto nebezpečenstvom autonómnych zbraní.
Počítače dokážu robiť veci rýchlejšie ako ľudia. Jeden program sa dá používať opakovane. Líši sa éra počítačov od tých predchádzajúcich predovšetkým v škálovaní, v akom meradle môžeme pracovať?
Nie, je to niečo viac. Keď tvoríme inštrukcie pre počítač, niečo mu vysvetľujeme. A aby sme to zvládli, musíme presne rozumieť, čo mu chceme vysvetliť. Keď budem niečo vysvetľovať vám, tak pokývnete hlavou a ja budem vedieť, že ste ma pochopili. Od počítača takú spätnú väzbu nedostanete. Počítač neprikývne. Musíte mu to vysvetliť dokonale.
Keď niekto vytvára softvér na navrhovanie budov, musím im rozumieť oveľa lepšie. Všetci, ktorí sa na tom podieľajú, sa naučia veľa nového. Každý, kto robí počítačové programy, musí presne rozumieť tomu, ako veci fungujú.
A samozrejme, ak vývojár urobí chybu, tak ju počítače budú bez premýšľania neustále opakovať.
Presne o to ide. Našu civilizáciu tvoria miliardy vecí. Všetko nemôžeme urobiť bezchybne. Ale ak si uvedomíte, čo všetko by sa mohlo pokaziť, tak si nevedieme až tak zle. Vďaka počítačom sme si trochu lepšie uvedomili dôležitosť kontextu a meradlo, v ktorom sa pohybujeme.
Boli si prví programátori a informatici vedomí toho, aký dopad budú počítače mať?
Na začiatku 60. rokov mi George Forsythe (zakladateľ fakulty informatiky na Stanforde, pozn. red.) povedal, že najdôležitejšie na programovaní je, ako nás vzdeláva. Čo nás počítače učia, keď ich používame. Nie to, čo pre nás robia, ale čo nás učia.
Až potom som zistil, že to tak bolo od začiatku. Keď firma Remington v 50. rokoch postavila svoj prvý počítač UNIVAC, bol to v podstate prvý počítač, ktorý nestál na vojenskom či vedeckom pracovisku.
Prvý UNIVAC mal asi štyroch zákazníkov. Poisťovacie spoločnosti, americký Úrad pre sčítanie ľudu a armádu. Ďalším bola spoločnosť Nielsen. Neskôr ich preslávil systém zisťovania televíznej sledovanosti. Ale v 50. rokoch mal Arthur Nielsen spoločnosť, ktorá sa pokúšala analyzovať rôzne aspekty prevádzky firmy. Nielsen mal predstavivosť a napadlo mu, hm, možno by som mohol využiť počítač.
Takže taký priekopník veľkých dát.
Áno. Potom ľudia od UNIVAC prišli a študovali Nielsenovu firmu, aby zistili, ako by im počítač mohol pomôcť. A vďaka tomu Nielsen zistil, ako by mohol viesť firmu efektívnejšie. Aj bez počítača. Stačilo, že bol donútený premýšľať, ako využiť počítač, aby lepšie pochopil, ako jeho spoločnosť funguje.
Počítače nás nútia vyjadrovať sa tak, aby nebol možný žiaden iný výklad.
Áno, úplne a jednoznačne. Videl som to už veľakrát. Počítače ľudí, ktorí ich používajú, premieňajú.
Väčšina ľudí programovaniu nerozumie. Ale takmer všetko je - tak či onak - závislé na počítačovom kóde. Nekoledujeme si o katastrofu? Akú cenu platíme za to, že ľudia úplne nerozumejú informatike?
Nechcem tu naznačovať, že iné vedecké odbory nie sú dôležité. Myslím si, naopak, že biológia je oveľa dôležitejšia. Ale v každom prípade nemôžeme čakať, že by sto percent ľudí rozumelo počítačovej vede. Vive la Difference. Rôznorodosť je dobrá. Rôzni ľudia rozumejú rôznym aspektom sveta viac ako ostatní. Vedomosti a znalosti nemajú len jeden rozmer.
A veda sa teraz na školách učí viac ako v minulosti. Ľudia sa ma pýtajú, ako majú učiť programovanie. To je ťažké, pretože väčšina učiteľov sama neprogramuje. Ale aj keby o programovaní viac vedeli, nebudú si s ním rozumieť. Možno tak jeden človek z päťdesiatich v programovaní nájde sám seba.
Len niekto skutočne pochopí, ako to funguje pod kapotou...
Takým ľuďom to príde prirodzené. Poďme tým ľuďom hovoriť počítačoví geekovia. Ja som sa zrejme ako taký geek narodil. Mojím cieľom nie je zmeniť celý svet na geekov. Snažím sa písať knihy, z ktorých môžu niečo naučiť práve geekov.
Čo majú negeekovia robiť?
Negeekovia, skamaráťte sa s nejakým geekom! (smiech) Tak lepšie pochopíte, čo geekovia robia, a geekovia zase lepšie pochopia, čo robia negeekovia. Pracoval som na jednom projekte s grafickými návrhármi a programátormi. Všetci si vážili všetkých ostatných, boli sme v rovnakej miestnosti a veľa sme sa toho od seba vzájomne naučili.
Spomeňte si na spoločnosti typu Pixar. Keď idete po ich budove, narazíte na ľudí sa veľa rôznych zručností. Nikto sa nad ostatných nepovyšuje, všetci prispievajú svojím dielom.
Napísali ste knihu Veci, o ktorých informatici zvyčajne nehovoria. Vysvetľovali ste v nej svoju osobnú kresťanskú vieru. Pre niekoho môže byť prekvapivé, že odborník na počítače verí v Boha.
Ja si uvedomujem, že som nábožensky založený aj preto, že som sa narodil, kde som sa narodil. Keby som bol z Indie alebo Japonska, bol by som iný. Ale osobne verím, že Boh existuje. Vďakabohu však neexistuje spôsob, ako to dokázať.
Nemám čarovný dôkaz božej existencie. Veľa ľudí hovorí, že oni áno, ale ja ho nepoznám. Keby existoval, nebolo by čo hľadať, čo odhaľovať, bolo by to smiešne jednoduché.
Vážim si to, že niektorým veciam nerozumiem a nikdy nebudem. Keby všetko v živote bolo jasné, jednoduché a jednoznačné, mal by som pocit, že v ňom niečo chýba. A keby bol môj život naopak plný tajomstiev, trpel by som hroznou neistotou. Som preto vďačný za to, že viem, že 1 + 1 = 2, aj za všetky ostatné matematické istoty, s ktorých pomocou môžem všeličo exaktne dokázať. Tajomstvo ma zase učí pokore, vďaka nemu nečakám, že pochopím úplne všetko.
Vo svojich prednáškach zdôrazňujem, že by ľudia nemali niečomu veriť len preto, že niekto šikovný povedal: takto to je. Ale myslím, že sú to dôležité otázky, o ktorých by ľudia mali premýšľať. Nemali by voči nim byť apatickí.
Vy ste do Brna prišli uviesť svoju hudobnú skladbu, ktorá je tiež duchovná.
Je založená na jednej z kníh Biblie. Pokúsil som sa urobiť niečo nové a snáď som uspel. Grécky text knihy Zjavenia som prakticky doslova prepísal do hudby.
Kniha Zjavenie je zo všetkých častí Biblie najmystickejšia. Dospel som k záveru, že je tajomná zámerne. Nemá dávať odpovede, ale vzbudzovať otázky. Je v nej veľa čísel, veľa symbolov. Často sa používa trojka ako symbol Boha, štvorka ako symbol sveta, sedmička odkazuje na vzťah medzi Bohom a svetom.
Starostlivo som knihu prešiel a našiel viac než stovku symbolov. Založil som skladbu na rovnakom súbore symbolov, ale tiež som sa pokúšal komponovať dobrú hudbu, takú, ktorú si môžete pospevovať. Trvá deväťdesiat minút a počas nich na obrazovke ukazujeme slová a symboly, ktoré sa objavujú v tej ktorej časti skladby.
Je komponovanie hudby podobné písaniu počítačového kódu?
Ó, to je neuveriteľné podobné. Síce nepoužívate rovnaký typ zápisu, ale spoločného to má veľa. Pracujete so schémami a snažíte sa prísť na to, čo poslucháč očakáva, alebo neočakáva. Musíte postupovať systematicky. No, možno nie nevyhnutne, niektorí skladatelia nie sú príliš systematickí.
Ja som si do zápisu poznamenával, na čo som v danú chvíľu myslel. Pretože som vedel, že si to neskôr nebudem pamätať.
Ako osmák ste vyhrali súťaž "Ziegler 's Giant Bar". Úlohou bolo odhadnúť, koľko slov je možné s pomocou písmen v tomto názve vytvoriť. Vy ste namiesto toho zostavili kompletný zoznam 4 500 slov, ktoré išlo vytvoriť, čo bolo takmer dvakrát viac, než koľko slov našla porota. Ako ste na to šli?
Popisujem to v jednej svojej knihe (Vybrané práce o zábave a hrách), dobre si to pamätám. Predstieral som, že mám bolesti brucha, aby som nemusel chodiť do školy a mohol dva týždne zostať doma.
Videl som v knižnici pár veľkých slovníkov a otec mal doma úplné, neskrátené vydanie anglického slovníka. Prešiel som systematicky všetky možné slová. Mal som po ruke kartičku s abecedným zoznamom písmen, ktoré som mohol použiť, ich počty som si ale samozrejme aj pamätal. Takže som mohol stránky prechádzať celkom rýchlo a vynechávať stránky, na ktorých neboli slová s inými písmenami.
To, čo počítač mohol urobiť za pár sekúnd, ste robili dva týždne. Ale rovnako ste úlohu riešili s pomocou určitého algoritmu. Vymysleli ste, ako úlohu vyriešiť kompletne.
Musel som mať istotu, že nič neprehliadnem. V každý okamih som vedel, aký priestor mám ešte pred sebou, ktoré slová už som zvážil a ktoré nie.
Nie všetci programátori sú takí svedomití a rozvážni. Čo si myslíte o využití metódy pokus omyl, kedy programátori skúša pozliepať rôzne kusy kódu a experimentujú, kým to zrazu nezačne fungovať?
Ak to preháňate, je to zlý prístup. Je to ako keď sa opice snažia napísať Shakespeara búšením do klávesnice. Na druhú stranu, keď niečo robíte, je chybou očakávať, že sa vám to podarí na prvýkrát. Je lepšie začať niečím, čo môžete v prípade neúspechu zahodiť.
Ale neskúšajte veci naslepo. Snažte sa zabudnúť na to, že môžete svoju prácu zahodiť. Snažte sa premýšľať systematicky. Ak budete len náhodne experimentovať, vždy budete musieť začínať znovu od nuly. Mali by ste sa snažiť odviesť vždy čo najlepšiu prácu, aj keď viete, že na prvýkrát to nebude ono.
Všeobecne povedané je experimentovanie, metóda pokus omyl, dobéá. Ale vždy sa musíte snažiť odviesť čo možno najlepšiu prácu.
Veľa ste toho napísali o dokumentovanom programovaní (LiteRAM programming). Programátori by podľa vás mali písať kód nie len tak, aby fungoval, ale aj zrozumiteľne pre ostatných ľudí.
A tiež to znamená, že sa vo svojom kóde vyznáte, aj keď ho budete čítať po mesiaci. Nepremýšľajte o programovaní ako o pokynoch pre kompilátor. Predstavte si, že hovoríte s ľudskou bytosťou. Zlepší sa tým aj vaše porozumenie tomu, čo práve programujete.
Ako profesor viem, aké to je hovoriť k triede plnej študentov. Takže keď programujem, predstavujem si, že ten program vysvetľujem celej triede. Preto do kódu pridávam aj komentáre vysvetľujúce, prečo som niečo neurobil tak, ako ma to najprv napadlo. Snažím sa zahrnúť svoj myšlienkový proces.
Väčšina programátorov nedáva do kódu komentáre, ktoré by vysvetlili zložitú časť kódu. To potom taký kód činí ťažko čitateľný. Tento princíp sa netýka len programovania. Všeobecne sa hodí, keď niečo vysvetľujete, povedať to formálne aj neformálne.
Keď niečo ľuďom vysvetľujeme, tiež rozlišujeme, na čom záleží, čo sa musí urobiť presne podľa našich pokynov a kde naopak nie je presný postup až tak podstatný.
Neformálne poviete "a teraz som došiel na koniec tabuľky". Formálne by ste to zistili podmienkou "KEĎ (i> n)". Keď programujem, dávam tam vždy oboje. Tie dve veci sa navzájom podporujú a dopĺňajú. Zdokumentované programovanie kombinuje prirodzený a programovací jazyk.
O čo prichádza niekto, kto nikdy neprogramoval, kto neovláda žiadny programovací jazyk?
Taký človek si nevyskúšal, čo to znamená, keď musíte niečo povedať úplne presne a jednoznačne. V 60. rokoch bežal v USA seriál, v ktorom vystupovala robotická sekretárka. Pre niektorých ľudí bolo neuveriteľné, že počítač nerozumie kontextu a namiesto toho urobí presne to, čo mu poviete. Takto totiž ľudia nefungujú. Tá postava - veľmi atraktívna mladá dáma - bola robot a ľudia okolo nej sa museli naučiť vyjadrovať precízne, nie len približne.
Čím sa programovanie líši od akejkoľvek inej ľudskej činnosti?
Programovanie znamená, že musíte všetko rozdeliť do krokov a vysvetliť tak, aby to nebolo možné vykladať inak, než chcete. Iste, dá sa vymyslieť nejaký menej exaktný programovací jazyk... Ale podstata programovania je jedinečná. Musíte byť dokonale konkrétni, dokonale jednoznační. To vás donúti premýšľať o tom, čo sa skutočne deje a čo by sa mohlo stať. Musíte zvážiť akýkoľvek scenár. Počítač nemá sám o sebe žiadny úsudok.
Bez toho aby sme si to uvedomovali, algoritmy riadia skoro všetko okolo nás. Rozhodujú o tom, či dostaneme pôžičku, udeľujú pokuty za rýchlosť a parkovanie, vyhľadávajú dopravné spojenie. Čo by o algoritmoch mali vedieť úplne všetci, nielen programátori?
Viem, čo sú algoritmy zač. Zasvätil som im veľkú časť svojho života. A tak ich viem využívať. Keď vidím akýkoľvek systém alebo rozhodovací proces, premýšľam, ako by mohol vyzerať algoritmus, ktorý za ním stojí. Ako funguje predikcia na mojej klávesnici? Môžem sa vďaka tomu viac dozvedieť o tom, ako to funguje, môžem si predstavovať, čo všetko by som musel počítaču vysvetliť, aby to fungovalo.
Pomocou algoritmov môžem analyzovať hudbu. Ľudia vždy mohli analyzovať povedzme harmóniu akordov. Ale tým, že som musel harmóniu exaktne a systematicky vysvetliť počítačovému algoritmu, mi umožnilo pochopiť hudobné zákonitosti lepšie ako predtým.
Čo by ste povedal človeku, ktorý chce začať s programovaním?
Ak môžete začať s nejakým zábavným systémom, ktorý bude vykonávať jednoduché príkazy, tak to na začiatok nie je nikdy zlé. Naučí vás to doslovnosti. Ako dávať presné inštrukcie, až do tých najmenších detailov. Hovoriť presne, úplne presne, čo sa má diať. To je programovanie.
Preslávili ste sa matematickou analýzou algoritmov. Ale s tým, ako sa počítače zrýchľujú, už pre mnoho programátorov nie je dôležité, či niečo bude trvať milisekundu alebo desať milisekúnd.
Keď musíte niečo robiť bilionkrát, počíta sa každá nanosekunda.
Máte rád hlavolamy a svojich čitateľov nimi často zásobujete. Máte nejakú hádanku pre našich čitateľov?
Dobre, skúsim si na nejakú spomenúť. Táto je celkom jednoduchá: V ktorom meste je veľkosť XL menšia ako veľkosť L?
A odpoveď je...?
V Ríme. Podľa rímskych číslic je XL = 40 a L = 50.
Veľa sa v posledných rokoch hovorí o umelej inteligencii a strojovom učení. Pamätáte si, kedy ste tieto pojmy prvýkrát počuli?
Strojové učenie prišlo oveľa neskôr. Ale umelá inteligencia bola jedným z dôležitých tém informatiky od doby, kedy som bol na strednej škole. Prvýkrát som ten pojem počul na vysokej škole. Snaha pochopiť, ako ľudský mozog funguje, to bolo jedno z odvetví, ktoré inšpirovalo ľudí k posúvaniu hraníc výkonu počítačov.
Pamätám si, ako som s počítačom prehral veľa šachových partií. V Santa Monice bola počítačová výstava. Počítač ma tam porazil v šachu a potom zaspieval oslavnú pieseň. To pre mňa bolo nezabudnuteľné.
Výskum umelej inteligencie prešiel mnohými rôznymi fázami. Najprv bolo cieľom pomocou počítača zistiť, ako funguje ľudský mozog. Ale potom si niektorí odborníci povedali, že vlastne nemusíme riešiť problémy tak, ako ich riešia ľudia. Nemusíme napodobňovať ľudský mozog. Strojové učenie je nový druh mozgu, hľadá nové prístupy a možnosti.
Dnes máme umelé neurónové siete, ktoré fungujú výborne, ale nedokážeme povedať, ako budú fungovať v budúcnosti, pretože často nevieme, ako presne fungujú. Ale pretože sa zdá, že fungujú, tak v tieto systémy vkladáme svoju dôveru. Keď ale nepoznáme ich obmedzenia, vzďaľujeme sa systému, ktorému možno plne dôverovať.
Ľudia múdrejší ako ja - napríklad Stuart Russel - na to tiež upozorňujú. Povedzme, že algoritmus používajúci strojové učenie vyrieši nejakú dôležitú matematickú záhadu, napríklad slávny P = NP problém. Mohli by sme skonštruovať nejakú ohromnú neurónovú sieť, ktorá nejakým spôsobom dôjde do stavu, že problém označí za vyriešený. Ale nebudeme vedieť, ako to riešenie vzniklo, lebo nám to tá sieť nedokáže vysvetliť.
Vzhľadom k tomu, že strojové učenie asi bude hrať čoraz väčšiu úlohu v našej civilizácii, čo by mali rodičia učiť svoje deti o strojovom učení, algoritmoch a umelej inteligencii?
Ľudia by mali chápať, aké limity má strojové učenie a z čoho tieto obmedzenia vychádzajú. Môžete začať s príkladmi, ktoré možno nie sú pre váš život až také dôležité, ale sú ľahko pochopiteľné. Môžete vytvoriť malú jednoúčelovú neurónovú sieť a natrénovať ju pre nejakú jednoduchú úlohu. Napríklad niečo smiešne, ako rozpoznávanie koní od hyen.
Učiť deti je vlastne v niečom podobné trénovať neurónovú sieť, že?
U nás doma sme mali okrem malých detí i mačky. A mačky boli múdrejšie ako naše malé deti. A potom zrazu neboli. Zčistajasna už neboli najchytrejšie. Bolo to nesmierne zaujímavé.
A nakoniec, ako by ste definovali nekonečnú slučku?
Ale to už sme predsa prebrali.