Dobrodosli! Na ovoj stranici mozete procitati sastav direktora istrazivanja u Google, Peter Norviga, koji objasnjava zasto treba dugo vremena da se nauci programiranje, i koje jezike je najbolje poceti uciti.
Na ovom vebsajtu mozete naci dosta zanimljivih informacija i linkova. Znanje Engleskog jezika je neophodno za veci deo ostataka sajta, samo je ova stranica na Srpskom. Ako se pitate zasto je sajt na Engleskom, odgovor je sledeci: moja kompanija je u Cikagu u Americi, i bavi se programiranjem, veb dizajnom i ucenjem matematike. Linkovi ka drugim stranicama na ovom veb sajtu su sledeci:

Chicago SEO, Programming, Tutoring

INVERUDIO
:
Python Software Development Programming page ::: Chicago SEO Expert Search Engine Optimization ::: Lazar Kovacevic My Resume ::: Chicago SEO Expert and Math Tutor - Lazar Kovacevic Lakinekaki ::: SEO Expert in Chicago, Math Tutor Contact ::: useful websites Interesting Links ::: Programs: Interactive Schrodinger Wave Equation Simulation |code ::: Predator-Prey Multi Agent REPAST Simulation Model |code ::: Project (Task, Time, Money) Logger - for freelance contractors |code ::: Bios Analyzer - free nonlinear time series analysis software |code ::: Not Found 404 Error Firefox Extension - finds missing pages ::: Nofollow ::: Web-sites: anonymous internet discussion forum Explore Ideas and post few, help this forum roll! ::: Best Google Video ::: Chicago SEO Consulting Company Search Engine Optimization ::: social bookmarking links aggregator Linklusion - popular links aggregator from social bookmark sites ::: ingredients at home Recipe Finder - Cook what you have in your fridge ::: Discover Math (future home of educational software)



Ћирилица

Научите Сами Да Програмирате за 10 Година


Naucite Sami da Programirate za 10 Godina

Teach Yourself Programming in Ten Years - Peter Norvig (Google Director of Research)

Preveo Lazar Kovacevic. Original in English and other language translations.
-Paznja: odgovarajuca latinicna slova sa 'kukicama' ccdšž za sada su ccdsz.

Zasto su svi u takvoj zurbi?

Idite u bilo koju knjizaru, i videcete kako da Naucite Sami Javu za 7 Dana zajedno sa bezbrojnim varijacijama koje nude ucenje Visual Basic-a, Windows-a, Internet-a, i tako dalje za par dana ili sati. Uradio sam sledecu pretragu na Amazon.com: (datum publikacije: posle 1992, naslov: nauci ili naslov: nauci sam)
pubdate: after 1992 and title: days and
title: learn or title: teach yourself)
i dobio 248 pogodaka. Prvih 78 su kompjuterske knjige (broj 79 je bila Learn Bengali in 30 days) (Naucite Bengali za 30 dana). Zamenio sam "days" (dani) sa "hours" (sati) i dobio neverovatno slicne rezultate: 253 knjiga sa 77 komputerskih knjiga pracenim sa Teach Yourself Grammar and Style in 24 Hours (Naucite gramatiku i izrazavanje za 24 sata) na mestu 78. Od prvih 200 ukupno, 96% su nile kompjuterske knjige.

Zakljucak je da su ljudi ili u velikoj zurbi da uce o kompjuterima, ili da su kompjuteri nekako neverovatno laksi da se nauce nego bilo sta drugo. Nema knjiga za ucenje Betovena, ili Kvantne Fizike, ili cak ni Nege Pasa za par dana.

Analizirajmo sta bi naslov kao sto je Learn Pascal in Three Days (Naucite Paskal za Tri Dana) mogao da znaci:

  • Nauci: Za 3 dana necete imati vremena da napisete nekoliko ozbiljnijih programa, i da naucite iz svojih uspeha i neuspeha. Necete imati vremena da radite sa iskusnim programerom i razumete kako je to ziveti u takvoj sredini. Ukratko, necete imati mnogo vremena za ucenje. Znaci oni mogu samo da pricaju o povrsnom poznavanju materije, a ne o sustinskom razumevanju. Kao sto je Alexandar Pop rekao, malo ucenja je opasno ucenje.

  • Paskal: Za 3 dana cete mozda moci da naucite sintaksu Paskala (ako ste vec znali slican jezik), ali nebi mogli da naucite kako da koristite sintaksu. Ukratko, ako ste naprimer programer Basic-a mogli biste nauciti da napisete program u stilu Basic-a koristeci sintaksu Paskala, ali nebiste mogli nauciti zasta je Paskal dobar (ili los). U cemu je onda poenta? Alan Perlis je jednom rekao: "Jezik koji ne utice na nacin kako mislite o programiranju nije vredan poznavanja." Jedna moguca poenta je ucenje malecnog dela Paskala (ili verovatnije, necega kao sto je Visual Basic ili JavaScript) zato sto vam treba interfejs sa postojecim alatom za postizanje specificnog zadatka. Ali tada ne ucite kako da programirate; ucite kako da obavite taj zadatak.

  • za Tri Dana: Nazalost, ovo nije dovoljno, kao sto sledeci paragrafi pokazuju.

