Zašto su svi u takvoj žurbi?
Idite u bilo koju knjižaru, i videćete Naučite Sami Javu za 7 dana 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 sledeću pretragu na Amazon.com: (datum publikacije: posle 1992, naslov: nauči ili naslov: nauči 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) (Naučite Bengali za 30 dana). Zamenio sam "days" (dani) sa
"hours" (sati)
i dobio neverovatno slične rezultate: 253 knjiga sa 77 kompjuterskih knjiga praćenim sa Teach
Yourself Grammar and Style in 24 Hours (Naučite gramatiku i izražavanje za 24 sata) na mestu 78. Od prvih 200 ukupno, 96% su bile kompjuterske knjige.
Zaključak je da su ljudi ili u velikoj žurbi da uče o kompjuterima, ili da su kompjuteri nekako neverovatno lakši da se nauče nego bilo šta drugo.
Nema knjiga za učenje Betovena, ili Kvantne Fizike, ili čak ni Nege Pasa za par dana.
Analizirajmo sta bi naslov kao sto je Learn Pascal in Three Days (Naučite Paskal za Tri Dana)
mogao da znači:
- Nauči: Za 3 dana nećete imati vremena da napišete nekoliko
ozbiljnijih programa, i da naučite iz svojih uspeha i neuspeha.
Nećete imati vremena da radite sa iskusnim programerom i razumete kako je to živeti u takvoj sredini.
Ukratko, nećete imati mnogo vremena za učenje.
Znači oni mogu samo da pričaju o površnom poznavanju materije, a ne o suštinskom razumevanju.
Kao što je Aleksandar Popa rekao, malo učenja je opasno učenje.
- Paskal: Za tri dana ćete možda moći 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 napišete
program u stilu Bejzika koristeći sintaksu Paskala, ali ne biste mogli naučiti zašta je
Paskal dobar (ili loš). U čemu je onda poenta? Alan Perlis
je jednom rekao: "Jezik koji ne utiče na način kako mislite o programiranju nije vredan poznavanja."
Jedna moguća poenta je učenje malecnog dela Paskala (ili verovatnije, nečega kao sto je
Vižual Bejzik ili Javaskript) zato što vam treba interfejs sa
postojećim alatom za postizanje specifičnog zadatka. Ali tada ne učite kako da programirate;
učite kako da obavite zadatak.
- zz Tri Dana: Na žalost, ovo nije dovoljno, kao sto sledeći paragrafi pokazuju.
Naučite Sami Da Programirate za 10 Godina
Istraživači (Hejs, Blum)
su pokazali da treba oko 10 godina da se razvije stručnost u bilo kojoj od mnogobrojnih
oblasti, uključujući igranje šaha, 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 više godina pre nego što 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, Sgt. Peppers, je objavljen u 1967. Samjuel DŽonson
je mislio da treba više od 10 godina: "Savršenstvo u bilo kojoj oblasti se može postići samo radom
tokom celog života; ne može se postići manjom cenom."
I Šaucer se žalio "život tako kratak, veština toliko mnogo vremena zahteva."
Evo mog recepta za uspeh u programiranju:
- Zainteresujte se za programiranje, i to što je zabavno.
Pobrinite se da ono ostane zabavno tako da će te biti željni da uložite deset godina.
- Pričajte sa drugim programerima; čitajte tuđe programe.
Ovo je važnije od bilo koje knjige ili kursa-treninga.
- Programirajte. Najbolje se uči kroz rad. Da se izrazim formalnije, "maksimalan nivo učinka za pojedinca u datoj delatnosti se ne postiže automatski kao funkcija većeg iskustva, nego stepen učinka može da se uveća čak i kod veoma iskusnih osoba kao rezultat namernog truda ka usavršavanju." (p. 366)
i "najefikasnije učenje zahteva dobro definisan zadatak sa primerenom težinom za datu osobu, informativan savet, i prilike za ponavljanje i ispravljanje grešaka." (p. 20-21) Knjiga
Cognition in Practice: Mind, Mathematics, and Culture in Everyday
Life (Kognicija u Praksi: Um, Matematika, i Kultura u Svakodnevnom Životu) je zanimljiva referenca za ovo razmišljanje.
- Ako želite, uložite četiti godine u fakultet (ili više na postdiplomskim studijama). To će vam dati pristup nekim poslovima koji zahtevaju diplome, i daće vam bolje razumevanje oblasti, ali ako ne uživate u školi, možete
(sa izvesnom posvećenošću) dobiti slično iskustvo na poslu.
U svakom slučaju, učenje iz udžbenika samo po sebi neće biti dovoljno.
"Obrazovanje iz oblasti računarske tehnike i informatike ne može nikog učiniti ekspertom u programiranju, ništa više nego što
studiranje četkica i boja može nekog učiniti majstorom slikarstva" kaže Erik Rejmond, autor The New Hacker's Dictionary (Novi Rečnik Hakera). Jedan od najboljih programera koje sam ikada zaposlio je imao samo
srednjoškolsku diplomuč napravio je mnogo impresivnog programa, ima svoju news group,
i kroz stok deonice je nema sumnje mnogo bogatiji nego što ću ja ikada biti.
- Radite na projektima sa drugim programerima. Budite najbolji programer na nekim projektima; budite najgori na nekim drugim.
Kada ste najbolji, imaćete prilike da istestirate svoje sposobnosti da upravljate projektom, i da inspirišete druge svojom vizijom.
Kada ste najgori, naučite šta najbolji rade, i naučite šta ne vole da rade (zato što to nateraju vas da uradite).
- Radite na projektima posle drugih programera. Budite uključeni u
razumevanje programa koje su pisali drugi. Vidite šta je potrebno da biste
razumeli i popravili program kada njegovi originalni programeri nisu tu.
Mislite kako da dizajnirate vaše programe da ih napravite jednostavnije
za one koji će ih održavati posle vas.
- 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).
- Zapamtite da postoji i "računar" u "računarskoj tehnici i informatici".
Znajte koliko dugo treba vašem računaru da obavi instrukciju, pročita
reč iz memorije (sa ili bez keša), pročita susednu reč iz diska, i
potraži novu lokaciju na disku. (Odgovori ovde.)
- 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čićete sta drugi
ljudi vole u jeziku, koliko ozbiljno, ili možda koliko malo o tome misle.
- Znaj kada je vreme da se skineš s jezične standardizacije, što je pre moguće.
Sa svim tim na umu, diskutabilno je koliko daleko možete stići samo sa
učenjem iz knjige. Pre nego što sam dobio prvo dete, pročitao sam sve
Kako da knige, i dalje sam se osećao 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 ohrabrujuće za mene nego
hiljade strana napisanih od strane eksperta.
Fred Bruks, u njegovom radu No Silver Bullets (Nema Srebrnih Metkova)
identifikuje plan od tri dela
za nalaženje sjajnih dizajnera aplikacija:
- Sistematično identifikuj najbolje dizajnere što je ranije moguće.
- Dodeli mentora za karijeru da bude odgovoran za razvoj kandidata, i
pažljivo belezi razvoj karijere.
- Omogući za dizajnere u razvoju da komuniciraju i stimulišu jedni druge.
Ovo podrazumeva da neki ljudi već imaju kvalitete neophodne da bi se postao
sjajan dizajner; cilj je prepoznati ih. Alan
Perlis je to rekao lepše: "Svako se moze naučiti da vaja skulpture:
Mikelanđelo bi se verovatno morao naučiti kako da ne vaja. Tako je i sa velikim
programerima".
Znači, samo napred i kupite knigu o Javi; verovatno će vam biti od neke koristi.
Ali neće vam promeniti život, ili vašu stvarnu sveukupnu ekspertizu kao programera
u 24 sata, dana, pa čak i meseca.
Reference
Blym, Benjamin (ed.) Developing Talent in Young People, Balantine, 1985.
Bryks, Fred, No Silver Bullets, IEEE Kompjuter, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lorvence Erlbaum, 1989.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Kejmbridž Univerzitetska Štampa, 1988.
Odgovori
Približna vremena raznih operacija na tipičnom 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 nauče prvo.
Nema jednog odgovora, ali razmotrite sledeće stavke:
- Koristite prijatelje. Kada me neko pita "koji operativni sistem
bi trebao da koristim, Vindovs, Uniks, ili Mak?", moj odgovor je obično: "koristi
štagod tvoji drugovi koriste." Prednost koju dobijete učeći od drugova će nadmašiti
svaku svojstvenu razliku između OS, ili između programskih jezika.
Takođe razmotrite buduće prijatelje: krugovi programera kojih ćete biti deo ako nastavite.
Dali vaš izabran jezik ima veliko rastuće društvo, 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 izvršenja njihovog koda.
Kao rezultat, ovi jezici imaju komplikovane delove dizajnirane za te okolnosti.
Vaša 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.
- Igrajte se. 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 pošto ste završili celu melodiju?
Očigledno, interaktivan način čini učenje jednostavnije za klavir, a takodje i za
programiranje. Insistirajte na jeziku sa interaktivnom mogućnosšu, i koristite je.
Imajući ove kriterijume u vidu, moji predlozi za prvi programerski jezik bi bio
Python ili
Scheme. Ali vaše okolnosti mogu
da se razlikuju, i postoje i drugi dobri izbori. Ako imate manje od deset godina,
mozda ćete više voleti Alice ili Squeak
(stariji učenici će možda takođe uživati u ovim). Važno je da odaberete i počnete.
Dodatak: Knjige i drugi izvori
Nekoliko ljudi je pitalo iz kojih knjiga i veb stranica bi trebalo da uče.
Ponavljam da "učenje samo iz kniga neće biti dovoljno", ali mogu da preporučim sledeće:
- Scheme: Structure and Interpretation of Computer Programs (Abelson & Sussman) (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
onlajn snimljene lekcije
zasnovane na ovoj knjizi, kao i ceo tekst na internetu.
Knjiga je zahtevna, i možda će odbiti neke ljude koji bi inače
mogli biti uspešni sa nekim drugim pristupom.
- Scheme:
How to Design Programs (Felleisen et al.) (Kako napraviti program) je
jedna od najboljih knjiga o tome kako stvarno dizajnirati programe na elegantan i
funkcionalan način.
- Python:
Python Programming: An Intro to CS (Zelle) (Pajton programiranje: uvod u RI) je uvod u Pajton.
- Python: Nekoliko internet tutorijala
je dostupno na Python.org.
- Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi)
(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 više 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.
|
|