- Učlanjen(a)
- 30.07.2000
- Poruke
- 5,577
- Poena
- 770
Ovo mu dođe kao mešavina saveta i bloga. Počinjem ovaj (sticky) thread, jer se ova pitanja postavljaju već po hiljaditi put i uvek, ali uvek me zapanji količina nekompetentnih odgovora ili odgovora koji totalno promašuju temu ili su (iz nehata?) parcijalni. Žele ljudi da pomognu, savetuju i sve je to ok, ali suviše često se mešaju babe i žabe i postavljači pitanja se sasvim nepotrebno mogu baciti na pogrešan, dug i trnovit put da bih mogao i hiljadu i prvi put to da prećutim.
Prvo uobičajeni pogrešni saveti, koncepti i shvatanja:
1. "Šta je potrebno da naučim da bih programirao?" se interpretira i svodi na "koji programski jezik da izaberem". [Ne vidi se, ali ovde se krstim] Programiranje je daleko opširniji koncept; programski jezik je samo alat. Možemo tako da izaberemo najbolji set šerpi, noževa, začina i ostalog, ali to nas ne čini kuvarima, zar ne? Treba znati kako kuvati - šerpa i začin će se logički izabrati prema tome šta se trenutno kuva.
2. "Objektno programiranje je teško i komplikovano". "...i zato je najbolje da kreneš da učiš koristeći neki programski jezik koji niko živ od programera ne koristi u normalne (komercijalne) svrhe već 15-20 godina, pa kad savladaš taj jedan aspekt programiranja ili programskih jezika, onda ćeš promeniti jezik da bi savladao neki drugi koncept". Ceo taj stav "u svojem učenju treba da promeniš 15 jezika i tako prođeš sve faze koje je proživelo programiranje od kasnih '70" je toliko pogrešan, da prosto nemam reči:
3. Neretko se ne razlikuje programski jezik od frejmvorka u objašnjavanju komplikovanosti, pa sve zajedno ispada "komplikovan i težak jezik".
Retko kada se mogu i čuti neka dodatna pitanja - imaš li kakvo predznanje, školuješ li se (ili radiš) već u tom pravcu, imaš li neko konkretno polje interesovanja ili neka ograničenja po tom pitanju itd. Jesi li svestan da je to zanimanje u kojem se non-stop uči, do kraja veka (ili prekvalifikacije :d ), jer je oblast vrzino kolo? Osim ako nameravaš da radiš knjigovodstvene programe za Dos u Kliperu, onda ti je svejedno.
Dobro, da završim sa kritikom ovde, a od sledećeg posta krene malo konstruktivnije.
Prvo uobičajeni pogrešni saveti, koncepti i shvatanja:
1. "Šta je potrebno da naučim da bih programirao?" se interpretira i svodi na "koji programski jezik da izaberem". [Ne vidi se, ali ovde se krstim] Programiranje je daleko opširniji koncept; programski jezik je samo alat. Možemo tako da izaberemo najbolji set šerpi, noževa, začina i ostalog, ali to nas ne čini kuvarima, zar ne? Treba znati kako kuvati - šerpa i začin će se logički izabrati prema tome šta se trenutno kuva.
2. "Objektno programiranje je teško i komplikovano". "...i zato je najbolje da kreneš da učiš koristeći neki programski jezik koji niko živ od programera ne koristi u normalne (komercijalne) svrhe već 15-20 godina, pa kad savladaš taj jedan aspekt programiranja ili programskih jezika, onda ćeš promeniti jezik da bi savladao neki drugi koncept". Ceo taj stav "u svojem učenju treba da promeniš 15 jezika i tako prođeš sve faze koje je proživelo programiranje od kasnih '70" je toliko pogrešan, da prosto nemam reči:
- prvo, zato što ima smisla jedino ako se u IT-ju pojavi neki pandan "istorije umetnosti", pa u okviru te oblasti ("istorija informatike") neko želi da postane IT kustos. Ili eventualno predavač na univerzitetu, pa je samo proučavanje jezika i programiranja cilj per se. U suprotnom, dovoljno je da se te faze prouče ukratko, radi opšte IT kulture (pogotovo za programera), ali uopšte nisu potrebne da bi se pristupilo učenju.
- drugo, što se vraćamo na tačku 1. - koncepti u programiranju se pokrivaju/zamenjuju programskim jezicima i njihovim mogućnostima. Što je apsurdno - "if" grananje ili "while" petlja ima isti smisao, logiku (često čak i sintaksu) u strukturnim i objektno orijentisanim jezicima, bio to C, PHP, Java ili C++. Poziv funkcije i poziv metode objekta se u pojedinim jezicima interno različito tretiraju, ali imaju sasvim istu namenu - da se određeni zadatak koji se ponavlja izoluje u jednu rutinu; i osobine su iste (naziv, tip, lista argumenata...). Može da se uzme bilo koji moderni (OO) programski jezik i na njemu izvežbaju osnovne strukture, jer su one delovi i takvog jezika, ne samo strukturnih.
- zato što objektno orijentisano programiranje nije nešto komplikovano, teško ili na neki način mistično, za šta je potreban viši nivo poimanja ili svesti, pa da se na njega mora sa nečega preći. Naprotiv, objektno orijentisano programiranje logičnije i razumljivije, jer bolje opisuje stvarni svet. OOP je možda po pojavljivanju pravio u početku problem ljudima koji su pre toga godinama progamirali u fortranu, c-u ili nekom sličnom jeziku, pa su već imali u glavi rutinski način razmišljanja koji je trebalo promeniti. Ali početnik uopšte nije u istom položaju; on je tabula raza u tom pogledu. A ukoliko mu je koncept objekata ili neki drugi osnovni koncept (npr. event-driven programming) predstavljaju problem u pogledu razumevanja pojmova, onda je bolje da digne ruke od programiranja dok još ima vremena. Ima u IT-u i drugih zanimanja od kojih takođe može vrlo lepo da se živi.
- danas maltene 98% jezika u upotrebi podržava objekte, i obični skript-jezici (čak i u jednom delu slučaja mešovitog koda, gde se koristi inline assembler, taj asm kod može da radi sa objektima, tj. radi sa atributima objekata). Samo neke vrlo specifične primene zahtevaju vrlo specifične programske alate, koji nisu (u ovom trenutku) objektno orijentisani.
- objektno orijentisano programiranje ima već dopune i nadgradnje (npr. aspect oriented programming) i povratak na prethodne generacije je više od jednog koraka unazad. Nekako imam utisak da pojedini ljudi nisu svesni koji je trenutni presek tehnologije u ovoj oblasti i koliko se s tim shvatanjima kasni; s obzirom na dinamiku u IT-u, OOP nije već dosta dugo nikakva novotarija (na koju treba preći sa nečega), već normalno, podrazumevano (default) stanje stvari. Praktično, već matoro.
- menjati n jezika u toku procesa učenja je prosto kontraproduktivno. Ukoliko se za objašnjavanje koncepta mora menjati jezik, ta sama promena odvlači pažnju, a čovek mora da se koncetriše na razumevanje samog koncepta. Za konkretno vežbanje u toku učenja treba izabrati neki moderan jezik, koji podržava što veći broj modernih koncepata i mogućnosti, da bi se na jednom te istom jeziku sve te stvari mogle ilustrovati. Idealno bi bilo da je taj jezik u širokoj komercijalnoj upotrebi, tj. da bi u njemu i nakon učenja moglo da se nastavi raditi, prosto zbog neke rutine (tj. brzine/efikasnosti), jer je u njemu proveo najviše vremena.
3. Neretko se ne razlikuje programski jezik od frejmvorka u objašnjavanju komplikovanosti, pa sve zajedno ispada "komplikovan i težak jezik".
Retko kada se mogu i čuti neka dodatna pitanja - imaš li kakvo predznanje, školuješ li se (ili radiš) već u tom pravcu, imaš li neko konkretno polje interesovanja ili neka ograničenja po tom pitanju itd. Jesi li svestan da je to zanimanje u kojem se non-stop uči, do kraja veka (ili prekvalifikacije :d ), jer je oblast vrzino kolo? Osim ako nameravaš da radiš knjigovodstvene programe za Dos u Kliperu, onda ti je svejedno.
Dobro, da završim sa kritikom ovde, a od sledećeg posta krene malo konstruktivnije.