Učenje programskih jezika u gejmingu: Kako sa C# preći na C++?

Kako sam sa C# prešao na C++ i zašto to ne bih uspeo bez mentora?

Industrija video igara definitivno napreduje - kako na svetskoj tako i na domaćoj sceni. Ono što doprinosi njenoj ekspanziji je prisustvo raznih besplatnih 'subscription' ili 'premium game engine'-a, među kojima se najčešće nailazi na rešenja koja koriste C# ili C++. Ovo je moja priča kako sam sa prvog programskog jezika prešao na drugi.

Kada sam odlučio da pređem u gaming industriju, najpre sam krenuo od UnityScript-a (Unity-jeva verzija JavaScript), ali je to bilo kratkog daha – a ni sam Unity se nije dugo držao istog. Nakon toga, činilo mi se lakšim da krenem sa C# umesto C++ programskim jezikom, prevashodno zbog toga što sam imao prethodno iskustvo u Javi (mada, pri donošenju odluke nije bila zanemarljiva ni činjenica što uz C++ dolaze i glasine da je težak za učenje).

Kako sam se u tom trenutku već neko vreme bavio video igrama iz hobija, učestovao na Game Jam-ovima i zanimao se ličnim projektima, odlučio sam da konačno pređem u profesionalne vode gde sam radio na mobilnim i PC projektima.

Tada mi se otvorila i prilika da uz pomoć kompanije Ubisoft, svoje znanje programiranja podignem na sledeći nivo, a to je značilo da sa C# pređem na C++. Da, na misteriozni jezik kog prate pointeri, reference, memory management, destructor-i itd. U nastavku teksta govorićemo o tome kako uprkos tim glasinama nije strašno kao što se na prvi pogled čini – pogotovo kada imate dobre mentore.

Isti principi programiranja žive u svakom programskom jeziku – i u C# i u C++

Ako se godinama služite jednim programskim jezikom, nije vam najjednostavnije da se okrenete ka drugom i uvek vas prati određeni nivo straha. Tako je izgledao i početak mog učenja o C#, iako se taj jezik izuzetno trudi da zaštiti developera – koliko od grešaka, toliko i od nepotrebnog razmišljanja ili analiziranja.

Developer je obavezan da korišćenjem reči new započne svako instanciranje klase. Ta klasa zatim ide na heap, a njena referenca se prenosi dalje gde je to potrebno. Čisto, jednostavno, ali i sporo. Eventualno se uključi GC, da počisti, i mobile game developerima zagorča život. Takvo ponašanje može biti pogubno za razvoj video igara, ali sasvim prihvatljvo za aplikativni softver, gde se kod ne izvršava 30, 60 pa i više puta u sekundi, i time developeru daje vremena da se bavi drugim stvarima.

Sa druge strane, C++ druge ne obavezuje korišćenje reči new i time dozvoljava developeru da odredi da li će objekat otići na stack ili na heap. Stack je mnogo brža memorija, i odlična za korišćenje kratkotrajnih objekata. Objekti se kreiraju, žive i samouništavaju u jednom opsegu. Ali, zajedno sa time dolazi i odgovornost upravljanja tim objektom. Treba obratiti pažnju na načine na koje se konstruiše, kopira, pomera u memoriji, briše…

Naravno, postoji i druga strana spektra, a to je preći na neki mnogo slobodniji jezik, kao što je JavaScript (o kome, nažalost, ne mogu mnogo da kažem) ili se pak zadržati na C#, jer tolike uložene godine učenja kako jedan jezik funkcioniše sigurno neće biti bačene. Jedno je sigurno, a to je da isti principi programiranja žive u svakom programskom jeziku.

Kada rešite da naučite novi programski jezik, obavezno se konsultujte sa nekim ko ga već govori

Na ovaj put promene programskog jezika, kao što sam pomenuo, nisam pošao sam jer je delovao isuviše kompleksno. Pridružio sam se Ubisoftu, a pomoć mentora koji me je vodio kroz put C++ bila je od izuzetnog značaja za donošenje takve odluke.

Uz njegovu pomoć sam prošao kroz osnove i osposobio se da razmišljam u C++ za tačno mesec dana i tada sam se i lično uverio od kolikog je značaja kada se pored vas nalazi osoba koja je ekspert u polju za koju ste zainteresovani i koja na svako pitanje može da odgovori precizno i konkretno, plus da sa zanimljivim primerom dopuni teoriju.

Uz pomoć mentora išlo je i preporučeno štivo za čitanje i, naravno, korišćenje engine-a kao nepresušni izvori pitanja. Takođe, to je obećavalo da svaki radni dan provedem u profesionalnom okruženju, što je sigurno ubrzalo privikavanje na novi jezik.

Inače, C++ kao izbor većine developera nije slučajan, kao ni podatak da sve veće AAA kompanije i određeni broj indie developera koristi C++. Video igre sadrže mnoštvo komponenti kao što su simulacija fizike, rendering, shading, animacije, logika igre itd. U poslednje vreme sve osim logike igre je spakovano u engine, a sve sto je tu zapakovano zahteva veoma dobre performanse, pa su developeri birali jezike koji mogu to da postignu. Takođe, DirectX i OpenGL su pisani u C/C++ tako da je za pisanje ostatka engine-a bio prirodan nastavak. Unity3D je odličan primer engine-a koji je pisan u C++ i logike koja je rađena u nekom drugom jeziku, u ovom slučaju C#, a nekada i UnityScipt.

