Iz razloga u koje nećemo sad ulaziti, ali koji su uglavnom svima jasni, sve više prijatelja i poznanika me u poslednje vreme pita jedno naočigled jednostavno pitanje – “Kako da postanem programer“?
Pre svega, neophodno je da razjasnimo neke stvari pre početka – programerski zanat je težak i komplikovan, često ni akademski školovani programeri nisu odmah u stanju da se uhvate nekog posla u nekoj od aktuelnih tehnologija bez dodatnog usavršavanja i doučavanja. Učenje programiranja je dug i mukotrpan proces, pogotovo ako do sada niste imali nikakvih dodirnih tačaka sa nekim oblikom programerskog koda. Iz tog razloga budite spremni da uložite izuzetan napor za savladavanje programerskog umeća. To znači da morate biti spremni da izdvojite i po nekoliko sati dnevno za učenje, da ćete često udarati u zid iz razloga koji vam neće biti jasni i da će to učenje iziskivati velike mentalne napore i koncentraciju. Ukoliko niste u mogućnosti to sebi da priuštite, zbog redovnog posla ili nekih drugih razloga, razmotrite mogućnost da svoje obaveze preorganizujete tako da vam to bude moguće. U suprutnom rizikujete da izgubite puno vremena, doživite velike frustracije jer vam nešto nije jasno i zbog njih izgorite u procesu i prestanete sa daljim radom. Onoga trenutka kada prestanete sa daljim radom gurnuli ste sebe dva stepenika unazad, i to dva stepenika koja ste savladali velikim naporom i posvećenošću.
S druge strane, ako se odlučite na ovaj korak i uspete da istrajete, što dalje odmaknete sve lakše će vam ići, i kad savladate neke osnove korišćenjem istih savladaćete i sledeće lekcije, sve dok se jednog trenutka ne osetite dovoljno sposobnim da se prihvatite nekog stvarnog posla. Tog trenutka vaše učenje zaista počinje 🙂 jer nove tehnologije, paradigme i metodike se pojavljuju svaki dan, i što ih više savladate bićete sposobniji i kvalifikovaniji programer. No, u tom trenutku ćete se programiranjem već baviti profesionalno tako da vam bilo kakvo doučavanje neće teško padati.
Druga stvar koju bih želeo da napomenem je, s obzirom na to da danas postoji veliki broj dostupnih tehnologija u svetu programiranja, da ne postoji tačan i jedinstven put kojim treba pristupiti učenju programiranja. Svaki programer će vam reći, na osnovu svog nekog iskustva i škole koju je prošao, da treba da se prvo prihvatite ovoga ili onoga iz tog i tog razloga, i svaki će delom biti u pravu. Na taj način ću pristupiti i ja – plan koji ću izneti dalje je po mom mišljenju najbolji za početnike u programiranju iz razloga koje ću dodatno objasniti. Ovo, naravno, ne znači da je to jedini način, ima drugih, možda će vam neki više odgovarati, biti lakši ili zanimljiviji, na vama je da izaberete jedan pravac i da ga se držite.

