Od osnovnog do ekspertskog nivoa — put razvoja za ‘backend' programere

Aleksandar Džavrić je početnicima i profesionalcima u backend developmentu predstavio mapu za ovladavanje ovom oblašću.

Danko Novović
03/09/2020

„Svakome ko želi da postane dobar developer, preporučujem da završi kvalitetan fakultet ili, ako to nije moguće, da programiranje nauči onlajn. Iako jeste korisna, diploma nije neophodna ako umete da izvršite svoje radne zadatke.”

Ovo su reči Aleksandra Džavrića, backend programera koji je dinamičnim polučasovnim predavanjem o različitim temama bitnim za rad i razvoj modernog back-end programiranja otvorio u utorak četvorodnevnu onlajn konferenciju Quantox Virtual Conference u organizaciji kompanije Quantox Technology. Savete početnicima i profesionalcima u backend developmentu sažeo je u svojevrsni vodič i podveo ih pod osnovni, napredni i ekspertski nivo.

Osnovni nivo

Internet — budući da nas globalna mreža okružuje i nalazi se svuda oko nas, čak i kao backend developeri moramo poznavati njene osnove. Nephodno je poznavati koncepte ciklusa HTTP zahteva i odgovora (request/response cycle), tj. komunikacije između klijenta i servera, znati koji veb pregledači postoje (Google Chrome, Mozilla Firefox itd.), te kako se JavaScript kod izvršava u njima. Konačno, treba razumeti mehaniku postavljanja gotovog projekta, tj. puštanje u produkciju. 

Frontend — Od backend developera očekuje se poznavanje osnova frontenda, i to minimalno HTML-a i CSS-a — a po mogućstvu i JavaScripta (potencijalno uz neke od popularnih biblioteka i framework-a). Više je razloga za to, a neki od njih su: potreba za stilizovanjem podataka koji se eksportuju u PDF formatu; mogućnost programera da izradi kompletan manji projekat, ukoliko poznaje i back-end i osnove front-enda.

Operativni sistemi — Znamo koji operativni sistemi postoje, ali to najčešće nije dovoljno. Da bismo aplikaciju mogli da pokrenemo u svom lokalnom okruženju ili da je „deploy-ujemo”, potrebno nam je poznavanje korišćenja terminala, razumevanje kako procesi i niti funkcionišu u „pozadini” našeg operativnog sistema ili aplikacije. Potrebno je i osnovno poznavanje koncepata mreža. 

Programski jezici — Programere koji tek počinju izučavanje back-end tehnologija Aleksandar je posavetovao da se opredele za jedan od jezika, pa da u nastavku obogaćuju svoje znanje nekim od njegovih framework-a, budući da se onda mogu fokusirati na rešavanje problema ozbiljnijih od stalnog savladavanja sintakse. Kako je naglasio, lako je adaptirati se na novi programski jezik, ako dobro poznajemo koncepte. Neki od najkorišćenijih programskih jezika koje preporučuje jesu PHP, Java, Ruby, Python, Go, C# itd.

Sistemi za kontrolu verzija (VSC) — Ranije, programeri su kodirali na svojim lokalnim mašinama, ali to nije bilo dovoljno bezbedno, pošto bi, primera radi, računari mogli da se pokvare i ostave developera bez napisanog koda. Takođe, u slučaju da više programera radi na istom kodu, njegovo slanje putem mejla ili drugih sistema komunikacije radi usklađivanja verzija (što se ranije i primenjivalo) bilo bi krajnje nepraktično. Tako se danas od backend developera zahteva poznavanje nekog od sistema za kontrolu verzija (version control system), poput Git-a, koji omogućuju lakši zajednički rad tima na istom kodu. Neophodna dopuna tome jeste i poznavanje „repo hosting servisa”, gde se kod deponuje, kao što su GitHub i GitLab

Baze podataka — Developeri su ranijih decenija podatke čuvali u tekstualnim fajlovima, ali je s povećanjem obima tih podataka njihovo održavanje postalo problematično. Modernizaciju takvog sistema predstavile su prvo SQL baze, koje su omogućile brz pristup formatiranim podacima. Potom su se pojavile i NoSQL baze podataka, za razvijanje većih aplikacija koje koriste veće količine podataka. Stoga je neophodno naučiti neke od popularnih tehnologija u tom domenu. 

Napredni nivo 

API — Kako je API vrlo široka tema, Aleksandar se zadržao na konceptima bitnim backend developerima, pa je tako pomenuo samo SOAP i REST API, kao specifične protokole za razmenu strukturiranih podataka, koje mogu koristiti različiti sistemi i uređaji. Primera radi, jedan REST API može biti „serviran” mobilnoj ili veb aplikaciji, a s tim u vezi, moramo različito razmišljati o autentifikaciji. 

Keširanje (caching) — Privremeno smeštanje informacija u memorijske podsisteme omogućuje brži pristup tim informacijama. U okviru backend keširanja pomenuta je tehnologija Redis, popularna poslednjih godina, koja u osnovi nudi stvaranje baze podataka „key-value” tipa, s opcionom trajnošću. 

