/kako-postati-programer

Uputstvo za sve koje bi želeli da nauče da programiraju, a nisu završili IT studije

Kako krenuti sa programiranjem

Uputstvo za sve koji bi sami želeli da nauče da programiraju

Koji je cilj ovog uputstva?

Cilj uputstva je da kandidatima predstavi najefikasniji put za učenje programiranja i dolaska do nivoa koji omogućava zaposlenje. Ovo podrazumeva i "hvatanje krivina", što znači da se neki bitni koncepti svesno preskaču (ili stavljaju u drugi plan) kako bi se što pre stiglo do suštine. Ukoliko kandidat želi temeljno i dubinsko upoznavanje sa materijom, najbolje je da upiše neki od fakulteta sa računarskim smerom. Ovo uputstvo nije namenjeno njima.

Kome je ovo uputstvo namenjeno?

Ovo uputstvo je namenjeno ljudima koji nisu studirali ili završili bilo kakvu školu IT vrste (elektronski/elektrotehnički fakultet, višu IT školu itd). Oni solidno barataju računarom, koriste svakodnevno internet za razonodu, znaju da koriste osnovne programe koji prosečan računar ima (Word, PowerPoint, Skype). Programiranje su probali eventualno u srednjoj školi u okviru časova informatike, ali nemaju većeg iskustva sa tim.

Oni žele da nauče da programiraju, ali nisu spremni da upisuju fakultet ili državnu školu. Krajnji cilj im je da nađu zaposlenje u ovoj oblasti i da od tog posla žive.

Na koji tip programiranja ovo uputstvo cilja?

Na web programiranje. Ovaj tip programiranja obično podrazumeva pravljenje web sajtova. Svi internet sajtovi koje posećujete su nastali na ovaj način. Uputstvo je pre svega posvećeno web programiranju iz dva razloga:

  1. Većina programera će se složiti da je, za nekog ko se nikada nije bavio programiranjem, najlakše upoznati se sa web programiranjem
  2. Gledajući IT firme u Srbiji po vrsti, ubedljivo najveći deo (sigurno preko 50%) se bavi web programiranjem, te su šanse za zaposlenje tu i najveća

To što je web programiranje najbolji izbor za kompletnog početnika ne znači da ćete za mnogo kraće vreme dostići nivo znanja za koji bi vam trebalo mnogo više kod nekog drugog tipa programiranja (Java, C++, itd), već samo da sa relativno malo znanja možete da dobijete korisne rezultate. I dalje važi da je za vrhunskog web programera potrebno isto što i za bilo kog drugog - mnogo rada, učenja, posvećenosti i istrajnosti.

Preduslovi

Volja i istrajnost

Prvi i najbitniji uslov je jaka volja. Potrebno je da zaista želite da uđete u svet programiranja. Treba da budete svesni da programiranje, kao i bilo koji vid učenja, zahteva posvećenost i disciplinu. Programiranje se studira sa razlogom, a te studije obično traju 5 godina takođe sa razlogom - zato što ima puno toga što treba savladati kako biste bili dobri u tom poslu. Samim tim, treba znati da je, za nekog ko se nikada nije bavio progamiranjem, potrebno bar 6-12 meseci ozbiljnog učenja i rada pre nego što se uopšte može razmišljati o nekoj neplaćenoj praksi u programerskoj firmi.

Engleski jezik

Poznavanje engleskog jezika je takođe jedan od najbitnijih faktora za učenje programiranja. Nije apsolutno neophodan uslov, ali je ogromna prednost. Glavni razlog za ovo je to što je najveći deo tutorijala (uputstava) za programiranje napisano na tom jeziku. Pored toga, svi najbitniji sajtovi gde programeri mogu da se obrate za savet, a koji su jako korisni za svakog početnika, su takođe na engleskom jeziku.

Minimalni nivo koji bi omogućio nesmetano učenje programiranja je onaj gde kandidat može da razume pisani engleski. Nije potrebno razumeti usmeni, ali naravno da znači imajući u vidu da je sve više i više materijala i na Youtube-u.

Posebna priča je nivo koji je potreban za ozbiljno bavljenje ovim poslom: što više, to bolje. Ko zna engleski tako da može tečno da ga govori, lakše će moći da komunicira sa svojim klijentima, što se obično pozitivno odražava i na platu.

Moguće je naučiti i programiranje bez engleskog, doduše dosta teže. Ali razmislite: većina programerskih firmi u Srbiji radi za inostrane klijente. Da li želite da maltene budete odsečeni od bilo kakve mogućnosti da radite za strance, gde su uslovi (znači i zarada) uvek bolji nego domaćih klijenata?

