3. Web programeri (backend programeri)
3.1 Sta, gde, kako, zasto?
Backend programiranje predstavlja pisanje programskog koda koji se izvrsava na serveru i obavlja odgovarajuce zadatke. Kod je struktuiran kroz funkcije, klase i njihove metode. Objektno ili proceduralno. Sva pravila koja vaze u programiranju, vaze i u Web programiranju.
Za pocetak, potrebno je da odaberete jezik. Ja ih znam nekoliko - PHP primarno, Ruby i delimicno JAVU. Sta cete izabrati zavisi od vas, sta vam lezi najvise ali PHP je dobar start. Lako se uci, ima jednostavnu, cistu sinaktsu, mozete sabirati babe i zabe i manje-vise uraditi sta god hocete. U roku od mesec dana mozete savladati osnove a onda krenuti dalje. PHP je takodje izuzetno dobro podrzan od strane komune, moze da se pokrene i na tosteru - po mom misljenju, dobar za pocetak.
Da li je PHP devojka za sve? Nije. U nekim malo kompleksnijim Web projektima u kojima sam ucestvovao, forsirana je JAVA. Nije bas da sam kontao zasto isprva ali kasnije sam shvatio vrednost celog okruzenja koju ona nudi. Sa PHP-om cete raditi 95% vremena ali, da, postoje i druge platforme koje mozda mogu i efikasnije da zavrse posao.
Sledeca stavka je alat - mnogi pitaju koji alat da koriste za Web. Odmah da znate - kod ne prave alati vec ljudi. Najsavrseniji editor vas ne cini boljim programerom. To je stvar licne preference - neki vole da imaju tonu ispomoci, automatsko zavrsavanje koda, bla trutj, ja volim jednostavnost (editor koji ja koristim, TextMate, je jako nalik na Notepad u kojem ovo i kucam). Tu i tamo poneka pametna stvar je pozeljna ali vremenom ce vas samo usporavati.
Nakon toga, sleduje okruzenje - ako ste se odlucili za PHP i MYSQL, potreban vam je aplikacioni server (iliti web server) poput Apachea ili nginxa, nakon toga i sam MYSQL server kao i instaliran PHP. Sve to, ukoliko niste vicni, mozete naci u mnogobrojnim LAMP tj. WAMP pakovanjima - Linux, Apache, MYSQL, PHP ili Windows, Apache, MYSQL i PHP. Instalacija ima jako mnogo, Google vam moze pomoci da ih nadjete. Idealni su za start i za pocetnike iz prostog razloga sto su ***** proof - instaliraju se iz 10 klikova i nema sanse da bilo sta pokvarite. Konfiguracione fajlove necete videti i nema zastrasujucih crnih terminala sto je za pocetnike savrseno.
Kao backend programer morate dobro poznavati i SQL. Kad kazem dobro ne mislim da umete na papiru da napisete kveri sa 15 LEFT JOIN-a vec da poznajete kako rade storage engini, koje tipove indeksiranja da koristite, kako pravilno da projektujete svoje tabele, da prepoznate spore kverije i da ih optimizujete itd. itd.
Moj savet - ucite linux. Ako zelite da budete dobri backend programeri, know how Linuxa je must. Ne morate da znate cemu sluzi svaki fajl, teoriju kernela i UNIX-a ali dobro poznavanje Linux operativnih sistema, strukture i kako rade je danas neophodno da bi bili dobar Web programer. Mnogi seniori, ili oni koji sebe tako zovu, nemaju dve blage o tome. Ne znaju kako rade aplikacioni serveri, ne poznaju osnovnu teoriju mreza. I samim tim su daleko manje efikasni i nisu u stanju da gledaju tri koraka unapred. Kako se danas sve hostuje na Linuxu (ili 95% stvari) tako je poznavanje te platforme zaista neophodno (cisto ako vam neko lupi neku banalnu stvar kao sto je cron job da ga ne gledate kao tele).
3.2 Dinamicke aplikacije
Kao sto ime samo kaze, pod dinamickom aplikacijom se smatraju one Web aplikacije u cijem sklopu se nalazi odgovarajuca baza. Ta baza sluzi za pohranjivanje odgovarajucih podataka kako bi se oni kasnije prezentovali korisnicima. Na primer, ovaj forum ili Benchmarkov sajt su tipican primer dinamicke aplikacije - kada kliknete na odgovarajucu sobu, izlistavaju vam se teme koje pripadaju istoj. Te teme se sastoje od odgovarajucih informacija poput naslova i sadrzaja i sve to je pohranjeno u bazu.
Da bi lakse razumeli kako to funkcionise, uzecu banalan primer koji oslikava jedan deo funkcionalnosti ovog foruma a to je pisanje odgovora na teme. Jedna tema se sastoji od gomile postova, te postove kucaju posetioci ovog foruma. Putem odgovarajuce forme vi unosite sadrzaj vaseg posta. Kasnije, klikom na odgovarajuce dugme taj sadrzaj se salje na server gde se obradjuje i, ako prolazi validaciju, smesta u bazu. Kada neko drugi dodje i klikne na temu, vas zahtev stize do servera (banalno receno) gde odgovarajuci serverski kod na osnovu ID-a teme zna koje postove da izvuce iz baze; na snagu stupaju delovi koda koji se bave tim delom funkcionalnosti, oni izvlace informacije iz baze i onda se one prezentuju vama u obliku na koji ste navikli. Dakle nije u pitanju nikakva misterija, stvar funkcionise vrlo prosto i jednostavno.
A sad malo plasenja - spomenuo sam termin "server-side" i objasnio da je to kod koji se izvrsava na serveru. Takodje postoji i "client-side" ciji se kod izvrsava na strani klijenta u browseru (Javascript) i taj kod je moguce videti prostim gledanjem fajlova. Danas se sve aplikacije pisu tako da postoji konstantna interakcija izmedju klijenta i servera koriscenje asinhrone komunikacije izmedju njih (AJAX). Uzecu GMail kao odlican primer - otvorite svoj inbox i iako niste uradili refrresh strane, pojavio se novi mail koji je neprocitan. To se desilo zahvaljujuci odgovarajucem kodu na klijentskoj strani koji je naterao vas browser da u pozadini posalje zahtev serveru (proveri ima li novih poruka) a server je dao odgovarajuci rezultat u vidu nove poruke u vasem mailboxu. Zasto sve ovo pisem - hocu da shvatite koliko delova moze da ima jedna aplikacija. Sa jedne strane, tu je klijent sa druge strane tu je serverski kod koji opsluzuje klijenta na zahtev i komunicira sa bazom.
3.3 Kako da krenem da ucim?
Na Internetu cete naci gomilu tutoriala ali ja bih isao sledecim koracima:
1. Familijarizacija sa sintaksom i programskim jezikom - naucite osnovne stvari, ne treba da znate svih 5 000 funkcija napamet
2. Kretanje od prostih primera - povezivanje na bazu, pravljenje osnovnih tabela i unos podataka u iste
3. Nadogradnja na osnovni primer - citanje iz tabela, manipulacija podacima (edit, delete)
4. Pravljenje sortiranja, filtriranja, pretraga
5. Kombincija svega toga sa korisnickim slojevima
6. AJAX
Napravite sebi mali projekat. Ja imam jedan koji sam napravio i koji koristim za ucenje svojih junior programera u firmi. Koncipiran je tako da krecete od osnovnih stvari ka sve slozenijim ali kako se napreduje kroz njega ne napreduje se samo programerski, vec i u nacinu razmisljanja i planiranja to je mnogo vaznije.
Imajte u vidu da i trenirani majmun moze da bude programer. Danas biti programer nije preterano tesko, ima ih tušta i tma (za one koji ne znaju sta to znaci, to znaci da ih ima ko pleve). Zahvaljujuci Internetu, svako danas moze da sedne i da postane PHP programer. Medjutim, da bi ste bili bolji programer stvari ne treba da gledate pravolinijski vec morate da ih posmatrate daleko sire. Programiranje je kreativan proces stvaranja stvari koji zahteva da uvek imate u glavi veliku sliku onoga sto pravite dok stvarate mali deo te celine. Stoga morate dobro da planirate kako cete nesto da uradite, morate imati strukturu koja ce sutra moci lako da se nadogradi. Jer ako nemate strukturu, nacicete se u velikom problemu sutra kada neko dodje i kaze "hajde da ovo izmenimo".
Dokumentujte sve sto radite. Programiranje je proces ludila. Za cetiri meseca kada budete gledali svoj kod, prva recenica koju cete izgovoriti je - na kojim sa ja drogama bio kad sam ovo pisao? Bar je ja cesto izgovaram. Nikad ne razmisljate isto i zato - dokumentujte sve.
Koristite MOZAK - ne oslanjajte se na alate i na rutinu. Svaki problem moze da se resi bar na 5 razlicitih nacina. Ako vam ne ide, menjajte pristup. Ako vam ne ide i posle promene pristupa, ceo koncept je ******. Ne budzite. Budz resenja su super na kratke staze ali su kao gomila nasumicno razbacanih protivpesadijskih mina po polju. Resavaju problem neprijatelja ali sutra kada rata ne bude, zelimo puno srece lokalnom stanovnistvu.
Ne budite robot. Kada radite nesto, uvek mislite o tome kakav ce to imati uticaj na ostatak sistema. Nemojte slepo da kucate kod i da otaljavate stvari.
Planirajte, planirajte i planirajte. Vi gradite sistem, ma koliko jednostavan da je, svaki sistem zahteva plan. Dobar plan znaci dobru organizaciju a to direktno utice na kvalitet i mogucnost buduce nadogradnje.
Mogao bih da vam napisem jos 400 A4 stranica o ovome ali nema svrhe - morate da probate sami i da prodjete gomilu prepreka koje postoje u ovom poslu da bi nesto i naucili ali se nadam da ste shvatili sustinu.
EDIT: napisacu jos nesto - sta da radite kad savladate osnove. Kad uspete da savladate svoj prvi projekat, mozete sebe da nazovete 1/2 junior programerom. To znaci da umete da baratate sa osnovnim MYSQL kverijima, da znate neke osnovne stvari. Onda pokusajte da uvecate vas projekat, da ga ucinite slozenijim i kompleksnijim i da se izborite sa tim. Uporedo krenite da se bavite samim konfigurisanjem okruzenja (php, mysql, apache), pocnite da ucite kako rade, kako se prema vasim potrebama konfigurisu (da, sistemi se uvek zasebno šteluju prema potrebama aplikacije koju pisete); naucite kako mozete da iskoristite prednosti operativnog sistema na kojem ce aplikacija da se hostuje. Prosto, pokusajte da napredujete u tom segmentu optimizacije samih servisa. Nakon toga, nadjite knjigu koja se zove "High performance MYSQL" i naucite je od korica do korica napamet, tako da je znate u po dana u po noci i pokusajte to da primenite u praksi.
Nakon toga ili uporedo bih preporucio sto bolje upoznavanje sa principima asinhrone komunikacije i sta sve moze da se uradi / skrati / poboljsa / unapredi potenciranjem JavaScripta u odnosu na cist serverside kod.
EDIT: Sticajem okolnosti pokrenuta je online IT zjednica pod nazivom Devops (
www.devops.rs) na kojoj je moguce postavljati pitanja i dobiti odgovore direktno od profesionalaca koji su dosta dugo u industriji.