Ako sa naučiť programovať za desať rokov.

Peter Norvig

Prečo sa všetci tak ponáhľajú?

Vojdite do ktoréhokoľvek kníhkupectva a hneď zbadáte knihu s názvom Naučte sa programovať v Jave za 7 dní, spolu s nekonečným množstvom variácií, ktoré ponúkajú že naučia Visual Basic, Windows, Internet, a tak ďalej, za niekoľko dní či hodín. Keď som na Amazon.com dal vyhľadávať nasledujúcu kombináciu:

  pubdate: after 1992 and title: days and (title: learn or title: teach yourself)

vrátilo sa mi 248 výsledkov. Prvých 78 z toho boli knihy o počítačoch (79. v poradí bola Learn Bengali in 30 days [Nauč sa bengálsky za 30 dní]). Keď som nahradil slovo "days" [dni] za "hours" [hodiny], získal som pozoruhodne podobné výsledky: ďalších 253 kníh, pričom 77 kníh o počítačoch bolo nasledované knihou Teach Yourself Grammar and Style in 24 Hours [Nauč sa gramatiku a štýl za 24 hodín] ako 78. v poradí. Celkovo z prvých 200 kníh bolo 96% o počítačoch.

Záver z toho je, že buď sa ľudia veľmi ponáhľajú, aby sa naučili niečo o počítačoch, alebo že sa veci okolo počítačov dajú naučiť neskutočne rýchlejšie než čokoľvek iné. Nie sú žiadne knihy o tom, ako sa naučiť Beethovena, kvantovú fyziku, ba ani ošetrovanie psov, za niekoľko dní. Felleisen a kol. pritakáva tomuto trendu v knihe How to Design Programs [Ako navrhovať programy], keď píše: "Zlé programovanie je jednoduché. Každý blázon sa ho vie naučiť za 21 dní, ak ked je to úplný hlupák."

Skúsme rozobrať, čo sa môže skrývať v titule Learn C++ in Three Days [Nauč sa C++ za tri dni]:

Naučte sa programovať za desať rokov

Výskumníci (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) ukázali, že dosiahnutie úrovne experta v akomkoľvek odbore – vrátane hrania šachov, skladania hudby, prevádzkovania telegrafie, maľovania, hrania na klavíri, plávania, tenisu a výskumu v oblasti neuropsychológie a topológie – trvá zhruba desať rokov. Podstatný je cieľavedomý tréning – nejde len o opakovanie nejakej činnosti znova a znova, ale ide o to motivovať samého seba úlohami, ktoré sú tesne za hranicou momentálnych schopností, pokúsiť sa o ne, analyzovať svoj výkon počas pokusu a po ňom, a napraviť chyby. A toto opakovať. A znova opakovať. Zdá sa, že neexistuje žiadna skratka: dokonca aj Mozartovi, ktorý bol zázračným hudobníkom vo veku 4 rokov, trvalo 13 rokov, kým začal tvoriť hudbu svetovej úrovne. Ak sa pozrieme na iný žáner, zdalo by sa, že Beatles z ničoho nič v roku 1964 prerazili sériou hitov ktoré dosiahli vrchol rebríčka a dostali sa na show Eda Sullivana. Lenže oni hrali v malých kluboch v Liverpoole a Hamburgu už od roku 1957, a aj keď pomerne skoro dosiahli masový úspech, ich prvý kritikou kladne prijatý album, Sgt. Peppers, bol vydaný v roku 1967. Malcolm Gladwell v práci skúmajúcej študentov Berlin Academy of Music [Berlínskej hudobnej akadémie] porovnával hornú, strednú a spodnú tretinu ročníka, a pýtal sa ich, koľko cvičili:

Všetci, zo všetkých troch skupín, začali hrať na hudobnom nástroji zhruba v tom istom čase – okolo piatich rokov veku. V tých prvých rokoch všetci cvičili zhruba rovnako, asi dve-tri hodiny týždenne. Ale okolo veku osem rokov sa začali objavovať skutočné rozdiely. Tí študenti, ktorí sa neskôr stali najlepšími z triedy, cvičili viac než ostatní: šesť hodín týždenne vo veko osem rokov, osem hodín vo veku 12 rokov, 16 hodín vo veku 14 rokov, a stále viac a viac, až kým okolo veku 20 rokov cvičili viac než 30 hodín týždenne. Do veku 20 rokov, všetci vrcholní interpreti mali za sebou celkovo vyše 10,000 hodín cvičenia. Naproti tomu mali priemerní žiaci odohraných asi 8,000 hodín, a budúci učitelia hudby mali za sebou o málo viac než 4,000 hodín.

