Softverski inženjer

Softverski inženjer/-ka odgovoran/-a je za dizajniranje, razvoj i održavanje softverskih sistema koji pokreću video-igre. Posjeduje podrobno razumijevanje kompjuterskih programskih jezika, algoritama i principa razvoja softvera. Sarađuje sa gejm dizajnerima i artistima kako bi preveo/-la kreativne koncepte u funkcionalna igračka iskustva. Radi na različitim aspektima razvoja igara, uključujući grafičko renderovanje, simulaciju fizike, vještačku inteligenciju, umrežavanje i korisničke interfejse.
Softverski inženjer/-ka često ima specijalizovano znanje o game engine-ima i framework-ovima. Optimizuje performanse igre, obezbjeđuje glatke mehanike igre i rješava tehničke izazove koji se javljaju tokom procesa razvoja. Posjeduje razvijene vještine rješavanja problema, jer mora da identifikuje i popravlja bagove, optimizuje kod i otklanja bagove kako bi stvorio/-la stabilno i prijatno igračko iskustvo. Pored toga, ostaje u toku sa najnovijim tehnologijama i trendovima u gejming industriji kako bi primijenio/-la inovativne tehnike i poboljšao/-la ukupni kvalitet video-igara na kojima radi.

Alati

Unity

Unreal Engine

C++

C#

Java

Python

Visual Studio

Git

Perforce

Saradnja sa drugim timovima

Softverski inženjer/-ka blisko sarađuje sa gejm dizajnerima kako bi razumio/-la viziju i zahtjeve igre, efikasno implementirao/-la mehanike, optimizovao/-la performanse i rješavao/-la tehnička ograničenja. Sarađuje sa artistima kako bi integrisao/-la grafiku, animacije i vizuelne efekte u game engine. Takođe, pruža neophodnu tehničku podršku kako bi se osigurala pravilna implementacija i renderovanje umjetničkih asset-a u video-igru.

Pored toga, radi sa QA testerima kako bi identificirao/-la i popravio/-la bagove, obezbjeđujući da igra funkcioniše kako je predviđeno. Sarađuje i sa Network Engineer-ima kako bi razvio/-la multiplayer odlike igre i optimizovao/-la rad mreže. Ove saradnje odgovorne su za stabilno i prijatno igračko iskustvo.

Vještine

U zavisnosti od senioriteta, od softverskog/-e inženjera/-ke se očekuje da može da savlada, uradi i isporuči sljedeće stvari:

Hard skills

  • Programski jezici:
    • piše efikasan, čist kod za implementaciju feature-a, algoritama i sistema, koji se može održavati.
  • Framework i engine-i:
    • koristi alate za pravljenje, optimizaciju i postavljanje igara na različite platforme.
  • Matematika i algoritmi:
    • razumije linearnu algebru, različite vrste računa i strukture podataka, i rješava složene probleme.

Soft skills

  • Rješavanje problema:
    • analizira probleme, identifikuje osnovni uzrok problema, otklanja bagove i optimizuje kod igre.
  • Saradnja i komunikacija:
    • razumije zahtjeve, diskutuje o tehničkim rješenjima i pruža update-e o napretku projekta.
  • Prilagodljivost i kontinuirano učenje:
    • prilagodljiv/-a je i otvoren/-a za učenje o novim tehnologijama, alatima i tehnikama.

Obrazovanje

Za nekoga ko je zainteresovan za programiranje u gejming industriji, sticanje diplome iz računarstva, softverskog inženjeringa ili razvoja igara bilo bi veoma korisno. Ovi programi obično pokrivaju osnovne koncepte u programiranju, algoritme, strukture podataka i prakse razvoja softvera — sve osnovne vještine za programere igara. Pored toga, kursevi koji se fokusiraju na grafičko programiranje, game engine-e (kao što su Unity ili Unreal Engine) i vještačku inteligenciju (AI) za igre mogu pružiti specijalizovano znanje relevantno za industriju. Dobro poznavanje programskih jezika kao što su C++, C# ili Python posebno je važno za razvoj igara, jer se ovi jezici široko koriste u game engine-ima, u kreiranju gejmplej sistema i alata za igru.

