
Kako je Maja Nedeljković od analogne umetnosti došla do softverskog inženjerstva i 3D renderinga
Put ka karijeri u IT i tehnološkom svetu može da vodi iz različitih "pravaca" ali i interesovanja. Svoju priču o izgradnji IT karijere, otkriva nam Maja Nedeljković, senior Software Engineer.
Ulazak u svet tehnologije za Maju Nedeljković je bio prilično neobičan, čak i po nekim današnjim standardima. Štaviše, i sama kaže da je napisala post na blogu o tome još 2016. godine za IT Konekt.
Naša sagovornica kaže da je završila srednju školu želeći da bude hemičar, ali je između ostalog završila slikarstvo na Fakultetu likovnih umetnosti u Beogradu. Posle dve godine nedovršenih skica i osušenih boja, započelo je večito pitanje sa kojim se svaki umetnik suočava u nekom trenutku svoje karijere: kako zaraditi za život?
Takođe, treba napomenuti da je ozbiljna i stabilna tehnička karijera zahtevala logiku i razumevanje tech nauke. Maja je između ostalog, bila iskrena:
Oduvek sam bila zainteresovana za kompjutere. Čak i pre nego što sam se upisala u umetničku školu, umetnost kojom sam se bavila tokom svoje adolescencije bila je uglavnom digitalna, izrađena na još tada starom Wacom Intuos3 tabletu.
Kako nam je i sama rekla, s obzirom na to da su njen otac i jedna od njenih sestara bili programeri, Maja je smatrala da je to nešto sa čime bi mogla da pokuša da se bavi. JavaScript je počela da uči iz starih knjiga i Lynda.com video sadržaja. Onda je, sa malo hrabrosti, pronašla svoj prvi tehnički posao baš na vreme da napusti treću godinu umetničke škole. U nastavku sledi njena priča.
Kako je izgledalo tvoje obrazovanje za tech i IT stručnjaka?
Maja: Kada sam počela da radim u tehnološkoj industriji, bila sam potpuno samouka. Međutim, ubrzo sam shvatila da postoje praznine u mom znanju koje ne mogu da popunim iz slučajnih tutorijala i knjiga. Otprilike godinu dana kasnije, počela sam da studiram softversko inženjerstvo na privatnom univerzitetu koji mi je omogućio da studiram na daljinu. Ovo je olakšalo nastavak rada u kompaniji, dok sam u isto vreme sticala diplomu.
Kada su se kursevi softverskog inženjerstva spustili više na UML diagramming i na pisanje specifikacija nego na programiranje, bilo mi je teško da zadržim interesovanje. S obzirom na to da sam oduvek bila kreativac u srcu, prebacila sam svoj fokus na industriju razvoja video igara. Ovaj novi program mi je omogućio da naučim o kompjuterskoj grafici, složenijim algoritmima, tehnikama veštačke inteligencije u video igrama, pa čak i o konceptu umetnosti i pripovedanju priča.
Radila si i kao computer vision editor, šta to tačno podrazumeva i kako izgleda izgradnja takvog tech alata u frontendu?
Maja: Computer vision editor ima za cilj da premosti jaz između ljudske percepcije i onoga što računari mogu da “vide”. Njihova primarna svrha je da omoguće ljudima da kodiraju svoje razumevanje i prepoznavanje slika u format iz kojeg AI modeli mogu da uče. Pravljenje takvog editora znači kreiranje intuitivnih i brzih alata kako bi drugi mogli da urade ovaj posao tačno i efikasno. Kao što možete zamisliti, ovo je prilično težak frontend proces.
Iz perspektive proizvoda, to znači uključivanje najboljih alata u klasi radi lakšeg označavanja. Jedan primer ovoga je alat za automatsko segmentiranje koja koristi Meta’s Segment Anything Model (SAM) za automatsko otkrivanje objekata unutar datog regiona slike. Drugi manuelni primeri bi uključivali alate kao što su četkice ili alati za popunjavanje prostora (na kojima sam takođe radila), poput onih na koje ste možda navikli u programima kao što je Photoshop. Naš posao je bio da implementiramo ove alate u web aplikaciju tako da rade ispravno i pouzdano.
Iz tehničke perspektive, izgradnja intuitivnog editora znači pedantno fokusiranje na performanse. S obzirom na to da computer vision problemi često zahtevaju pokretanje složenih algoritama na veoma velikim slikama, neophodno je u potpunosti iskoristiti sve alate koje imamo na raspolaganju. Ovi alati uključuju Rust i WebAssembly, ali i manipulaciju slikama sa WebGL shader-ima.
Suočili smo se sa nekim jedinstvenim problemima sa kojima se većina frontend programera nikada ne susreće, kao što je optimizacija prenosa podataka slike između GPU-a i CPU-a, upravljanje canvas kontekstima, osiguravajući da naši alati kreiraju pixel-perfect maske.

