Želiš biti PHP developer u Inchoou, a ne znaš od kuda krenuti učiti i koja razina znanja ti je potrebna? Onda će ti dobro doći ovaj vodič!

PHP vodič Inchoo posao backend developer

Inchoo pruža potpunu uslugu stvaranja eCommerce rješenja, od dizajna, izrade i optimizacije postojeće web trgovine do migracije na drugu platformu ili stvaranja nove trgovine od samog početka. U tom poslu smo već 10 godina te iza sebe imamo 450 projekata s više od 150 klijenata iz 50 zemalja.

Trenutno brojimo 50-ak zaposlenika, od kojih su velik broj PHP developeri.

Put do PHP developera

S obzirom na velik broj projekata na kojima radimo, u Inchoou smo u stalnoj potrazi za kvalitetnim programerima, bilo da su oni iskusni senior developeri ili perspektivni početnici. Često dobivamo upite o tome kako postati programer. Odmah ćemo vam reći – nije lako. Fakultet i razne vanjske edukacije često nisu dovoljne da postanete dovoljno vješti u tom području, nego ćete morati i samostalno učiti.

Ovaj je dokument namijenjen svima onima koji počinju učiti programirati te onima koji već imaju programerskog iskustva i smatraju se potencijalnim developerom za Inchoo. Ako želite graditi karijeru u web developmentu, uz učenje programskih jezika svakako je bitno poznavati osnove baza podataka te imati razumijevanja kako web funkcionira. Česte su prijave kandidata koji su proveli određeno vrijeme radeći u nekom frameworku (npr. Laravel, Symfony), ali ne razumiju osnove baza podataka i weba jer se framework pobrine za low-level stvari.

Zato smo sastavili ovaj Starter Kit kako bismo vam pokazali odakle početi, ali i pomogli razlučiti bitno od nebitnog. Svrha pitanja u tekstu koji slijedi je da usmjeri kandidata prema znanjima koje je potrebno steći kako bi bio kandidat za programersku poziciju u našoj tvrtki.

Web

Brojni kandidati mjesecima ili čak godinama rade na učenju nekog od web programskih jezika, a ne pokažu razumijevanje kako web funkcionira. Smatramo kako takva osoba onda uđe u začarani krug gdje daljnje učenje samog programskog jezika ne vodi prema povećanju sposobnosti rješavanja programerskih izazova u web okolini.