Sve u svemu, ako ne znate dovoljno engleski, krenite što pre da ga učite! Čovek vredi onoliko koliko jezika poznaje!

Alati

Hardver

  • Računar - za programiranje nije potreban jak računar - bilo koja mašina kupljena u poslednjih 4-5 godina će završiti posao (može i starija, mada će komfor u radu biti manji). Nije potrebna jaka grafička kartica niti mnogo RAM memorije, mada ovo drugo jeste poželjno.

    • Monitor - bilo bi dobro da je monitor veće dijagonale, čisto zbog preglednosti, ali nije ni to nephodno. Bilo šta preko 20 inča će biti sasvim ok za udoban rad. Profesionalci doduše vole da vežu dva ili čak i više monitora, što poboljšava udobnost, naravno.
  • Internet - pristup internetu je važan, jer omogućava korišćenje online dokumentacije i tutorijala za učenje. Brzina nije bitna - sve što je dovoljno za prosečno surfovanje, biće sasvim ok i za programiranje.

Softver

  • Editor - ovo je program u kome ćete kucati svoj kôd. Za početnika izbor nije toliko bitan dokle god se ne koristi Notepad iz Windows-a. Odličan za početak je Notepad++. Kada se dovoljno napreduje u znanju, valja razmisliti i o malo ozbiljnijim editorima kao i celim razvojnim okruženjima (IDE-ima) poput:

    Sublime Text 3 (može se koristiti besplatno)

    • Jako je korisno ovladati korišćenjem editora, u smislu da poznajete sve shortcut-ove na tastaturi i da se oslanjate na miša što je moguće manje (jer time postajete znatno brži u svom radu). Postoji sjajan tutorijal za Sublime koji pokazuje sve njegove kvalitete i mogućnosti, a nalazi se ovde.

    Visual Studio Code (može se koristiti besplatno)

    Brackets (može se koristiti besplatno)

    Atom (može se koristiti besplatno)

    PhpStorm (plaća se, prvih 30 dana besplatno)

    WebStorm (plaća se, prvih 30 dana besplatno)

    Netbeans (može se koristiti besplatno)

    Vim - (može se koristiti besplatno)

    • Editor za izuzetno napredne korisnike koji se može koristiti bez dodirivanja miša. Zahteva jako puno truda da se nauči, ali njegovi ljubitelji tvrde da onda, po brzini rada/kucanja, nijedan drugi editor ne može da mu parira
  • Pretraživač(i) - rezultat vašeg rada (programiranja) je moguće videti u browser-u (pretraživaču). Za web programiranje, najviše se koriste Google Chrome i Mozilla Firefox, kao i Mozilla Firefox za programere. Neki subjektivni utisak je da je Chrome najbrži, ali da isto tako zahteva i jak računar da bi se ta nadmoć u brzini osetila.

  • Lokalni web server - ovo je softver koji nije neophodan na početku učenja, već u kasnijoj fazi kada polaznik više ovlada osnovnim tehnologijama. Jedan od dobrih rešenja je XAMPP, ali ima dosta različitih servera koji jako dobro završavaju posao.

Oblasti učenja

Postoje dve oblasti - jedna je striktno programiranje, dok druga obuhvata stvari koje su neophodne za produktivnost i efikasnost u radu. Ove dve oblasti bi bez problema mogle paralelno da se izučavaju.

Programiranje

Prve četiri stavke su obavezne da bi se dostigao nivo dovoljan za neko početničko programiranje, dok stavke 5 i 6 obuhvataju naprednije koncepte koji nisu obavezni u startu:

  1. HTML i CSS
  2. JavaScript i manipulacija DOM-om (ranije se za manipulaciju koristio jQuery, a sada može i bez njega, te je bolje proučiti taj pristup)
  3. PHP i MySQL
  • 3a. Izrada jednostavnog web sajta
  1. PHP Framework - osnove
  • 4a. Prebacivanje prethodnog sajta u PHP framework i dodavanje funkcionalnosti
  1. Frontend JavaScript Framework
  2. Pisanje testova (Backend i Frontend)

Redosled oblasti jeste bitan i ide od osnovnih koncepata prema naprednim. Oblasti se ne uče nezavisno od prethodno pređenih, već se nadograđuju na naučeno. Na primer, kada pređete HTML i CSS, onda učite JavaScipt i jQuery, ali pri tom sve vreme koristite i HTML i CSS. Potom, kada pređete na PHP, opet sa njim koristite i prethodno pređeno. Tako do kraja.

Ovo uputstvo će pokriti prve četiri oblasti.

Produktivnost

  • Github
  • Upravljane projektima

Učenje

Programiranje