Možno je to tak, že magickou hranicou je teda 10,000 hodín a nie 10 rokov. Samuel Johnson (1709-1784) [anglický spisovateľ a literát, pozn.prekl.] mienil, že je to trvá dlhšie: "Excelentnosť v akomkoľvek odbore sa dá dosiahnuť len celoživotnou prácou; nedá sa zadovážiť za menšiu cenu." A Chaucer (1340-1400) [Geoffrey Chaucer, anglický básnik, autor Canterburských poviedok, pozn.prekl.] sa sťažuje, "život taký krátky, majstrovstvo tak dlho trvá sa naučiť." Hippokrates (asi 400 p.n.l.) má známe porekadlo "ars longa, vita brevis", čo je skrátená verzia dlhšieho výroku "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile", čo znamená "Život je krátky, majstrovstvo zdĺhavé, príležitosť prchavá, experiment klamlivý, úsudok zložitý." Hoci v latinčine môže ars znamenať umenie aj remeslo, v gréckom origináli slovo "techne" znamená len majstrovstvo, nie umenie.

Toto je môj recept pre úspech v programovaní:

Berúc toto všetko do úvahy, je otázne, ako ďaleko sa dá dostať čiste učením z kníh. Keď sa malo narodiť moje prvé dieťa, prečítal som všetky knihy typu Ako na to, a stále som sa cítil byť bezradným začiatočníkom. Čo myslíte, keď sa o 30 mesiacov neskôr malo narodiť moje druhé dieťa, vrátil som sa ku knihám aby som si občerstvil vedomosti? Nie. Namiesto toho som sa spoľahol na moju osobnú skúsenosť, ktorá sa ukázala byť omnoho užitočnejšia a poskytla mi väčší pocit istoty, než tisíce strán napísaných odborníkmi.

Fred Brooks vo svojej eseji No Silver Bullet [Niet striebornej guľky] uviedol tento trojbodový plán na nájdenie vynikajúcich softwarových návrhárov:

  1. Systematicky rozpoznávajte vrcholných návrhárov tak skoro, ako je to len možné.

  2. Prideľte mu mentora, ktorý bude zodpovedný za vývoj adepta, a veďte dôkladný kariérny spis.

  3. Poskytujte príležitosti rozvíjajcim sa návrhárom aby navzájom prichádzali do styku a stimulovali sa.

To predpokladá, že niektorí ľudia majú už v sebe vlastnosti potrebné pre to aby sa stali vynikajúcimi návrhármi, a je potrebné ich len patrične usmerniť. Alan Perlis to povedal výstižne: "Každého je možné naučiť robiť sochy, Michelangela by však bolo treba učiť, ako ich nerobiť. A tak je to aj s vynikajúcimi programátormi."

Takže sa pustite do toho a kúte si tú knihu o Jave; pravdepodobne sa vám v niečom zíde. Ale život ani vaše celkové programátorské schopnosti sa nezmenia za 24 hodín, dní a ani mesiacov.


Referencie

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.


Odpovede

Približné časovanie jednotlivých operácií na typickom 1GHz PC v roku 2001:

vykonanie jednej inštrukcie

1 ns = (1/1,000,000,000) s

načítanie slova z L1 cache

2 ns

načítanie slova z hlavnej pamäte

10 ns

načítanie slova zo za sebou nasledujúcich pozícií na disku

200 ns

načítanie slova z novej pozície na disku (seek [vyhľadanie])

8,000,000 ns = 8 ms

Dodatok: Výber programovacieho jazyka

Viacerí ľudia sa ma pýtali, ktorý programovací jazyk sa majú učiť ako prvý. Na toto neexistuje jednoznačná odpoveď, ale mali by ste zvážiť nasledujúce body:

Na základe týchto kritérií by som ako prvé programovacie jazyky doporučoval Python alebo Scheme. Ale vaše okolnosti môžu byť iné, a sú tu aj ďalšie dobré možnosti. Ak máte jednociferný vek, možo uprednostníte Alice alebo Squeak (ale aj starším žiakom sa môžu páčiť). Dôležité je, aby ste si vybrali a začali pracovať.


Dodatok: Knihy a iné zdroje

Niekoľko ľudí sa pýtalo na knihy a webové stránky, z ktorých by sa mohli učiť. Opakujem, že "učenie z kníh samo osebe nestačí", ale môžem doporučiť nasledovné


Poznámky

T. Capey poukázal na to, že stránka Complete Problem Solver na Amazone obsahuje teraz v sekcii "Customers who shopped for this item also shopped for these items" knihy "Teach Yourself Bengali in 21 days" a "Teach Yourself Grammar and Style" . Toto môže byť vďaka veľkému množstvu ľudí, ktorí prichádzajú k tejto knihe z tejto stránky.

Poďakovanie Rossovi Cohenovi za pomoc s Hippokratom.




Peter Norvig (Copyright 2001)

preklad (C)2009 wek