Možeš li nam reći više o alatima kao što su Three.js, WebGL, ali i React Three Fiber?
Maja: Kada govorimo o 3D prikazivanju za web, u modernom pretraživaču, najverovatnije govorimo o WebGL-u. WebGL, skraćenica od Web Graphics Library, je API koji implementiraju pregledači koji vam omogućava da iskoristite prednosti hardverskog ubrzanja grafike. To znači da ste u mogućnosti da pišete kod koji će se izvršavati direktno na grafičkoj kartici vašeg računara, omogućavajući širok spektar 3D grafičkih efekata.
Sada, kao što možete da zamislite, kod koji biste morali da napišete za interfejs sa GPU-om preko WebGL-a može biti zamoran i opsežan. Tu dolazi Three.js. Reč je o biblioteci za pravljenje 3D aplikacija koje se apstraktuju na većem delu WebGL koncepata niskog nivoa tako da programeri mogu da koriste JavaScript šablone koji su pogodniji za razvoj.
Odatle postoje dalji nivoi apstrakcije, kao što je React Three Fiber, koji vam omogućava da se povežete sa Three.js preko React komponenti! Svi ovi alati služe za olakšavanje programerima da manipulišu tim 3D virtuelnim prikazima, prikazuju ih na ekranu i integrišu u web aplikacije.
Sa kojim izazovima se svakodnevno suočavaš kada radiš na zahtevnim tehnološkim projektima?
Maja: Kako ja to vidim, tehnički projekat je uvek zahtevan samo zbog nedostatka informacija. Ako mi je teško sa nekim projektom, to znači da mi nedostaje neki vitalni deo. Ili je to dublje poznavanje baze koda ili korišćene tehnologije, ili je to bolje razumevanje uslova korišćenja ili zahteva projekta.
Na primer, projekat može biti izazovan jer zahtevi nisu jasni. Razgovarajući sa menadžerom proizvoda ili samim klijentima, mogu da shvatim koji problem projekat pokušava da reši, a samim tim mogu da se nađu i najbolji alati za njegovo rešavanje. Svaki zahtevni projekat počinje i nastavlja se sa mnogo i mnogo istraživanja.
Koje programske jezike najčešće koristiš i zašto je JavaScript tvoj omiljeni jezik?
Maja: Skoro sav moj posao obavljam u JavaScript-u ili TypeScript-u, ali sam povremeno koristila Python i Rust. Rekla bih da više volim da koristim TypeScript nego “običan” JavaScript, s obzirom na očitu razliku u bezbednosti korišćenja ovih alata. Međutim, generalno i suštinski gledano, ova dva jezika su toliko slična, da ne vredi o tome trošiti previše reči.
Ono što mi se sviđa jeste da su oba jezika veoma dostupni i programerima i krajnjim korisnicima. Za programere, sada kada se JavaScript može pokrenuti praktično bilo gde, imamo mnogo veću površinu za primenu naših veština. Takođe zbog svoje popularnosti, postoji mnoštvo alata koji olakšavaju razvoj određenih projekata.
Za krajnje korisnike, pretraživač je postao de fakto “mesto za sve na web-u”. To znači da aplikacije koje pravimo mogu biti dostupne našim korisnicima na različitim uređajima i lokacijama, kroz samo jedan klik. Nije potrebna instalacija. To takođe znači da kada našim korisnicima treba namenska mobilna ili desktop aplikacija, možemo da im isporučimo isto iskustvo web aplikacije pomoću alata kao što su Electron ili React Native.
Mogla bih da uđem u karakteristike jezika i kako je fleksibilniji i prilagodljiviji od drugih, ali JavaScript-ov stalno rastući ekosistem i prisustvo su svedočanstvo njegove svestranosti. Možda nije najelegantniji ili najsnažniji, ali se pokazao kao jezik koji ljudima omogućava da grade određene proizvode. Od alata ne bih mogla tražiti ništa više.
Zanima nas i o čemu ćeš tačno govoriti na CityJS konferenciji?
Maja: Moje predavanje na konferenciji će biti o osnovama 3D renderovanja i o tome kako se danas mogu koristiti na web-u. Govoriću o tome kako su predstavljeni 3D objekti i scene, matematika iza kamera i perspektive, izračunavanje svetlosti i senke, i konačno rasterizacija i renderovanje na ekranu.
Zatim ću objasniti kako biste postigli ove korake pomoću WebGL-a, objašnjavajući kako podaci i kod dolaze do GPU-a da bi se prikazali. Konačno, predstaviću neke moćne alate koje trenutno imamo na raspolaganju kako bismo 3D grafiku učinili dostupnijom svima. Nadam se da će ovo predavanje pružiti bolju osnovu za 3D nego što se može dobiti čitanjem tutorijala fokusiranih isključivo na Three.js ili React Three Fiber.
Želiš da podeliš svoje mišljenje o ovoj temi? Komentari su otvoreni na našoj Facebook i LinkedIn stranici!