Pod pretpostavkom da kandidat zna engleski, najbolje mesto za početak je Code Academy. Nakon što napravite nalog, na ovom sajtu ćete kroz interaktivne tutorijale moći da pređete prve tri oblasti sem MySQL-a (znači HTML, CSS, JavaScript, jQuery i PHP). Tutorijali su relativno kratki i prilagođeni apsolutnim početnicima.

Paralelno sa ovim tutorijalima, valja posećivati i W3Schools. Ovaj sajt takođe ima tutorijale, ali odrađene na malo drugačiji način. Oni pokrivaju sve oblasti iz sve prve 3 oblasti uključujući i MySQL. Povrh toga, postoje i tutorijali za mnoge druge oblasti web programiranja koje ovo uputstvo ne pokriva.

Jako je bitno da se učenju pristupi temeljno - nije dovoljno samo proći kroz tutorijale, potrebno je razumeti ih do detalja. Zbog toga, treba što više eksperimentisati sa primerima čak i izvan tutorijala. Interesuje vas kako da prikažete precrtana slova u HTML-u? Izguglajte! Hoćete da kvadrat na ekranu promeni boju iz crvene u plavu na klik na dugme? Izguglajte! Što više budete vežbali, više ćete i naučiti.

U vezi sa prethodnim savetom - nakon što budete prešli oblasti 1 i 2, kako na CodeAcademy, tako i na W3Schools, bilo bi dobro da bar nedelju-dve posvetite primeni tog znanja u nekom konkretnijem primeru. Recimo, da probate da sastavite stranu koja će da liči na spisak proizvoda sa WinWin-ovog sajta? Ili možda stranica Politike sa najnovijim vestima? Ne treba očekivati da možete da napravite istovetne stranice, samo nešto što približno liči na to. U procesu rada i učenja, kad god nešto nije jasno, treba se najviše oslanjati na Gugl, jer će vam on uvek dati odgovor ako umete da postavite pravo pitanje. U 99.99% slučajeva, neko je već imao problem sa kojim se vi susrećete, rešenje je već negde zapisano, samo ga treba naći.

Nakon koraka 1 i 2, koraku 3 treba pristupiti na isti način - preći sve tutorijale, a onda odraditi što je moguće više primera sami. Dobar sajt za učenje PHP-a je PHP.net. Nakon toga možete krenuti sa izradom svog prvog veb-sajta (korak 3a). To može biti jednostavna prodavnica sa spiskom proizvoda, korpom, registracijom korisnika.

Pošto ste napravili svoj prvi sajt i potvrdili da radi solidno, možete se posvetiti sledećem koraku, a to je programiranje istog sajta ispočetka, ali ovog puta u PHP framework-u. Jedan od poznatijih framework-ova, koji još ima i dosta veliku zajednicu, a odličan je za početnike, je Laravel.

Framework-ovi se u velikoj meri baziraju na objektno-orijentisanom programiranju (skraćeno OOP), a to je opet nauka za sebe koju takođe treba poznavati, bar u osnovama. Ovo programiranje inače nije vezano za određeni programski jezik, već se u većini može primeniti. Postoji puno različitih tutorijala za OOP i to možete učiti paralelno sa uvođenjem framework-a, ili pre njega. Inače, OOP kao predmet se uči na nižim godinama IT studija, kao osnova za sve dalje učenje programskih jezika.

Ako ste sve navedeno dovoljno temeljno prešli, treba da budete u poziciji gde već poznajete osnovne principe web programiranja i umete da napravite jednostavnije veb sajtove. Takvo znanje bi trebalo da bude dovoljno za praksu u nekoj firmi koja se bavi sličnim uslugama.

Alati za produktivnost

Prvi alat za produktivnost je Github. To je upravo sajt na kome se nalazi ovaj dokument. Github služi za skladištenje vašeg kôda online, pri čemu se svaka njegova verzija pamti u obliku tzv. commit-ova. Ako odete na spisak commit-ova za ovaj dokument, moći ćete tačno da vidite kako je ovaj dokument nastajao, korak po korak. Github je jako popularan među programerskim firmama, te je njegovo poznavanje prednost.

Drugi alat, ili bolje reći set alata, jesu sajtovi za upravljanje projektima. Oni omogućavaju nadzor i upravljanje razvojem projekata kao i programerima koji na njima rade. Konkretno, jedna od glavnih karakteristika je mogućnost dodeljivanja zadataka (task-ova) programerima i praćenje njihovog napretka. Jedan od jednostavnijih alata ovog tipa je i Trello.

Github i Trello možete da koristite kada krenete da pravite sopstveni sajt - korak 3a. Doduše, Trello (i slični alati) najviše imaju smisla kada na projektu radi ceo tim, ali vas niko ne sprečava da sâmi sebi zadajete taskove i na taj način vodite evidenciju o svom napretku. Evo kako bi Trello tabla mogla da izgleda:

Trello tabla

Koristite Gugl

Većina čak i iskusnih programera se svakodnevno oslanja na Gugl pretragu kako bi došla do rešenja za probleme koje imaju u svom radu. Zato je izuzetno bitno da koristite pretragu i da umete efikasno i brzo da pretražujete. Uvek treba imati na umu da je problem koji imate, posebno ako ste početnik, već negde neko imao i rešio ga, te se i odgovor verovatno nalazi negde online, samo ga je potrebno naći.

Znači, što više budete koristili tuđa iskustva u radu (koja ćete nalaziti preko pretrage), brže ćete i sami napredovati sa svojim znanjem.

Sajtovi za učenje

Sajtovi sa dokumentacijom i gde se mogu naći odgovori na različita pitanja

  • StackOverflow - Broj 1 mesto za svakog programera koji ima neki problem. Najverovatnije sajt koji ćete najčešće posećivati u toku svog učenja
  • PHP.net - Sajt sa detaljnom dokumentacijom za PHP programski jezik
  • Laravel - Sajt sa dokumentacijom za Laravel PHP framework

Sajtovi sa tutorijalima

  • Code Academy - Sadrži interaktivne tutorijale za apsolutne početnike
  • W3Schools - Takođe tutorijali za različite programerske discipline
  • Udemy - Slično prethodnim
  • Lynda - Kao i prethodni
  • Coursera - Sadrži tutorijale za jako širok spektar znanja i nauka (ne samo programiranje), besplatan, ali je u formi koja mnogo više odgovara studiranju na fakultetu, nego klasičnim tutorijalima

Za neke od ovih sajtova treba plaćati mesečnu pretplatu. Iako ima mnogo drugih besplatnih rešenja, i plaćeni sajtovi imaju svojih prednosti, te bi trebalo razmisliti o ulaganju novca u ovako nešto. Proces plaćanja ne bi trebalo da vas brine - ako imate račun u banci sa dinarima, lako ćete otvoriti PayPal nalog i platiti kurseve.

Sajtovi na srpskom

  • EliteSecurity - Programerski forum za ex-yu prostor, detaljno podeljen i organizovan po programskim jezicima. Nije više toliko posećen kao što je nekad bio. Ime sajta totalna nepoznanica.

Privatne škole programiranje - da ili ne?

Ukoliko nemate radnu naviku ili vam je teško da sami radite kod kuće, privatne škole mogu biti dobar izbor. Još jedna prednost je i to što na kraju kursa dobijate i određeni sertifikat koji potvrđuje stečena znanja. Ipak, na intervjuu za posao uvek će se više ceniti projekti iza vas (bili oni čak samo deo učenja, a ne posla) nego sertifikat iz privatne škole.

Takođe, imajući u vidu da je profesija programera jako cenjena i da se može lepo zaraditi, za svakog iole dobrog programera nema smisla da radi u privatnoj IT školi gde su plate sigurno neuporedivo niže nego u programiranju. Drugim rečima, najbolji programeri nisu predavači u školama, već su zapošljeni u programerskim firmama. To ne znači da se u privatnim školama nema šta naučiti, jer dobar predavač ne mora obavezno da bude i izuzetan programer, ali je činjenica da se najkvalitetnije znanje stiče kroz sâm rad, a još bolje se napreduje ako imate pored sebe kolegu koji je iskusniji od vas.

Reference autora ovog uputstva

LinkedIn profil autora

Kreator ovog uputstva se profesionalno bavi web programiranjem od 2011. godine. U toku svoje karijere je pomogao dvojici prijatelja koji nisu iz IT sveta da nauče da programiraju i uspešno se otisnu u IT vode. Obojica su sada zapošljeni na stalno, od čega jedan radi direktno za inostranog klijenta već više od godinu dana.

Predavanja autora:

Napomene

Ne postoji univerzalan i jedinstven odgovor na pitanje kako naučiti programiranje. Pristup iznešen u ovom tekstu se neće dopasti svim programerima; on je pre svega rezultat iskustva koji je autor stekao tokom svog rada sa prijateljima koje je obučavao.

Želite da date svoj doprinos ovom tekstu?

Ako ste programer, ne slažete se sa pristupom učenju koji je ovde opisan, a verujete da imate dobre argumente da se neki delovi teksta promene, ili ste početnik koji želi da nauči programiranje kome određeni delovi teksta nisu jasni i želi da autor bolje objasni, možete prijaviti problem ovde pa ćemo zajedno prodiskutovati i unaprediti sadržaj.