Překlad článku Teach Yourself Programming in Ten Years známého počítačového vědce Petera Norviga

Poznámka překladatele

Není to tak dávno, co jsem se zamýšlel nad nesmyslností názvů knih slibujících naučit vás (nejen) programovací jazyk za několik málo dní. A předevčírem jsem shodou okolností narazil na článek Teach Yourself Programming in Ten Years, který napsal známý počítačový vědec Peter Norvig, který nyní působí jako Director of Research u společnosti Google (dříve pracoval například v NASA). Více o Norvigovi se můžete dovědět z Wikipedie nebo jeho osobních stránek. Jeho článek mě tak zaujal, že jsem se ho rozhodl přeložit. Originální verzi článku najdete zde. Překlad mi trval jeden večer, takže pokud naleznete chybu či “nečeskou” formulaci, dejte mi vědět v komentářích.

Proč všichni tak spěchají?

Běžte do jakéhokoliv knihkupectví a z regálů se na vás bude smát titul Naučte se programovat v Javě za 7 dní spolu s nekonečným množstvím variant typu Naučte se Visual basic, Windows, Internet… za několik málo dní či hodin. Tuto frázi jsem zadal do rozšířeného vyhledávání na Amazon.com: pubdate: after 1992 and title: days and (title: learn or title: teach yourself) Dostal jsem 248 výsledků. Prvních 78 byly knihy o počítačích (kniha číslo 79 byla Naučte se bengálsky za 30 dní). Nahradil jsem slovo “days” za “hours” a dostal jsem pozoruhodně podobný výsledek: 253 dalších knih. Z toho 77 o počítačích následovaných knihou Naučte se pravopis a styl za 24 hodin na místě 78. Důvodem může být, že lidé velmi spěchají na to, aby se něco o počítačích naučili, anebo jsou počítače nějakým způsobem zázračně lehké na naučení se, snadnějsí než cokoliv jiného. Zajímavé je, že nejsou žádné knihy popisující jak se naučit Beethovena, kvantovou fyziku či dokonce šlechtění psů během několika dnů. Pojďme podrobněji analyzovat, co může titul jako Naučte se Pascal za 3 dny znamenat:
    • Naučte se: Za tři dny nebudete mít čas napsat si několik větších programů a tím se poučit z vlasních úspěchu a nezdarů. Nebudete mít čas na spolupráci se zkušenými programátory a nepoznáte, jaké to je žít v jejich prostředí. Jednoduše nebudete mít dost času na to, abyste se toho naučili dost. Takže název může popisovat pouze povrchní povědomost a ne hluboké porozumění. Jak řekl Alexander Pope, učit se povrchně je nebezpečná věc.
    • Pascal: Za tři dny se můžete naučit leda tak syntaxi Pascalu (za předpokladu, že již podobný jazyk znáte), ale nestihnete se však již naučit, jak tuto syntaxi použít. Řekněme, že jsi byl Basic programátor. V tom případě se naučíte psát programy ve stylu Basicu s tím, že použijete syntaxi Pascalu a nenaučíte se tak na co je (a není) Pascal vhodný. Tak o co jde? Alan Perlis jednou řekl: “Jazyk, který neovlivní způsob, jakým nahlížíte na programování, nestojí za to se učit.” Jeden možný pohled na věc je, že se naučíte naprostý základ Pascalu (nebo spíše “něčeho jako” Visual basic nebo JavaScript), protože potřebujete používat určitý nástroj k tomu, abyste dokončili specifický úkol. Tím se však pouze učíte jak dokončit úkol a ne jak programovat.
  • za tři dny: To bohužel není dost, jak ukazují následující sekce.

Naučte se programovat v deseti letech