Pored formalnog obrazovanja, sticanje praktičnog iskustva kroz lične projekte, prakse ili učešće u game jam-ovima može poboljšati tvoje vještine i portfolio. Izrada i objavljivanje igara nezavisno ili u saradnji sa drugima može pokazati tvoju sposobnost da primijeniš naučene koncepte u razvoju igre u stvarnom svijetu. Umrežavanje sa profesionalcima u industriji putem onlajn zajednica ili industrijskih događaja, takođe, može ti pružiti dragocene uvide i prilike. Ako budeš u toku sa trendovima, tehnologijama i najboljim praksama u programiranju igara, dodatno ćeš se pripremiti za uspješnu karijeru u ovom dinamičnom i konkurentnom polju.

Senioritet

U zavisnosti od senioriteta, od softverskog/-e inženjera/-ke se očekuje da može da savlada, uradi i isporuči sljedeće stvari:

Junior

  • Pod vođstvom mediora prevodi koncepte dizajna i zahtjeve u funkcionalni, modularni kod koji se dobro integriše u cjelokupnu arhitekturu igre. 
  • Identifikuje i izoluje probleme, razumije poruke o greškama i koristi debugging alate da locira i popravi bagove u svom kodu.
  • Aktivno doprinosi diskusijama, daje predloge i efikasno komunicira sa drugim članovima tima.
  • Širi svoje znanje o razvoju igara, programskim jezicima i game engine-ima, otvoren/-a je za feedback i kontinuirano unapređuje svoje vještine.

Medior

  • Organizuje kod u komponente za višekratnu upotrebu, definiše strukture podataka i implementira algoritme koji podržavaju različite feature-e igre.
  • Analizira i optimizuje grafičko renderovanje, simulaciju fizike, AI algoritme i druge aspekte igre koji su ključni za performanse.
  • Usmjerava i podržava juniore, daje feedback, dijeli svoje znanje i pomaže im da napreduju u svojim pozicijama.
  • Analizira probleme, predlaže kreativna rješenja i primjenjuje ih, prati trendove u industriji i istražuje nove pristupe za poboljšanje gejmpleja, grafike ili drugih aspekata igre.

Senior

  • Pruža tehničko vođstvo i usmjerava tim u donošenju programerskih odluka, odabiru odgovarajućih tehnologija i definisanju najboljih praksi.
  • Optimizuje performanse igre i obezbjeđuje skalabilnost, identifikuje i adresira bottleneck-ove u performansama i na nivou koda, i na nivou sistema.
  • Pruža smjernice i konstruktivan feedback kako bi pomogao/-la juniorima i mediorima da poboljšaju svoje tehničke sposobnosti i često učestvuje u procesima regrutovanja.
  • Upravlja projektima, nadgleda tehničke aspekte igara u razvoju, sarađuje sa drugim departmanima, doprinosi raspodjeli resursa i određivanju prioriteta zadataka.
SOFTVERSKI INŽENJER // PROGRAMMING //
SOFTVERSKI INŽENJER // PROGRAMMING //

Resursi

Knjige

  • “Game Engine Architecture” – Jason Gregory
  • “Clean Code: A Handbook of Agile Software Craftsmanship” – Robert C. Martin
  • “Introduction to Game Design, Prototyping, and Development” – Jeremy Gibson Bond
  • “Real-Time Rendering” – Tomas Akenine-Möller, Eric Haines, Naty Hoffman
  • “Programming Game AI by Example” – Mat Bucklan

Pojedinci

  • John Carmack (@ID_AA_Carmack)
  • Mike Acton (@mike_acton)
  • Casey Muratori (@cmuratori)
  • Liz England (@lizardengland)
  • Kim Libreri (@kimlibreri)

Kako izgleda intervju za ovu poziciju?

Novosti

SOFTVERSKI INŽENJER // PROGRAMMING //
SOFTVERSKI INŽENJER // PROGRAMMING //