Koliko god vam sljedeća pitanja bila banalna, zapitajte se znate li ih uistinu odgovoriti:

  • Što je to Internet i kako funkcionira?
  • Što je server, a što klijent?
  • Što je URL? Što je domena? Čemu služi DNS?
  • Što je web preglednik (browser) i čemu služi?
  • Što se događa kad upišemo URL u browser (recimo: http://www.osijek.hr)? Ne morate znati svaki detalj, ali morate na jednostavan način, kao da objašnjavate svojoj tetki, ispričati što se sve događa.
  • Što je HTTP, a što HTTPS protokol i koja je razlika?
  • Što je “HTTP Request”, a što “HTTP Response” i od čega se sastoje?
  • Koje HTTP Request metode postoje i kako ih identificirati?
  • Što su HTTP Status Codes? Nabroji par najčešćih.
  • Kako možemo pogledati HTTP Request i Response detalje unutar web preglednika (browsera)?
  • Što su i čemu služe kolačići (Cookies)? Gdje se spremaju i kako rade?
  • Što je i čemu služi Session? Gdje se sprema i kako radi?

Linkovi:

HTML & CSS

Iako posao backend developera primarno uključuje rad na server strani, potrebno je bar osnovno znanje HTML-a i CSS-a. Pitanja za samoprovjeru:

  • Koja je struktura HTML dokumenta?
  • Nabrojiti barem 10 HTML tagova i znati čemu služe.
  • Što su meta tagovi?
  • Koji form input tipovi postoje?
  • Što je novo u HTML 5?
  • Što je CSS i čemu služi?
  • Koji CSS selektori postoje?
  • Kako dodajemo CSS u HTML dokument?
  • Koja je razlika između block i inline elemenata?
  • Što je RWD (Responsive Web Design) i kako radi?
  • Znate li “iz glave” izdiktirati HTML konstrukciju za 3×3 tablicu gdje je prvi red zaglavlje, a ćelije su u zadnjem redu spojene?

Ukratko, PHP developer mora poznavati osnove HTML-a. Osnove se usvoje za tjedan dana kroz većinu dostupnih HTML tutoriala na webu.

Razvojno okruženje

Nakon prethodno navedenih pitanja vezanih uz opće znanje weba, možemo krenuti u namještanje radnog okruženja za učenje.

Svakom developeru treba razvojno okruženje. To je skup alata za razvoj, testiranje i debugiranje vašeg softwarea. Za razvoj PHP aplikacija prije svega nam je potreban web server (Apache) koji može izvršavati PHP kod te server baza podataka (MySQL). Ako ste početnik u PHP programiranju, od pomoći će vam biti aplikativna rješenja poput AMPPS (Mac/Windows) – Apache, Mysql, PHP/Perl/Python, ili LAMP (Linux) – Linux, Mysql, PHP/Perl/Python koji u jednom instalacijskom paketu podešavaju kompletan server za vas. Iako je dovoljno za početak učenja koristiti Windows/Mac operativni sustav, backend developeri u našem radnom okružju koriste proizvoljnu distribuciju Linuxa za development zbog lakšeg snalaženja na produkcijskim serverima.

U nastavku su nabrojani neki od preporučenih alata za početnike i alati za naprednije.

Početno Napredno
ampps xdebug
IDE (Visual Studio Code, Sublime, Atom) MySQL console
GIT & GitHub
phpMyAdmin

PHP

Idući korak su samostalne sistematske edukacije s materijalima dostupnim putem interneta ili putem tečajeva. Portali poput codecademy.com, w3schools.com, tizag.com i freecodecamp.com poznati su u programerskoj zajednici kao dobar primjer početne edukacije i usmjeravanja u određenu tehnologiju (PHP, MySQL, XML). Također, neki će odabrati tečaj u nekoj od postojećih obrazovnih ustanova poput Edunove ili Algebre.

Jednom kada usvojite osnove PHP-a i tehnologije s kojom se isprepliće, slijedi detaljnije upoznavanje sa samim PHP programskim jezikom. Language References je dio službenog PHP priručnika koji je obavezno štivo za sve koji misle ozbiljno. Strings, Arrays, Sessions, Cookies skupa s par ostalih nabrojanih tematskih cjelina čine neizostavan dio vašeg budućeg koda. Kada ste svladali sam programski jezik, vrijeme je da podignete vaše znanje na novu razinu i pređete među naprednije programere upoznavajući se s Design Patternima kao što su Factory, Singleton, Observer, Adapter i Dependency Injection.

Primjeri pitanja za samoprovjeru:

  • Koje superglobalne varijable postoje i čemu služe?
  • Kako kontroliramo Session i Cookies kroz PHP? Gdje se spremaju? Kako ih možemo pročitati ili izmijeniti?
  • Kako funkcionira autentifikacija (login) usera u nekoj aplikaciji? Objasnite cijeli process.
  • Kako se pohranjuju osjetljivi podaci kao što su lozinke u bazu podataka?
  • Kako funkcionira upload datoteka na server preko forme? Objasnite cijeli proces.
  • Što je klasa, a što objekt?
  • Koja je razlika između public, protected i private metode?
  • Što je static metoda ili property?
  • Što je $this, a što static/self?
  • Što je Abstract class, a što Interface i koja je razlika?
  • Objasnite zašto i kako koristimo Interface u PHP-u.
  • Koje magične metode postoje, koja im je svrha i u kojem se trenutku izvršavaju?
  • Što je PDO?
  • Što su “design patterni” i koje poznaješ u PHP-u?

Tijekom učenja ćete steći iskustvo izrade neke vlastite web aplikacije. Ona je ogledalo vašeg pristupa programiranju. Nas ne zanima jeste li tu aplikaciju napravili za klijenta ili ste je radili za svoju dušu. Ne zanima ni nas je li vam to prva, druga ili petnaesta aplikacija. Mi ćemo procjenjivati kako je napisana i kako je organizirana.

Ako u ovom trenutku još nemate nešto za pokazati, odvojite si vremena da napravite rad koji će biti slika vašeg znanja i pristupa programiranju.

MySQL

Često se dogodi da kandidati preskoče učenje osnova baza podataka i prerano krenu u PHP frameworke. Kandidat mora steći znanje da “iz glave” zna postaviti upite gdje povezuje 2-3 tablice. Toplo predlažemo svima da u procesu edukacije odvoje 2-3 tjedna fokusiranih vježbi za MySQL i da u tom periodu ne koriste programski jezik. Predlažemo nabavku neke MYSQL knjige s primjerima i vježbama.

Primjeri pitanja za samoprovjeru:

  • Koji tipovi podataka postoje?
  • Zašto sva tekstualna polja ne snimamo pod TEXT data tip?
  • Koja je razlika između CHAR (16) i VARCHAR (16). Kad pripremiš prvi odgovor, istraži dubinsku razliku i ponovo odgovori na pitanje.
  • Što su Primary, Foreign i Unique keyevi i čemu služe?
  • Za što služi escapanje HTML-a?
  • Što je MySQL injection?
  • Što su Cascade i kakve veze imaju s Foreign key?
  • Koji JOINovi postoje i što rade?
  • Nabrojite par tipova relacija.
  • Koje agregatne funkcije postoje i što koja radi?
  • Što radi GROUP BY?
  • Što je Index i kad se koristi?

JavaScript

Primjeri pitanja za samoprovjeru:

  • Osnove JavaScripta
  • Što je DOM API?
  • Kad se izvršava DOM ready event?
  • Kad se JavaScript učitava i kada se izvodi?
  • Što je JavaScript scope?
  • Što je AJAX poziv i kako ga napraviti?

Ostalo

Upoznati se sa sljedećim tehnologijama:

  • Git – instalirati i isprobati čemu služi, napraviti account na Githubu ili Bitbucketu
  • Što je composer, instalirati ga i isprobati

Važna je i web prisutnost!

Osim samog znanja programiranja, svaki programer bi trebao poraditi i na svojoj vidljivosti na internetu. Više je razloga za to. Jedan od njih je community koji dijeli vaše interese prema tehnologiji s kojim biste kasnije stupili u kontakt ako naiđete na nekakve poteškoće u razvoju vašeg softwarea ili ako želite podijeliti znanje s drugima. Drugi razlog je vidljivost prema potencijalnim budućim poslodavcima. Primjerice, ako imate par projekata dignutih na GitHub oni vam mogu poslužiti kao dio vašeg budućeg CV-a.

U nastavku su nabrojani samo neki od portala na kojima vam preporučujemo da otvorite profil ako sebe vidite kao budućeg PHP developera.

  1. GitHub
  2. Linkedin
  3. Stack Overflow

Inchoo PHP Starter Kit vodič za backend developere

Zadatak

Pripremili smo ovaj zadatak kako bi primarno početnici dobili uvid u funkcioniranje jedne moderne PHP aplikacije i funkcionalnosti vezane za tu aplikaciju. Rješavanje ovog zadatka uvelike povećava vašu šansu za zapošljavanjem jer upućuje u fundamentalna znanja potrebna za uključivanje u web.

Za koga je zadatak:

  • krećete s programiranjem te nemate još nikakav projekt iza sebe
  • imate projekt iza sebe, ali ne razumijete neke od stavki navedenih u zadatku

Zahtjevi (kako izraditi aplikaciju):

Neobavezno:

Obratiti pažnju na:

Shared gallery

Napraviti web aplikaciju koja će sadržavati 3 stranice nelogirane korisnike :

1. home

  • proizvoljno uređena naslovna stranica + button koji na klik pokazuje ukupan broj slika (ne prikazuje same slike) od svih korisnika zajedno bez refresha stranice (Ajax request) za sve korisnike (ulogirane i nelogirane)

2. login

  • tu će se odvijati registracija korisnika i login već postojećih korisnika
  • remember me (use cookies)

3. registration (staviti poveznicu na login koja vodi ovdje)

  • gdje će korisnik napraviti account (potrebna polja, username, email, password, ponovi password)

i dodatne 2 stranice za logirane korisnike :

1. Management

  • gdje će logirani korisnik moći uploadati slike (isključivo formata .png i .jpg)
  • gdje će se prikazivati već uploadane slike od svih korisnika u tablici zajedno sa username-om korisnika koji ih je uploadao, njegovim emailom i adresom. Moguće je prikazivati više uploadanih slika po korisniku. U tablici mora postojati “remove” button koji će obrisati sliku, ali sliku može obrisati samo korisnik koji ju je i stavio, ostali korisnici ne smiju imati mogućnost brisanja slike, i ne smije im se prikazivati “remove” button. Podatci potrebni za tablicu moraju biti dohvaćeni u samo jednom MySQL upitu.

2. My account

  • gdje će korisnik moći mijenjati svoje podatke (password)
  • gdje će korisnik moći obrisati svoj account pritiskom na “Remove Account” button i time sve vezano za njega (pa i slike)

Baza podataka:

Potrebno je sam odrediti broj tablica, najlogičnije tipove podataka za polja, naći primjenu i koristiti primary/unique/foreign keys gdje je potrebno, kaskade (brisanje korisnika mora obrisati sve podatke vezane za njega, također i slike uploadane na server od strane korisnika).

Opcionalno: potrebno je napraviti PHP skriptu koja pri pokretanju odredi da li postoje tablice u bazi. Ako ne postoje skripta ih treba napraviti i pripremiti bazu za rad sa podatcima (napraviti tablice, potrebna polja i njihove relacije).

Napomena

Molimo da rješavanju ovog zadatka pristupite s razumijevanjem. Na kasnijem interviewu ćemo ispitati razumijevanje toga što je napravljeno, pa bilo kakvo kopiranje koda od treće osobe neće pomoći u zapošljavanju.

Kako se prijaviti za posao u Inchoou?

Kao što smo već spomenuli, u Inchoou gotovo polovinu zaposlenika čine PHP developeri. S obzirom na velik broj projekata na kojima radimo, u stalnoj smo potrazi za kvalitetnim programerima, bilo da su oni iskusni senior developeri ili perspektivni početnici.

Neovisno o tome imamo li raspisan natječaj za posao backend developera ili ne, ukoliko ste prošli većinu onoga što je nabrojano u prijašnjim koracima, a željni ste novih izazova kroz timski rad, pošaljite nam na posao[at]inchoo.net primjere koda projekata na kojima ste radili i CV. Rješavanje zadatka koji smo postavili iznad, bit će bonus u vašoj prijavi!

Na svaku prijavu odgovaramo bilo pozivom na razgovor, praksu ili praćenjem napretka i usmjeravanjem u daljnju edukaciju sa željom da nam se ponovno javite kada još malo poradite na svom znanju.

U testu smo naveli neka područja i pitanja koja prolazimo. Ovo ne znači da ispitujemo točno i isključivo ta pitanja ukoliko budete pozvani na interview. Ona su ovdje navedena da posluže kao primjeri koji će vam pokazati što nam je bitno.

Ne zaboravite, i profesionalci su nekoć bili amateri u svom području. Zato je važno početi!


3 komentara

  1. Lijepi pozdrav iz Zagreba, od PHP početnika, imenom Novica. 🙂
    Želim Vam mnogo sreće i uspjeha u Vašem radu, u prvom redu zbog Vašeg zdravog pristupa, koji ima zaista sve ljudske osobine. Naime, kao početnik (imam završeni tečaj u Algebri-PHP & MySQL) nailazim na brojne teškoće, u smislu odbijanja i nezainteresiranosti, konkretno u traženju daljnjeg educiranja unutar IT oblasti. Moja ponuda je dakako besplatna, obzirom da sam svjestan svoje razine znanja(stečena znanja bi doživljavao kao isplatu) . Nijedna tvrtka nije zainteresirana da me primi na besplatan edukacijski vremenski rok(primjerice 3 mjeseca), te da uloži minimum vremena i energije u mene. Vjerujem da se slažete, čovjek mora od nekuda početi, odnosno nitko od nas se nije rodio s već usađenim znalačkim čipom. Svi traže programere s iskustvom i već poprilično visokom razinom znanja. Stoga, još jednom naglašavam svoje oduševljenje, prema Vašoj zdravoj i prirodnoj filozofiji koju zastupate prema potencijalnim kandidatima, uključujući i one s početnom razinom znanja.

    1. Novice, želimo vam puno sreće u pronalasku posla, a do onda, što drugo nego nastavite s online edukacijom. Povežite se s ljudima u PHP zajednici, ne odustajte od traženja prakse i usmjeravanja i pokušajte s manjim freelance poslovima. Nešto će već upaliti. 😉

Odgovori

Vaša adresa e-pošte neće biti objavljena. Nužna polja su označena s *