Naucite Sami da Programirate za 10 Godina

Istrazivaci (Hayes, Bloom) su pokazali da treba oko 10 godina da se razvije strucnost u bilo kojoj od mnogobrojnih oblasti, ukljucujuci igranje saha, komponovanja muzike, slikanje, sviranje klavira, plivanje, tenis, i istrazivanje u neuropsihologiji i topologiji. Izgleda da nema precica: cak je Mocartu, koji je bio muzicko cudo od deteta sa 4 godine, trebalo 13 i vise godina pre nego sto je poceo da pravi muziku svetke 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 kritican veliki uspeh, Sgt. Peppers, je objavljen u 1967. Samuel Johnson je mislio da treba vise od 10 godina: "Savrsenstvo u bilo kojoj oblasti se moze postici samo radom tokom celog zivota; nemoze se postici manjom cenom." I Chaucer se zalio "zivot tako kratak, vestina toliko mnogo vremena zahteva."

Evo mog recepta za uspeh u programiranju:

  • Zainteresujte se za programiranje, i to zato sto je zabavno. Pobrinite se da ono ostane zabavno tako da ce te biti zeljni da ulozite deset godina.

  • Pricajte sa drugim programerima; citajte tudje programe. Ovo je vaznije od bilo koje knjige ili kursa/treninga.

  • Programirajte. Najbolje se uci kroz rad. Da se izrazim formalnije, "maksimalan nivo ucinka za pojedinca u datoj delatnosti se ne postize automatski kao funkcija veceg iskustva, nego stepen ucinka moze da se uveca cak i kod veoma iskusnih osoba kao rezultat namernog truda ka usavrusavanju." (p. 366) i "najefikasnije ucenje zahteva dobro definisan zadatak sa primerenom tezinom za datu osobu, informativan savet, i prilike za ponavljanje i ispravljanje gresaka." (p. 20-21) Knjiga Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life je zanimljiva referenca za ovo razmisljanje.

  • Ako zelite, ulozite cetiri godine u fakultet (ili vise na postdiplomskim studijama). To ce vam dati pristum nekim poslovima koji zahtevaju diplome, i dace vam bolje razumevanje oblasti, ali ako ne uzivate u skoli, mozete (sa izvesnom posvecenostu) dobiti slicno iskustvo na poslu. U svakom slucaju, ucenje iz udzbenika samo po sebi nece biti dovoljno. "Obrazovanje iz oblasti racunarska tehnika i informatika nemoze nikog uciniti ekspertom u programiranju, nista vise nego sto studiranje cetkica i boja moze nekog uciniti majstorom slikarstva" kaze Eric Raymond, autor The New Hacker's Dictionary. Jedan od najboljih programera koje sam ikada zaposlio je imao samo srednjoskolsku diplomu; napravio je mnogo impresivnog programa, ima svoju news group, i kroz stok deonice je nema sumnje mnogo bogatiji nego sto cu ja ikada biti.

  • Radite na projektima sa drugim programerima. Budite najbolji programer na nekim projektima; budite najgori na nekim drugim. Kada ste najbolji, imacete prilike da istestirate svoje sposobnosti da upravljate projektom, i da inspirisete druge svojom vizijom. Kada ste najgori, naucite sta najbolji rade, i naucite sta ne vole da rade (zato sto to nateraju vas da uradite).

  • Radite na projektima posle drugih programera. Budite ukljuceni u razumevanje programa koje su pisali drugi. Vidite sta je potrebno da biste razumeli i popravili program kada njegovi originalni programeri nisu tu. Mislite kako da dizajnirate vase programe da ih napravite jednostavnije za one koji ce ih odrzavati posle vas.

  • Naucite bar nekolicinu programskih jezika. Ukljucite jedan jezik koji podrzava abstrakciju klasa (kao Java ili C++), jedan koji podrzava abstrakciju funkcija (kao Lisp ili ML), jedan koji podrzava abstrakciju sintakse (kao Lisp), jedan koji podrzava deklarativne specifikacije (kao Prolog ili C++ templates), jedan koji podrzava korutine (kao Icon ili Scheme), i jedan koji podrzava paralelizam (kao Sisal).

  • Zapamtite da postoji i "racunar" u "racunarskoj tehnici i informatici". Znajte koliko dugo treba vasem racunaru da obavi instrukciju, procita rec iz memorije (sa ili bez kesa), procita susednu rec iz diska, i potrazi novu lokaciju na disku. (Odgovori ovde.)

  • Ukljucite se u standardizaciju jezika. To moze biti ANSI C++ komitet, ili odlucivanje dal lokalan stil kodiranja treba da ima 2 ili 4 prazna mesta za intendaciju. U svakom slucaju, naucicete sta drugi ljudi vole u jeziku, koliko ozbiljno, ili mozda koliko malo o tome misle.

  • Have the good sense to get off the language standardization effort as quickly as possible. (Prevod fali jer bas i ne razumem najbolje ovu recenicu.)
