<html> <head> <title>Naucite Sami da Programirate za 10 Godina - Google Direktor Istrazivanja Petar Norvig</title> <meta name="Keywords" content="Uciti,programirati,programiranje,ekspert,sami,google,python" /> <meta name="Description" content="Direktor istrazivanja u Google, Peter Norvig, objasnjava zasto treba dugo vremena da se nauci programiranje, i koje jezike je najbolje poceti uciti." /> <!--Translated by Lazar Kovacevic, 23-Novembar-2006 --> <link rel="icon" href="favicon.ico" type="image/x-icon" /> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> </head> <body bgcolor=ffffff> <table width="100%" border="1"><tr><td width="100%"> <font size="-1"> <b><a href="./">INVERUDIO</a>: </b><a href="./programming.php">Programming</a> ::: <a href="./webdesign.php#seo">Web Optimization</a> ::: <a href="./Lazar_Kovacevic.php">My Resume</a> ::: <a href="./lakinekaki.php">Lazar</a> ::: <a href="./contact.php">Contact</a> ::: <a href="./links.php">Interesting Links</a> <br /><b>Programs: </b> <a href="./programs/Schrodinger/schrodinger.php">Schrodinger Wave Equation</a> |<a href="./programs/Schrodinger/Schrodinger.java.html">code</a> ::: <a href="./programs/PredatorPrey/pp.php">Prey Predator</a> |<a href="./programs/PredatorPrey/PredatorPreyModel.java.html">code</a> ::: <a href="./programs/MagnetsPlay/magnetism.php">Magnets</a> |<a href="./programs/MagnetsPlay/MagnetsModel.java.html">code</a> ::: <a href="./programs/Logger/log.php">Task Logger</a> |<a href="./programs/Logger/log.py.html">code</a> ::: <a href="./programs/BiosAnalyzer/BiosAnalyzer.php">Time Series Analysis Software</a> |<a href="./programs/BiosAnalyzer/pythonsourcecode.html">code</a> <br /><b>Websites: </b><a href="http://www.explore-ideas.com">Anonymous forum</a> ::: <a href="http://best-google-videos.com/">Best Google Video</a> ::: <a href="http://seolutions.net/">Google Optimization</a> ::: <a href="http://linklusion.com">Popular Links</a> ::: <a href="http://ezeating.net">Recipe Finder</a> ::: <a href="http://smspolitics.org">SMS Politics</a> ::: <a href="http://www.discover-math.com/">math tutoring software</a> <br /><b>Plugins: </b> <a href="https://addons.mozilla.org/en-US/firefox/addon/4693">404 Error</a>? | <a href="./programs/FindArchivedPage/waybackbutton.php">File Not Found</a>? ::: <a href="./programs/WordPressBlog/NofollowReciprocity.php">Nofollow</a> 4 <a href="http://wordpress.org/extend/plugins/nofollow-reciprocity/">Nofollow</a> </font> </td></tr></table> <br /> Dobrodoali! Na ovoj stranici mo~ete pro itati sastav direktora istra~ivanja u Google, Petra Norviga, koji objaanjava zaato treba dugo vremena da se nau i programiranje, i koje jezike je najbolje po eti u iti. <h1>Nau ite Sami Da Programirate za 10 Godina</h1> <h2>Teach Yourself Programming in Ten Years - Petar Norvig <font size=-1>(Google Director of Research)</font></h2> <b><a href="http://www.inverudio.com/naucite_sami.htm" title="0CG8B5 !0<8 0 @>3@0<8@0B5 70 10 >48=0"> 8@8;8F0</a></b> | <b><a href="http://norvig.com/21-days.html" title="Teach Yourself Programming in Ten Years">Original na Engleskom i prevodi na druge jezike.</a></b> <br> <p> <table cellpadding="4"> <tbody><tr> <td> <h2>Zaato su svi u takvoj ~urbi?</h2> Idite u bilo koju knji~aru, i videete <i>Nau ite Sami Javu za 7 dana</i> zajedno sa bezbrojnim varijacijama koje nude u enje Visual Basic-a, Windows-a, Internet-a, i tako dalje za par dana ili sati. Uradio sam sledeu <a rel="nofollow" href="http://www.amazon.com/exec/obidos/tg/browse/-/468558/104-5938873-6579160">pretragu</a> na <a rel="nofollow" href="http://www.amazon.com">Amazon.com</a>: (datum publikacije: posle 1992, naslov: nau i ili naslov: nau i sam) <pre><a rel="nofollow" href="http://www.amazon.com/exec/obidos/search-handle-url/ix=books&amp;rank=%2Bfeaturedrank&amp;fqp=power%01pubdate%3A%20after%201992%20and%20title%3A%20days%20and%0D%20%28title%3A%20learn%20or%20title%3A%20teach%20yourself%29&amp;sz=25&amp;pg=1/ref=s_b_np">pubdate: after 1992 and title: days and title: learn or title: teach yourself)</a></pre> i dobio 248 pogodaka. Prvih 78 su kompjuterske knjige (broj 79 je bila <a rel="nofollow" href="http://www.amazon.com/exec/obidos/ASIN/0781802245/"><i>Learn Bengali in 30 days</i></a>) (Nau ite Bengali za 30 dana). Zamenio sam "days" (dani) sa <a rel="nofollow" href="http://www.amazon.com/exec/obidos/search-handle-url/ix=books&amp;rank=%2Bfeaturedrank&amp;fqp=power%01pubdate%3A%20after%201992%20and%20title%3A%20hours%20and%0D%20%28title%3A%20learn%20or%20title%3A%20teach%20yourself%29&amp;sz=25&amp;pg=3/ref=s_b_np">"hours"</a> (sati) i dobio neverovatno sli ne rezultate: 253 knjiga sa 77 kompjuterskih knjiga praenim sa <a rel="nofollow" href="http://www.amazon.com/exec/obidos/ASIN/0028638999/"><i>Teach Yourself Grammar and Style in 24 Hours</i></a> (Nau ite gramatiku i izra~avanje za 24 sata) na mestu 78. Od prvih 200 ukupno, 96% su bile kompjuterske knjige. <p>Zaklju ak je da su ljudi ili u velikoj ~urbi da u e o kompjuterima, ili da su kompjuteri nekako neverovatno lakai da se nau e nego bilo ata drugo. Nema knjiga za u enje Betovena, ili Kvantne Fizike, ili ak ni Nege Pasa za par dana. </p><p> Analizirajmo sta bi naslov kao sto je <i><a rel="nofollow" href="http://www.amazon.com/exec/obidos/ISBN=1556225679/4094-7934802-027992">Learn Pascal in Three Days</a> (Nau ite Paskal za Tri Dana)</i> mogao da zna i: </p><ul> <li><b>Nau i:</b> Za 3 dana neete imati vremena da napiaete nekoliko ozbiljnijih programa, i da nau ite iz svojih uspeha i neuspeha. Neete imati vremena da radite sa iskusnim programerom i razumete kako je to ~iveti u takvoj sredini. Ukratko, neete imati mnogo vremena za u enje. Zna i oni mogu samo da pri aju o povranom poznavanju materije, a ne o suatinskom razumevanju. Kao ato je Aleksandar Popa rekao, malo u enja je opasno u enje.<p> </p></li><li><b>Paskal:</b> Za tri dana ete mo~da moi da nau ite sintaksu Paskala (ako ste ve znali sli an jezik), ali nebi mogli da nau ite kako da koristite sintaksu. Ukratko, ako ste na primer programer Bejzika, mogli biste nau iti da napiaete program u stilu Bejzika koristei sintaksu Paskala, ali ne biste mogli nau iti zaata je Paskal dobar (ili loa). U emu je onda poenta? <a href="http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html">Alan Perlis</a> je jednom rekao: "Jezik koji ne uti e na na in kako mislite o programiranju nije vredan poznavanja." Jedna mogua poenta je u enje malecnog dela Paskala (ili verovatnije, ne ega kao sto je Vi~ual Bejzik ili Javaskript) zato ato vam treba interfejs sa postojeim alatom za postizanje specifi nog zadatka. Ali tada ne u ite kako da programirate; u ite kako da obavite zadatak.<p> </p></li><li><b>zz Tri Dana:</b> Na ~alost, ovo nije dovoljno, kao sto sledei paragrafi pokazuju. </li></ul> <h2>Nau ite Sami Da Programirate za 10 Godina</h2> Istra~iva i (<a href="http://www.amazon.com/exec/obidos/ASIN/0805803092">Hejs</a>, <a href="http://www.amazon.com/exec/obidos/ASIN/034531509X/">Blum</a>) su pokazali da treba oko 10 godina da se razvije stru nost u bilo kojoj od mnogobrojnih oblasti, uklju ujui igranje aaha, komponovanje muzike, slikanje, sviranje klavira, plivanje, tenis, i istra~ivanje u neuropsihologiji i topologiji. Izgleda da nema pre ica: ak je i Mocartu, koji je bio muzi ko udo od deteta sa 4 godine, trebalo 13 i viae godina pre nego ato je po eo da pravi muziku svetske klase. U drugom polju, Bitlsi su postali slavni sa nizom hitova i pojavljivanjem u emisiji Eda Sulivana u 1964. Ali oni su pre toga svirali u malim klubovima u Liverpulu i Hamburgu od 1957, i dok ih je publika volela i ranije, prvi kriti an veliki uspeh, <i>Sgt. Peppers</i>, je objavljen u 1967. Samjuel D}onson je mislio da treba viae od 10 godina: "Savraenstvo u bilo kojoj oblasti se mo~e postii samo radom tokom celog ~ivota; ne mo~e se postii manjom cenom." I `aucer se ~alio "~ivot tako kratak, veatina toliko mnogo vremena zahteva." <p> Evo mog recepta za uspeh u programiranju: </p><ul> <li> Zainteresujte se za programiranje, i to ato je zabavno. Pobrinite se da ono ostane zabavno tako da e te biti ~eljni da ulo~ite deset godina.<p> </p></li><li> Pri ajte sa drugim programerima; itajte tue programe. Ovo je va~nije od bilo koje knjige ili kursa-treninga.<p> </p></li><li> Programirajte. Najbolje se u i <a href="http://www.engines4ed.org/hyperbook/nodes/NODE-120-pg.html">kroz rad</a>. Da se izrazim formalnije, "maksimalan nivo u inka za pojedinca u datoj delatnosti se ne posti~e automatski kao funkcija veeg iskustva, nego stepen u inka mo~e da se uvea ak i kod veoma iskusnih osoba kao rezultat namernog truda ka usavraavanju." <a href="http://www2.umassd.edu/swpi/DesignInCS/expertise.html">(p. 366)</a> i "najefikasnije u enje zahteva dobro definisan zadatak sa primerenom te~inom za datu osobu, informativan savet, i prilike za ponavljanje i ispravljanje greaaka." (p. 20-21) Knjiga <i> <a href="http://www.amazon.com/exec/obidos/ASIN/0521357349">Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life</a></i> (Kognicija u Praksi: Um, Matematika, i Kultura u Svakodnevnom }ivotu) je zanimljiva referenca za ovo razmialjanje.<p> </p></li><li> Ako ~elite, ulo~ite etiti godine u fakultet (ili viae na postdiplomskim studijama). To e vam dati pristup nekim poslovima koji zahtevaju diplome, i dae vam bolje razumevanje oblasti, ali ako ne u~ivate u akoli, mo~ete (sa izvesnom posveenoau) dobiti sli no iskustvo na poslu. U svakom slu aju, u enje iz ud~benika samo po sebi nee biti dovoljno. "Obrazovanje iz oblasti ra unarske tehnike i informatike ne mo~e nikog u initi ekspertom u programiranju, niata viae nego ato studiranje etkica i boja mo~e nekog u initi majstorom slikarstva" ka~e Erik Rejmond, autor <i>The New Hacker's Dictionary</i> (Novi Re nik Hakera). Jedan od najboljih programera koje sam ikada zaposlio je imao samo srednjoakolsku diplomu  napravio je mnogo <a href="http://www.xemacs.org">impresivnog</a> <a href="http://www.mozilla.org">programa</a>, ima svoju <a href="http://groups.google.com/groups?q=alt.fan.jwz&amp;meta=site%3Dgroups">news group</a>, i kroz stok deonice je nema sumnje mnogo bogatiji nego ato u ja ikada biti.<p> </p></li><li> Radite na projektima sa drugim programerima. Budite najbolji programer na nekim projektima; budite najgori na nekim drugim. Kada ste najbolji, imaete prilike da istestirate svoje sposobnosti da upravljate projektom, i da inspiriaete druge svojom vizijom. Kada ste najgori, nau ite ata najbolji rade, i nau ite ata ne vole da rade (zato ato to nateraju vas da uradite).<p> </p></li><li> Radite na projektima <i>posle</i> drugih programera. Budite uklju eni u razumevanje programa koje su pisali drugi. Vidite ata je potrebno da biste razumeli i popravili program kada njegovi originalni programeri nisu tu. Mislite kako da dizajnirate vaae programe da ih napravite jednostavnije za one koji e ih odr~avati posle vas.<p> </p></li><li> Nau ite bar nekolicinu programskih jezika. Uklju ite jedan jezik koji podr~ava abstrakciju klasa (kao Java ili Ce++), jedan koji podrzava abstrakciju funkcija (kao Lisp ili ML), jedan koji podrzava abstrakciju sintakse (kao Lisp), jedan koji podrzava deklarativne specifikacije (kao Prolog ili Ce++ templates), jedan koji podrzava korutine (kao Icon ili Scheme), i jedan koji podrzava paralelizam (kao Sisal). <p> </p></li><li> Zapamtite da postoji i "ra unar" u "ra unarskoj tehnici i informatici". Znajte koliko dugo treba vaaem ra unaru da obavi instrukciju, pro ita re  iz memorije (sa ili bez keaa), pro ita susednu re  iz diska, i potra~i novu lokaciju na disku. (<a href="#odgovori">Odgovori ovde.</a>) <p> </p></li><li> Uklju ite se u standardizaciju jezika. To mo~e biti ANSI Ce++ komitet, ili odlu ivanje dal lokalan stil kodiranja treba da ima 2 ili 4 prazna mesta za intendaciju. U svakom slucaju, nau iete sta drugi ljudi vole u jeziku, koliko ozbiljno, ili mo~da koliko malo o tome misle.<p> </p></li><li> Znaj kada je vreme da se skinea s jezi ne standardizacije, ato je pre mogue. </li></ul> Sa svim tim na umu, diskutabilno je koliko daleko mo~ete stii samo sa u enjem iz knjige. Pre nego ato sam dobio prvo dete, pro itao sam sve <i>Kako da</i> knige, i dalje sam se oseao kao zeleni bez ikakvog znanja. 30 meseci kasnije, kad sam trebao da dobijem drugo dete, dali sam ponovo obnavljao gradivo iz tih kniga? Ne. Umesto toga, oslonio sam se na li no iskustvo, koje se ispostavilo mnogo korisnije i ohrabrujue za mene nego hiljade strana napisanih od strane eksperta. <p>Fred Bruks, u njegovom radu <i><a href="http://citeseer.nj.nec.com/context/7718/0">No Silver Bullets</a></i> (Nema Srebrnih Metkova) identifikuje plan od tri dela za nala~enje sjajnih dizajnera aplikacija: </p><ol> <li>Sistemati no identifikuj najbolje dizajnere ato je ranije mogue.<p> </p></li><li>Dodeli mentora za karijeru da bude odgovoran za razvoj kandidata, i pa~ljivo belezi razvoj karijere.<p> </p></li><li>Omogui za dizajnere u razvoju da komuniciraju i stimuliau jedni druge.<p> </p></li></ol> Ovo podrazumeva da neki ljudi ve imaju kvalitete neophodne da bi se postao sjajan dizajner; cilj je prepoznati ih. <a href="http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html">Alan Perlis</a> je to rekao lepae: "Svako se moze nau iti da vaja skulpture: Mikelanelo bi se verovatno morao nau iti kako da ne vaja. Tako je i sa velikim programerima". <p> Zna i, samo napred i kupite knigu o Javi; verovatno e vam biti od neke koristi. Ali nee vam promeniti ~ivot, ili vaau stvarnu sveukupnu ekspertizu kao programera u 24 sata, dana, pa ak i meseca. </p><p> </p><hr> <h2>Reference</h2> <p> Blym, Benjamin (ed.) <i><a href="http://www.amazon.com/exec/obidos/ASIN/034531509X">Developing Talent in Young People</a></i>, Balantine, 1985. </p><p> Bryks, Fred, <i><a href="http://citeseer.nj.nec.com/context/7718/0">No Silver Bullets</a></i>, IEEE Kompjuter, vol. 20, no. 4, 1987, p. 10-19. </p><p> Hayes, John R., <i><a href="http://www.amazon.com/exec/obidos/ASIN/0805803092">Complete Problem Solver</a></i> Lorvence Erlbaum, 1989. </p><p> Lave, Jean, <i><a href="http://www.amazon.com/exec/obidos/ASIN/0521357349">Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life</a></i>, Kejmbrid~ Univerzitetska `tampa, 1988. </p><hr> <a name="odgovori"><h2>Odgovori</h2></a> Pribli~na vremena raznih operacija na tipi nom 1GHz PC leta 2001:<p> <table border="1" cellpadding="2" cellspacing="2"> <tbody><tr><td>execute single instruction </td><td> 1 nsec = (1/1,000,000,000) sec </td></tr><tr><td>fetch word from L1 cache memory </td><td> 2 nsec </td></tr><tr><td>fetch word from main memory </td><td> 10 nsec </td></tr><tr><td>fetch word from consecutive disk location </td><td> 200 nsec </td></tr><tr><td>fetch word from new disk location (seek) </td><td> 8,000,000nsec = 8msec </td></tr></tbody></table> </p><hr> <h2>Dodatak: Izbor Jezika</h2> Nekoliko ljudi me je pitalo koji programski jezik bi trebalo da nau e prvo. Nema jednog odgovora, ali razmotrite sledee stavke: <p> </p><ul> <li><i>Koristite prijatelje</i>. Kada me neko pita "koji operativni sistem bi trebao da koristim, Vindovs, Uniks, ili Mak?", moj odgovor je obi no: "koristi atagod tvoji drugovi koriste." Prednost koju dobijete u ei od drugova e nadmaaiti svaku svojstvenu razliku izmeu OS, ili izmeu programskih jezika. Takoe razmotrite budue prijatelje: krugovi programera kojih ete biti deo ako nastavite. Dali vaa izabran jezik ima veliko rastue druatvo, ili malo koje se gubi? Ima li knjiga, web stranica, internet foruma, od kojih mogu da se dobiju odgovori? Da li vam se svidjaju ljudi na tim forumima? </li><li><i>Ne komplikujte</i>. Programerski jezici kao sto su C++ i Java su dizajnirani za profesionalni razvoj od strane velikih timova iskusnih programera koje brine efikasnost izvraenja njihovog koda. Kao rezultat, ovi jezici imaju komplikovane delove dizajnirane za te okolnosti. Vaaa briga je da nau ite da programirate. Ne trebaju vam dodatne komplikacije. Zelite jezik koji je napravljen da moze brzo da se u i i da se zapamti od strane pojedina nog programera. </li><li><i>Igrajte se.</i> Na koji na in biste radije nau ili da svirate klavir: na prirodan, interaktivan na in, u kome ujete svaku notu im pritisnete klavijaturu, ili u "batch" modu, u kome ujete note poato ste zavraili celu melodiju? O igledno, interaktivan na in ini u enje jednostavnije za klavir, a takodje i za programiranje. Insistirajte na jeziku sa interaktivnom mogunosau, i koristite je. </li></ul> Imajui ove kriterijume u vidu, moji predlozi za prvi programerski jezik bi bio <b><a href="http://python.org">Python</a></b> ili <b><a href="http://www.schemers.org">Scheme</a></b>. Ali vaae okolnosti mogu da se razlikuju, i postoje i drugi dobri izbori. Ako imate manje od deset godina, mozda ete viae voleti <a href="http://alice.org">Alice</a> ili <a href="http://www.squeak.org/">Squeak</a> (stariji u enici e mo~da takoe u~ivati u ovim). Va~no je da odaberete i po nete. <hr> <h2>Dodatak: Knjige i drugi izvori</h2> Nekoliko ljudi je pitalo iz kojih knjiga i veb stranica bi trebalo da u e. Ponavljam da "u enje samo iz kniga nee biti dovoljno", ali mogu da preporu im sledee: <p> </p><ul> <li> <b>Scheme:</b> <a href="http://www.amazon.com/gp/product/0262011530">Structure and Interpretation of Computer Programs (Abelson &amp; Sussman)</a> (Struktura i Interpretacija Kompjuterskih Programa) je verovatno najbolji uvod u ra unarsku tehniku i informatiku, i u i programiranju kao na inu razumevanju informatike. Mo~ete videti <a href="http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/">onlajn snimljene lekcije</a> zasnovane na ovoj knjizi, kao i <a href="http://mitpress.mit.edu/sicp/full-text/book/book.html">ceo tekst na internetu</a>. Knjiga je zahtevna, i mo~da e odbiti neke ljude koji bi ina e mogli biti uspeani sa nekim drugim pristupom. </li><li> <b>Scheme:</b> <a href="http://www.amazon.com/gp/product/0262062186">How to Design Programs (Felleisen et al.)</a> (Kako napraviti program) je jedna od najboljih knjiga o tome kako stvarno dizajnirati programe na elegantan i funkcionalan na in. </li><li> <b>Python:</b> <a href="http://www.amazon.com/gp/product/1887902996">Python Programming: An Intro to CS (Zelle)</a> (Pajton programiranje: uvod u RI) je uvod u Pajton. </li><li> <b>Python:</b> Nekoliko internet <a href="http://wiki.python.org/moin/BeginnersGuide">tutorijala</a> je dostupno na <a href="http://python.org">Python.org</a>. </li><li> <b>Oz:</b> <a href="http://www.amazon.com/gp/product/0262220695">Concepts, Techniques, and Models of Computer Programming (Van Roy &amp; Haridi)</a> (Koncepti, Tehnike, i Modeli Kompjuterskog Programiranja) se smatra od strane nekih kao moderni naslednik Abelson Susmana. To je vodi kroz velike ideje programiranja, koji pokriva viae tema od Abelson Susman a u isto vreme je verovatno jednostavniji da se ita i prati. Koristi jezik, Oz, koji nije mnogo poznat ali slu~i kao osnova za u enje drugih jezika. </li> </ul> <p> </p></td><td> </td></tr></tbody></table> </p><p> </p><hr> Autorska prava: <a href="http://norvig.com/21-days.html"><i>Petar Norvig</i></a> (2001) Prevod: <a href="http://www.inverudio.com/"><i>Lazar Kova evi</i></a> (2006) -- <a href="http://www.inverudio.com/contact.php"><i>poaaljite primedbe na prevod</i></a> </body></html>