Dominik Farhan

Naučte se programovat za deset let

Peter Norvig

Originální esej v angličtině najdete zde.

Proč všichni tak spěchají?

Navštivte jakékoliv knihkupectví a najdete Naučte se Javu za 24 hodin a další nespočet variací nabízejících, že Vás naučí C, SQL, Ruby, algoritmy atd. během pár dní či hodin. Pokročilé vyhledávání na Amazonu ve formě [název: naučte, se, hodin, od roku: 2000 ] našlo takových knih 512. Z top deseti jich 9 bylo o programování (ta desátá je o účetnictví). Podobné výsledky se objevily i po nahrazení „naučte se“ slovem „ovládněte“ nebo „hodiny“ za „dny“.

Závěrem je, že buď lidé při učení se programování velmi chvátají, anebo se programování nějakým zázrakem učí mnohem jednodušeji než cokoliv jiného. Felleisen et al. s tímto trendem v jejich knize How To Design Programs (česky Jak navrhovat programy) souhlasí, když tvrdí „Špatné programování je jednoduché. Idioti se ho můžou naučit během 21 dnů, i pokud to jsou troubové“. Svůj pohled nabízí i komiks Abtruse Goose.

Pojďme si zanalyzovat, co by mohl znamenat například titul Naučte se C++ za 24 hodin:

Naučte se programovat za deset let

Vědci (Bloom (1985), Bryan & Harter (1899), Hayes (1989) , Simmon & Chase (1973)) prokázali, že v jakémkoliv z široké škály oborů se stát expertem zabere deset let, a to včetně hraní šachů, skládání hudby, ovládání telegrafu, malby, hry na piano, plavání, hraní tenisu i výzkumu v oblastech neuropsychologie a topologie. Klíčem je uvědomělé trénování: nejenom to opakovat znovu a znovu, ale připravovat si výzvy o krok před vašimi schopnostmi, zkoušet to, porovnávat svůj výkon během a po plnění úkolu a opravovat jakékoliv chyby. Pak to zopakujte. A zase zopakujte. Nezdá se, že by se to dalo nějak obejít: dokonce i Mozart, který byl ve čtyřech letech hudebním géniem, potřeboval dalších 13 let, než začal produkovat hudbu světové úrovně. V jiném žánru to vypadalo, že Beatles vpálili na scénu se sérií hitů a vystoupením v Show Eda Sullivana v roce 1964. Ale už od roku 1957 hráli v malých klubech v Liverpoolu a Hamburku, a i když masový obdiv získali brzy, až roku 1967 zaznamenali první zlomový úspěch, Sgt. Peppers.

Malcolm Gladwell tuto myšlenku zpopularizoval, i když se soustředí na 10 000 hodin spíš než na 10 let. Henri Cartier-Bresson (1908-2004) měl jiné měřítko: „Vašich prvních 10 000 fotografií je těch nejhorších.“ (To nespojoval s digitálními fotoaparáty, někteří lidé tuto hranici překonají za týden.) Pravá odbornost může zabrat celý život. Samuel Johnson (1709-1784) řekl „Dokonalé ovládnutí jakéhokoliv oboru může být dosaženo pouze celoživotní prací; nemělo by přijít za nižší cenu.“ A Chaucer (1340-1400) si stěžoval „tak krátký život, tak zdlouhavé řemeslo na naučení.“ Hippokratés (asi 400 př. n. l.) je znám pro výňatek „Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicum difficle“, což se do češtiny překládá jako „Život je krátký, řemeslo dlouhé, příležitost prchavá, pokus zrádný, posuzování těžké“ Samozřejmě, že žádné číslo nemůže být definitivní odpovědí: není rozumné předpokládat, že všechny dovednosti (např. programování, hraní šachu, hraní dámy, hraní hudby) mohou obnášet na chlup stejné množství času. Jak dodává prof. K. Anders Ericsson „Ve většině oblastí je pozoruhodné, kolik času potřebují i ti nejnadanější jednotlivci k jejich nejlepšímu výkonu. Číslo 10 000 hodin jen ukazuje, že se bavíme o letech s deseti až dvaceti hodinami týdně, které tito, o kterých by se někteří hádali, že jsou od přírody nejvíc talentovaní, stále potřebují, aby se dostali na nejvyšší úroveň.

Tak vy chcete být programátorem

Tady je můj recept na úspěch v programování:

S tím vším na mysli je diskutabilní, jak daleko se můžete dostat pouze čtením knihy. Předtím, než se narodilo mé první dítě, jsem přečetl všechny Jak na to knihy a stejně se cítil jako nic netušící nováček. O 30 měsíců později, kdy přišlo mé druhé dítě, vrátil jsem se k těm knihám pro osvěžení paměti? Ne. Místo toho jsem se spoléhal na svou osobní zkušenost, což se ukázalo být mnohem víc užitečné a ujišťující než tisíce stran napsaných experty.