Sa svim tim na umu, diskutabilno je koliko daleko mozete stici samo sa ucenjem iz knjige. Pre nego sto sam dobio prvo dete, procitao sam sve Kako da knige, i dalje sam se osecao 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 licno iskustvo, koje se ispostavilo mnogo korisnije i ohrabrujuce za mene nego hiljade strana napisanih od strane eksperta.

Fred Brooks, u njegovom radu No Silver Bullets identifikuje plan od tri dela za nalazenje sjajnih dizajnera aplikacija:

  1. Sistematicno identifikuj najbolje dizajnere sto je ranije moguce.

  2. Dodeli mentora za karijeru da bude odgovoran za razvoj kandidata, i pazljivo belezi razvoj karijere.

  3. Omoguci za dizajnere u razvoju da komuniciraju i stimulisu jedni druge.

Ovo podrazumeva da neki ljudi vec imaju kvalitete neophodne da bi se postao sjajan dizajner; cilj je prepoznati ih. Alan Perlis je to rekao lepse: "Svako se moze nauciti da valja skulpture: Mikelandjelo bi se verovatno morao nauciti kako da ne valja. Tako je i sa velikim programerima".

Znaci, samo napred i kupite knigu o Javi; verovatno ce vam biti od neke koristi. Ali nece vam promeniti zivot, ili vasu stvarnu sveukupnu ekspertizu kao programera u 24 sata, dana, pa cak i meseca.


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.

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

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


Odgovori

Priblizna vremena raznih operacija na tipicnom 1GHz PC leta 2001:

execute single instruction 1 nsec = (1/1,000,000,000) sec
fetch word from L1 cache memory 2 nsec
fetch word from main memory 10 nsec
fetch word from consecutive disk location 200 nsec
fetch word from new disk location (seek) 8,000,000nsec = 8msec


Dodatak: Izbor Jezika

Nekoliko ljudi me je pitalo koji programski jezik bi trebalo da nauce prvo. Nema jednog odgovora, ali razmotrite sledece stavke:

  • Koristite prijatelje. Kada me neko pita "koji operativni sistem bi trebao da koristim, Windows, Unix, or Mac?", moj odgovor je obicno: "koristi stagod tvoji drugovi koriste." Prednost koju dobijete uceci od drugova ce nadmasiti svaku svojstvenu razliku izmedju OS, ili izmedju programskih jezika. Takodje razmotrite buduce prijatelje: krugovi programera kojih cete biti deo ako nastavite. Dali vas izabran jezik ima veliko rastuce drustvo, 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?
  • Ne komplikujte. Programerski jezici kao sto su C++ i Java su dizajnirani za profesionalni razvoj od strane velikih timova iskusnih programera koje brine efikasnost izvrsenja njihovog koda. Kao rezultat, ovi jezici imaju komplikovane delove dizajnirane za te okolnosti. Vasa briga je da naucite da programirate. Ne trebaju vam dodatne komplikacije. Zelite jezik koji je napravljen da moze brzo da se uci i da se zapamti od strane pojedinacnog programera.
  • Igrajte se. Na koji nacin biste radije naucili da svirate klavir: na prirodan, interaktivan nacin, u kome cujete svaku notu cim pritisnete klavijaturu, ili u "batch" modu, u kome cujete note posto ste zavrsili celu melodiju? Ocigledno, interaktivan nacin cini ucenje jednostavnije za klavir, a takodje i za programiranje. Insistirajte na jeziku sa interaktivnom mogucnoscu, i koristite je.
Imajuci ove kriterijume u vidu, moji predlozi za prvi programerski jezik bi bio Python ili Scheme. Ali vase okolnosti mogu da se razlikuju, i postoje i drugi dobri izbori. Ako imate manje od deset godina, mozda cete vise voleti Alice ili Squeak (stariji ucenici ce mozda takodje uzivati u ovim). Vazno je da odaberete i pocnete.

Dodatak: Knjige i drugi izvori

Nekoliko ljudi je pitalo iz kojih knjiga i web stranica bi trebalo da uce. Ponavljam da "ucenje samo iz kniga nece biti dovoljno", ali mogu da preporucim sledece:


Peter Norvig (Copyright 2001) Translation: Lazar Kovacevic (2006)