Naravno, kada sam počinjao, malo tih stvari mi je bilo jasno, ali se uz dobrog mentora klupko lako raspetljavalo. Brzo sam savladao neke osnove jezika i bilo mi je mnogo lakše da ih savladam sa predznanjem C#. Inače, C++ pruža kontrolu sa kojom se do sada nisam susretao – apsolutnu kontrolu nad korišćenjem resursa i načinom korišćenja istih, klase koje idu na stack?! Nema problema, koliko god treba (do ograničenja kompajlera, naravno). Integer na heap-u, što da ne?! Nije da uvek ima smisla, ali C++ to pruža.

Za razliku od C#, C++ pruža direktnu komunikaciju sa hardverom i time ostavlja developeru mogućnost upravljanja. C++ dozvoljava da se pristupi prostoru memorije i direktno vrše operacije nad njim, ili da se nađu objekti i podaci u memoriji direktno. Sa druge strane dopustiće da se iz niza čita više nego što ima objekata, što je u bilo kom slučaju đubre, što C# ne dozvoljava. Sa takvom kontrolom, kao i mnogim drugim mogućnostima, može da se postigne zapanjujuća količina optimizacije koja jednostavno nije moguća korisćenjem C#.

Na kraju, smatram da prelazak sa C# na C++ dolazi prirodno: dok nas C# na lakši način uči OOP, možda čak arhitekturi i dizajnu, C++ čeka sa strane da sa osnovama možemo zajedno da uletimo u niže slojeve programiranja i da se u potpunosti posvetimo kontroli koju pruža.


Ostavi komentar

Odgovori

Tvoja e-mail adresa neće biti objavljena.

Popularno

E-commerce

Mesec dana kasnije i dalje ne znamo gde su naši Aliexpress paketi – ali barem imamo neke odgovore

Enigma zvana AliExpress poštarina za Srbiju, podelila je mišljenja mnogih kupaca, organizacija i svih ostalih koji se za ovu temu zanimaju. Iako je razloga za astronomsko poskupljenje poštarine mnogo, neki odgovornost prebacuju na Poštu, drugi na avio prevoz i kineske trgovce, ali se ipak čini da je istina 'negde tamo'. Mi smo na osnovu svih dosadašnjih podataka pokušali da rešimo misteriju.

Startapi i poslovanje

Najavljene nove mere za pomoć privredi – država plaća 60% minimalca i odlaže plaćanje poreza i doprinosa

Preduzetnici i zaposleni u mikro, malim i srednjim preduzećima u julu i avgustu dobiće dodatnu ekonomsku pomoć države usled krize izazvane epidemijom korona virusa - plaćanje 60% od minimalca u julu i avgustu, odlaganje plaćanja poreza i doprinosa za mesec dana, a najavljen je i novi projekat 'Moja prva plata'.

Office Talks Podcast

Gde su naši AliExpress paketi?

Šestu epizodu Netokracijinog Office Talks podcasta obeležio je razgovor o trenutnim dešavanjima sa astronomskim poskupljenjem poštarine sa sajta AliExpress. Mi smo pokušali da analiziramo šta je tačno dovelo do ovog problema koji je u velikoj meri pogodio sve one koji kupuju sa ove poznate online prodavnice.

Propustili ste

Karijere

Do 30% domaćih frilensera traži sigurnost stalnog posla jer frilensing na globalu pokazuje znake recesije

Šta čeka srpske frilensere u narednom periodu i kako će izgledati budućnost frilensinga na domaćem tržištu?

Kultura 2.0

Serbia Business Run nastavlja sa aktivnim tim bildingom u kojem zbližava kolege – ovaj put kroz ‘online’ trku

Peto izdanje Serbia Business Run, serije poslovnih trka i najveći sportsko-kompanijski događaj u Srbiji, održaće se u septembru 2020. godine - ovoga puta 'online'. Kako izgleda trka u ovom potpuno drugačijem formatu, otkriva nam direktor ove organizacije.

Društvene mreže

Ima li oglašavanja van Facebook platformi?

Možda ste primetili kako pojedini brendovi nisu bili prisutni na vašem Instagram i Facebook feedu tokom jula. To me je navelo na razmišljanje, a šta da se sutra probudimo i da Facebook i Instagram ne postoje, šta onda?

Office Talks Podcast

Kako je KK Crvena Zvezda osvojila Evropu najboljom marketing strategijom

Košarkaška Evroliga nije se zasnivala samo na utakmicama u sportskim halama, već i na jednom sasvim drugačijem terenu - u pitanju je digitalni marketing u sportu.

Gaming

Šest godina od Astroids igre i srpski studio Superverse osvaja Steam sa novim naslovom!

Pre šest godina studio Superverse Industries, tada još pod nazivom Industry Entertainment, predstavio je svoju novu igru - Astroids, koja je kasnije postala Superverse, a sa kojom je ovaj game development studio iz Srbije zabeležio uspeh. Mi smo sa osnivačima razgovarali kako je izgledao put od prvog naslova 2002. godine pa sve do jedne uspešne igre na platformi Steam.

E-commerce

Novi vodiči za sigurnu Internet trgovinu pomažu početnicima da kupuju ‘online’

Za potrošače koji još uvek nisu upoznati sa Internet trgovinom, Ministarstvo trgovine, turizma i telekomunikacija i USAID obezbedili su digitalne vodiče koji nastoje da korisnicima objasne sve prednosti 'online' kupovine i edukuju ih o toj aktivnosti.