Ve své eseji No Silver Bullet (česky Žádné zázračné řešení) vyčlenil Fred Brooks plán o třech krocích, jak najít výborné softwarové designery:

  1. Co nejdřív systematicky rozpoznejte nejlepší designery.

  2. Přidělte kariérního mentora odpovědného za vývoj této „šance“ a opatrně si zachovejte kariérní spis.

  3. Poskytujte rostoucím designérům možnosti, aby společně interagovali a ovlivňovali se.

Tento plán předpokládá, že někteří lidé už mají kvality potřebné k tomu být skvělý designér; úkolem je, správně je nasměrovat. Alan Perlis to konstatoval stručněji: „Každý se může naučit dělat sochy, Michelangelo by se ale musel učit, jak je nedělat. Tak je to i s velkými programátory“. Perlis říká, že velikáni mají jistou vnitřní kvalitu, která přesahuje jejich trénink. Ale kde se tahle kvalita bere? Je vrozená? Nebo ji vyvíjí jejich píle? Jak říká Auguste Gusteau (fiktivní šéfkuchař z Ratatouille), „vařit může každý, ale jen odvážní vaří skvěle“. Já nad tím uvažuji spíše jako nad ochotou zasvětit velkou porci života uvědomělému tréninku. Ale možná, že slovo odvážný je způsob, jak to shrnout. Anebo jak říká Gusteaův kritik Anton Ego „Ne každý se může stát velkým umělcem, avšak velký umělec může vzejít odkudkoliv.“

Tak jen do toho, kupte si tu knihu o Javě/Ruby/Javasriptu/PHP; nejspíš Vám něco dá. Ale nezměníte svůj život, anebo Vaši celkovou odbornost programátora za 24 hodin nebo 21 dnů. Co takhle tvrdě pracovat, abyste se postupně zlepšili za 24 měsíců? No, teď už se někam dostáváte…

Reference

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullet, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Bryan, W.L. & Harter, N. "Studies on the telegraphic language: The acquisition of a hierarchy of habits.  Psychology Review, 1899, 8, 345-375

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4, 55-81.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

Odpovědi

Přibližná délka různých instrukcí na klasickém počítači.

provést běžnou instrukci1/1,000,000,000 s = 1 nanosekunda
číst z L1 cache0,5 nanosekundy
nesprávná předpověď větve5 nanosekund
číst z L2 cache7 nanosekund
lock/unlock mutexu25 nanosekund
číst z operační paměti100 nanosekund
poslat 2K bajtů přes 1Gpbs síť20 000 nanosekund
Přečíst sekvenčně 1MB paměti250 000 nanosekund
číst z nové lokace na disku (seek)8 000 000 nanosekund
Přečíst sekvenčně 1MB z disku20 000 000 nanosekund
Poslat paket z USA do Evropy a zpět150 milisekund = 150 000 000 nanosekund

Dodatek: Výběr jazyka

Několik lidí se zeptalo, jaký jazyk by se měli učit jako první. Není žádná definitivní odpověď, ale zvažte tyto body:

S přihlédnutím k těmto kritériím by byla má doporučení pro první programovací jazyk Python nebo Scheme. Další volbou je Javascript, ne proto, že je perfektně navržen pro začátečníky, ale protože k němu je plno online tutoriálů, třeba na Khan Academy. Ale Vaše podmínky se mohou lišit a je plno dobrých voleb. Pokud má Váš věk jednu číslici, mohli byste preferovat Alice nebo Squeak nebo Blockly (to si možná užijí i starší učenci). Důležité je, že si vyberete a začnete.

Dodatek: Knihy a další zdroje

Několik lidí se zeptalo, z jakých knih a webů by se měli učit. Opakuji, že samotné učení z knih nebude stačit, ale mohu doporučit následující:

Poznámky

T. Capey poukazuje na to, že stránka Complete Problem Solver (Kompletní řešitel problémů) na Amazonu má teď knihy „Naučte se Bengálsky za 21 dnů“ a „Naučte se gramatiku a styl“ pod záložkou „Zákazníci, kteří zakoupili tuto položku, také koupili tyto položky.“ Hádám, že velká porce lidí, kteří se na tu knihu dívají, pochází z této stránky. Díky Rossu Cohenovi za pomoc s Hippokratem.

Peter Norvig (Copyright 2001)

Přeložila Barbora Prošková.

Poznámka k odkazům

Při překladu jsme nahradili několik rozbitých odkazů novými. Zde je seznam upravených odkazů

Původní odkazy je možno najít v originále.

Note regarding links

During translation, we updated a few links that were broken. Here is a list of the updated links

You can find the old links in the original essay.