Web za početnike
Tehnologija koju vam ja preporučujem je PHP + HTML/CSS. Razlog je jednostavan – PHP je još uvek najrasprostranjenija web tehnologija danas, bilo da planirate da radite kao freelancer ili da se zaposlite u nekoj firmi, kao programer početnik, bez portofolioa, najlakše ćete naći posao u PHPu jer ga ima puno na tržištu. Druga bitna stvar je to što se pomenute tehnologije koriste najčešće za izradu web sajtova, a to su najmanji i najjednostavniji projekti od kojih bi početnici trebalo da krenu. Takođe, to su i projekti koje jedan programer može samostalno da odradi, tako da vam za to nije neophodna pomoć i tim ljudi. Naravno, postoje i mnogo složeniji i kompleksniji sajtovi koje pojedinac ne može sam da obuhvati, ali o tome nećemo ovom prilikom.
Korak prvi – HTML/CSS
HTML i CSS su tehnologije putem kojih se vrši vizuelni prikaz sadržaja na web sajtovima. Svaki sajt koji otvorite u svom browseru (kao i ovaj koji trenutno čitate) je iskodiran putem HTML i CSS direktiva.
HTML je skraćenica za Hypertext Markup Language, i u suštini to je koderska sintaksa putem koje se pozicioniraju i ispisuju elementi na web stranici.
CSS je skup pravila i direktiva kojim se dizajniraju elementi neke web stranice. Putem CSSa se formatiraju tekstovi, bira font i veličina teksta, postavljaju margine, boje elementi itd. HTML i CSS su vrlo usko povezani, praktično ne mogu jedno bez drugog, i iz tog razloga učenje i svi materijali i kursevi im pristupaju kao jednoj celini.
Korak drugi – PHP
Skoro svaka web stranica sadrži statički i dinamički sadržaj. Statički sadržaji su oni koji su uvek isti za sve posetioce sajta, na primer uvek isti logo se prikazuje u vrhu stranice, uvek isti tekst u futeru i slično. Dinamički sadržaj je ono što se menja od posetioca do posetioca. Primera radi, to može biti nešto vrlo prosto poput današnjeg datuma (gde će danas pisati jedan tekst, a sutra drugi), do onih kompleksnijih stranica poput korisničkog profila (ukoliko neki sajt ima opciju registracije i prijavljivanja), raznoraznih anketa, korisničkih korpi kod e-commerce sajtova itd.
Dinamičkim sadržajima na webu se upravlja putem PHPa (ili nekog drugog programskog jezika, opcije su zaista brojne). Možemo kao primer uzeti stranicu rezultata pretrage nekog sajta, pošto je ona uvek stranica sa dinamičkim sadržajem jer zavisi od toga koje ključne reči pretražujemo. Kako to najčešće ide, korisnik ukuca ključne reči i pritisne “Pretraži”, nakon čega PHP program prihvata te ključne reči, kroz svoju implementiranu logiku pretražuje bazu podataka i nakon toga sortira i formatira rezultate pretrage tako da se oni mogu lepo ispisati kroz HTML/CSS. Uopštenije govoreći, PHP služi za sve moguće vidove izračunavanja i postavljanja logike funkcionisanja sajta, upravljanja korisnicima i njihovim sesijama.
S druge strane, PHP je jedan sasvim prosečan programski jezik u kojem postoji 90% komandi i akcija koje postoje i u drugim programskim jezicima, te ako naučite logiku i principe programiranja u PHPu, to znanje moći ćete da iskoristite i u drugim jezicima.
Korak treći – Javascript
Što nas dovodi do JavaScripta. Odmah da razbijemo iluzije – JavaScript nema veze sa programskim jezikom Java, iako delimično dele ime. JavaScript je interni programski jezik svakog web browsera putem kojeg se mogu vršiti neke opreacije na stranici bez kontaktiranja servera. Primera radi, JavaScript se koristi za sve one fine vizuelne efekte na web stranicama, slideshow, pop-up prikaz fotografija, validaciju podataka pri registraciji, dropdown meni funkcije i slično. Naravno, on se može koristiti i za mnogo naprednije stvari, ali će svima za početak biti dovoljno jednostavno poznavanje JavaScripta za implementaciju nekih već gotovih rešenja, kojih ima puno. Danas postoji veliki broj gotovih JavaScript biblioteka, među najpoznatijim su jQuery i Prototype, putem kojih možete implementirati neko od rešenja dosta jednostavnim pozivima u JavaScript kodu. Vremenom ćete, kako sve više budete stasavali kao programer, pisati i neka sopstvena rešenja, a ono što je verovatno najbitnije – znanje koje ste stekli tokom učenja PHP-a će vam dosta koristiti i ovde jer su, kao što je već pomenuto, neke osnovne sintaksni i logički konstrukti isti za skore sve programske jezike.
“Front end” i “back end” programer
U web programiranju, onako dosta generalizovano posmatrano, programerski posao i zadatke možemo podeliti u dva dela – “front end” i “back end“.
“Front end” developeri najčešće imaju jedan tipski posao, a to je kreiranje web stranica na osnovu izdizajniranih rešenja. Drugim rečima, web dizajner nacrta prototipove stranica, kako one treba da izgledaju i taj materijal dostavi front end developeru koji od toga kreira HTML/CSS kod, time praktično spremajući dizajn za web sajt.
“Back end” developeri, s druge strane, su oni koji su fokusirani isključivo na PHP i one akcije i operacije koje se dešavaju “iza kulisa”, uglavnom rade sa gotovim izdizajniranim web stranicama koje samo pune podacima koji su rezultati njihovih programa.
Ovo je sve bitno znati jer vi već nakon savladavanja znanja iz HTML/CSSa i nekih osnova JavaScripta možete da prihvatite jedan “front end” posao, i da se kroz njega dalje usavršavate, ali i da počnete da stičete nagradu za uložen trud. Profesionalno iskustvo je izuzetno bitan deo procesa učenja i sazrevanja jednog programera, pa vam ovaj “međukorak” može dodatno koristiti – pored toga što ćete zaraditi nešto novca, steći ćete iskustvo rada sa klijentima, osetićete šta to znači i kako to izgleda kada vam neko šalje web development zahteve, i kako je raditi pod pritiskom i imperativom rezultata, koji umeju biti ponekad malo stresni, ali su izuzetno efikasni u vašem procesu učenja. Stvari koje tada postignete i naučite tom prilikom pamtićete jako dugo i primenjivaćete ih bez muke u budućim projektima.
Materijali
S obzirom na popularnost ovih tema materijala za učenje ima neograničeno puno. Mnogi su i besplatni, neki se plaćaju, neki su samo pisani, neki interaktivni, izbor vam je zaista širok i možete odabrati opciju koja vam najviše odgovara.
Moj savet vam je da uzmete po jednu knjigu za obe oblasti (HTML/CSS i osnove JavaScripta najčešće idu u komadu, PHP ide zasebno), i da radite po njima paralelno uz neke od interaktivnih kurseva na webu.
Pri izboru knjiga konsultujte Amazon i pročitajte iskustva kupaca, to će vam pomoći pri odabiru one prave, a sužavanje izbora možete uraditi u Google pretragama.
Interaktivnih kurseva takođe ima veliki broj, moj prvi predlog će uvek biti CodeSchool koji ima odvojene kurseve za HTML/CSS i JavaScript, a organizacija kursa im je jako zabavna i jednostavna. Tutsplus sajt je takođe opcija gde možete naći veliki broj besplatnih kurseva, a recimo Pluralsight je opcija koja se plaća ali sadrži ogroman broj oblasti koje nisu isključivo sužene na IT. Codecademy je još jedna od opcija koja takođe nudi besplatne kurseve.
O kursevima i školama programiranja
Kursevi i škole programiranja mogu da vam pomognu u celom ovom procesu, ali nisu neophodni, i pre svega, nisu dovoljni! I pored kurseva, časova i vežbi najveći deo napora morate vi sami uložiti u samostalan rad i vežbanje. Bez toga ne postoji kurs koji će vas spremiti za ono što želite.
Sa te strane, ja nisam pobornik takvih kurseva jer koštaju puno a većinu materijala imate dostupno online, neke čak i u vidu video tutorijala i vežbi, organizovanih u kurseve. No ako mislite da bi vam školski rad sa tutorom pomogao, pohađanje nekog kursa je dobar način da se učvrsti kontinuitet u vašem radu i učenju, a to je opet bitna stavka za konačan uspeh.
Ukoliko se ipak odlučite za pohađanje, birajte kurseve koji pokrivaju što veći broj oblasti i koji su dugotrajni. Po mojoj proceni, osobi koja nema programerskog predznanja će trebati oko godinu dana i mnogo sati rada da bi postala programer sposobna da odradi neki posao samostalno. Kursevi koji zbijaju gradivo u kratak rok ne pokrivaju dovoljno široko oblasti koje obuhvataju i iz njih ćete izaći sa nekim vrlo ograničenim znanjem, nedovoljnim za bilo kakav profesionalni rad.