Vědci (Bloom (1985), Bryan & Harter (1985), Hayes (1989), Simmon & Chase (1973)) zjistili, že to než se člověk stane expertem v jakékoli oblasti, zahrnující hraní šachů, skládání hudby, provozování telegrafu, malování, hraní na piano, plavání, tenis či výzkum v neuropsychologii nebo topologii, zabere okolo deseti let. A nevypadá to, že by existovaly i nějaké zkratky: dokonce i Mozartovi, jenž byl hudebním zázrakem již ve čtyřech letech, zabralo dalších třináct let, než začal skládat hudbu světové úrovně. Na druhou stranu Beatles vypadají, že skočili na scénu hned svými number one hity v show Eda Sullivana v roce 1964. Avšak i oni začínali v malých klubech v Liverpoolu a Hamburgu už od roku 1957. A přestože se později stali velmi známými, jejich první velký úspěch, Sgt. Peppers, který sklidil kladnou kritiku, pochází až z roku 1967. Samuel Johnson (1709 – 1784) předpokládal, že to může trvat ještě déle než deset let: “Dokonalost v jakékoliv oblasti může být dosažena pouze celoživotní prací. Za nižší cenu ji nepořídíte.” Chaucer (1340 – 1400) si stěžoval: “Život je tak krátký a řemeslo zdlouhavé na vypílení”. Hippokratés je známý svým výrokem “Ars longa, vita brevis”, což je úryvek delší citace “Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, což lze přeložit jako “Život je krátký, řemeslo dlouhé, příležitost pomíjivá, pokus zrádný, úsudek složitý.” V latině může “ars” znamenat buď umění nebo řemeslo. V původní řečtině slovo “techne” znamená pouze řemeslo, ne umění. Zde je můj recept, jak se stát dobrým programátorem:
    • Zajímejte se o programování a programujte, protože vás to baví. A přesvědčte se, že vás to bude bavit i za deset let.
    • Mluvte s ostatními programátory, čtěte jejich programy. To vám dá mnohem více než čtení jakékoliv knihy či programátorský kurz.
    • Programujte. Nejlepší způsob jak se něco naučit je tak, že to děláte (learning by doing). Technicky řečeno “Maximální úroveň poznání jednotlivce v dané oblasti není dosažena automaticky dlouhou praxí, avšak tato úroveň může být zvýšena velmi zkušenými jednotlivci jako výsledek promyšleného úsilí.” (s. 366) a “nejefektivnější učení vyžaduje dobře formulovanou úlohu přiměřené obtížnosti pro konkrétního jednotlivce, informativní zpětnou vazbu a příležitosti k opakování a opravě chyb.” (s. 20-21) Kniha Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life je z tohoto hlediska zajímavou referencí.
    • Pokud chcete, můžete strávit tři roky na Univerzitě (a ještě další roky v navazujícím studiu). To vám umožní přístup k pracím vyžadujícím vysokoškolský titul a také vám to poskytne hlubší znalosti dané oblasti. Pokud však nemáte školu rádi, můžete (s jistým odhodláním) získat stejné zkušenosti v praxi. V každém případě pouhé čtení knihy není dostačující. “Vzdělání v počítačových vědách tě neudělá zkušeným programátorem o nic víc, než tě studium štětců a barviv učiní vynikajícím malířem”, výrok Erica Raymonda, autora The New Hacker’s Dictionary. Jeden z nejlepších programátorů, jakého jsem kdy poznal, měl pouze střední školu, napsal množství skvělého softwaru, má své vlastní news group a na stock options vydělal dost na to, aby si si pořídil vlastní noční podnik.
    • Pracuj na projektu s dalšími programátory. V některém projektu buď ten nejlepší, v některých ten nejhorší. Tím, že jsi nejlepší, otestuješ své schopnosti vedení projektu a svou vizí inspiruješ ostatní. Když jsi nejhorší, naučíš se, co mistři dělají a naučíš se, co rádi nedělají (tak, že tuto práci nechají na tobě).
    • Pracuj na projektu po jiných programátorech. Naučíš se tak pochopit programy napsané někým jiným a uvidíš, kolik práce dá opravit program bez učásti původních programátorů. Mysli na to, jak navrhnout své programy co nejlépe, aby byly co nejjednodušší pro ty, co přijdou po tobě.
    • Nauč se alespoň půl tuctu programovacích jazyků. Z toho jeden jazyk podporující abstrakci tříd (jako Java nebo C++), jeden podporující funkcionální abstrakci (jako Lisp nebo ML), jeden podporující syntaktickou abstrakci (jako Lisp), jeden podporující deklarativní specifikace (jako Prolog nebo C++ Templates), jeden podporující korutiny (jako Icon nebo Scheme) a jeden podporující paralelismus (jako Sisal).
    • Pamatuj, že je zde “počítač” v “počítačových vědách”. Měl bys vědět, jak rychle trvá tvému počítači vykonat instrukci, načíst slovo z paměti (s a bez cache zásahu), číst posloupnost bytů z disku a vyhledat na něm novou lokaci. (Odpovědi najdete v původním článku).
    • Zapoj se do procesu standardizace jazyka. Může to být výbor ANSI C++ či rozhodování, zda tvůj styl programovaní bude mít odsazení o dvě nebo čtyři mezery. Tak či onak se dozvíte, co lidé mají a nemají na daném jazyce rádi a proč.
  • Měj dost rozumu, abys vystoupil z komise pro standardizaci jazyka co nejdříve to je možné.
S ohledem na vše výše zmíněné je pochybné, jak daleko byste se dostali pouze čtením knih. Před tím, než jsme s manželkou měli dítě, jsem četl všechny tyto How To knihy, avšak stále jsem se cítil jako bezradný začátečník. O třicet měsíců později, když bylo druhé dítě na cestě, myslíte, že jsem se k těmto knihám vrátil? Ne. Místo toho jsem se spolehnul na svoji osobní zkušenost, což se ukázalo jako mnohem užitečnější než čtení tisíce stran psaných experty. Fred Brooks ve svém eseji No Silver Bullets popsal tříbodový plán pro hledání talentovaných softwarových designerů:
  • Rozeznávej ty nejlepší designery tak brzy, jak jen to je možné.
  • Přiřaď každému poradce, který bude zodpovědný za jeho osobní rozvoj.
  • Poskytni jim možnost interakce se sebou navzájem.
  • Předpokladem je, že tito lidé již budou mít kvality potřebné pro dobré designery, práce je pak stmelí dohromady. Alan Perlis to vystihl stručněji: “Každý může být učen jak tesat. Michelangelo by měl být učen jak to nedělat. Stejné je to s dobrými programátory.” Tak se do toho pusťte a kupte si knihu o Javě, pravděpodobně vám k něčemu bude. Avšak tím nezměníte svůj život ani svoji pravou programátorskou zkušenost za 24 hodin, dní dokonce ani měsíců.

    Reference

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

    Brooks, Fred, No Silver Bullets, 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.

    Související příspěvky