Bezbednost — Kao koristan, pomenut je projekat OWASP, koji nudi članke, metodologiju, dokumentaciju i alate, kao i tehnologije iz oblasti bezbednosti aplikacije. Važna tema s kojom bi backend programeri trebalo da se upoznaju jeste enkripcija, koja sprečava krađu i zloupotrebu podataka. 

Testiranje — Ručno testiranje pogodno je za manje projekte, ali bi programeri koji rade na aplikacijama „enterprise” nivoa trebalo da nauče neke od tehnologija automatskog testiranja. Mogu se testirati individualni moduli, izolovani od drugih i bez interakcije s njima (unit testing), testiranje se može obaviti kombinovanjem različitih modula i testiranjem njihovog međuzavisnog funkcionisanja (integration testing), ili se može testirati kompletna funkcionalnost aplikacije, kako bi se potvrdilo da kod radi ono što bi i trebalo (functional testing).

Kontinuirana integracija i kontinuirana isporuka (CI/CD) — Poslednjih godina ovim principima pridaje se ogroman značaj, a reč je o praksama koje podrazumevaju češće i pouzdanije izmene na kodu koji se piše timski, od pisanja, preko testiranja, pa do „deploymenta” na produkciju. Neki od modernih preporučenih alata koji automatizuju i olakšavaju te procese su Docker i Kubernetes. 

Principi dizajna — Ovu temu Quantox-ov predavač je podelio na dizajn paterne i paterne arhitekture. Prvi su šabloni dobre programerske prakse, koji nas primoravaju da pišemo bolji kod kroz korišćenje oprobanih rešenja za određene tipove problema. Drugi se odnose na strukturiranje aplikacije od početka do kraja, opet kroz primenu već proverenih, reupotrebljivih rešenja i dobrih praksi. Potrebno je oba poznavati bar do nekog nivoa, a ako ih koristimo na projektima, moramo ih se striktno pridržavati, kako bismo imali ispravno kodiranu aplikaciju, npr. bez „spaghetti koda”.

Web sockets — Web socketi dosta su korišćena tehnologija, koja svakom programeru zatreba u nekom trenutku — kada radi na aplikacijama koje zahtevaju komunikaciju između klijenta i servera u realnom vremenu. Klasičan HTTP zahtev znatno je „teži” od web socketa, a prilikom njegovog slanja potrebna je uvek ponovna autentifikacija na backendu. Web socket radi znatno brže, a „paketi” koji se šalju znatno su manji od onih kod „čistog” HTTP zahteva.

Ekspertski nivo

Search engines — Pod ovim se podrazumevaju alati koji omogućuju pretragu po internim bazama podataka. Preporučeni i najkorišćeniji pretraživači, ujedno i otvorenog koda, jesu Elasticsearch i Solr. 

Message brokers — U slučaju da radite na dve aplikacije koje komuniciraju jedna s drugom, a pritom različito formatiraju podatke koje prosleđuju (npr. jedna koristi XML, a druga JSON standard), potrebno je da koristite „message broker” kao posrednika koji formatira poruku pošiljaoca u onaj oblik koji je originalan za primaoca. Neki od popularnih alata su Apache Kafka i RabbitMQ. 

Kontejneri i virtuelne mašine — Programerima se neretko dešava da nešto funkcioniše na jednoj mašini, ali ne i na drugoj, i to zbog različitog okruženja. Primera radi, jedan član tima ima instaliran PHP 7, a drugi 5.6, pa na jednom od njihovih računara aplikacija radi, a na drugom ne. Kako bi imali isto okruženje, ne namećući instaliranje svoje verzije programskog jezika ili „package managera” na računare svih članova tima, kreiraju se kontejneri ili virtuelne mašine. U njima se definiše određena konfiguracija, pa svako ko ima određeni konfiguracioni fajl može da u odvojenom kontejneru, sa svim potrebnim alatima, radi na zajedničkom projektu. Za tu svrhu, Aleksandar je preporučio platformu Docker, koju prihvataju svi jezici i sve biblioteke.

GraphQL — pruža inovativni pristup razvoja API-ja i omogućuje klijentima da definišu strukturu podataka koje žele i tako spreče primanje nepotrebno velikih količina podataka. Neke od najpopularnijih biblioteka su Apollo i Relay. 

Veb serveri — Tehnologije koje Aleksandar preporučuje za korišćenje jesu Apache i Nginx, čemu ide u prilog i statistika, prema kojoj ova dva servera otvorenog koda plasiraju preko 50 odsto internet saobraćaja.

Skalabilnost — Regularni deo predavanja Aleksandar je završio pričom o neophodnosti planiranja širenja kapaciteta aplikacije unapred, za slučaj povećanja broja korisnika (build to scale) — te strategijama upravljanja opterećenjem. Ako razvijamo aplikaciju koja će opsluživati veliki broj korisnika, najverovatnije ćemo u jednom trenutku imati ogromne baze podataka, moraćemo da brinemo o serverima itd. Stoga je neophodno imati u vidu strategije povećanja kapaciteta aplikacije — pojačavanje mašina koje trenutno posedujemo (vertikalno skaliranje) ili preraspodelu posla na više mašina (horizontalno skaliranje).

Danko Novović

Objavio/la članak.

četvrtak, 3. Septembar, 2020.

IT Industrija

🔥 Najčitanije