Machina Game Dev Academy

View Original

Razlika između C++ i C# programskog jezika

U posljednje se vrijeme sve više ljudi želi baviti izradom videoigara, a jedno od glavnih pitanja koja dobivamo je upravo - koji jezik i engine odabrati? U ovom ćemo blogu pokušati „demistificirati“ programiranje i objasniti jednostavnim rječnikom koja je osnovna razlika između dva najpopularnija programska jezika u razvoju videoigara.

Objašnjenje programiranja za početnike

Mnogi gameri i „obični“ korisnici računala znaju malo i ponešto o onome što se događa unutar te čarobne kutije zvane računalo. Slično kao i s automobilima, znamo da je veće i skuplje uglavnom bolje, ali ne i na koji točno način radi „ispod haube“.

Računalo je ništa drugo nego super brzi radnik koji obavlja milijarde zadataka u sekundi! Dakle, programiranje je pisanje tih zadataka, odnosno naredbi koje računalo izvršava. Računalo nije vidovito i ono samo po sebi ne zna što treba raditi, već mu programer piše upute kako će se i u kojim slučajevima ponašati, do najsitnijih detalja. Pisanjem naredbi u programskim jezicima programeri daju upute računalima. Različiti programski jezici imaju različite svrhe namjene pa postoje i na različitim razinama.

Tako postoje programski jezici visokih razina u kojima se računalu naređuju općeniti zadaci (poput „napravi prozor i prikaži sliku s tvrdog diska“) te programski jezici niskih razina na kojima računalu dajemo naredbe bliže samom sklopovlju (poput „ako ima previše napona na žici termometra, upali struju ventilatoru“). Razni hardveri imaju i svoje različite jezike na kojima „pričaju“. Stoga postoje prevoditelji koji programske jezike prevode na jezike za određeni procesor.

Arhitekture računala

Sigurno ste čuli za ARM ili x86 – to su tzv. arhitekture računala i one određuju kojim jezikom će računalo u konačnici „pričati“. Arhitektura računala je općenito uvijek ista pa većina programera ne piše naredbe na tako niskoj razini, nego te sitnice prepušta prevoditelju koji zna kako procesoru reći nešto poput „zapamti ovaj podatak, trebat će nam kasnije“.

Operativni sustav, poput Windowsa, može programerima omogućiti naredbu „otvori sliku“, a ona će ispod haube biti „spoji se na tvrdi disk, nađi datoteku, reci tvrdom disku da ti kaže što se sve u toj datoteci nalazi i spremi to u memoriju“.

Nakon toga naredba „prikaži tu sliku“ može biti „u memoriji imaš sliku od maloprije, od nje uzimaj jedan po jedan pixel i pošalji ih monitoru uz upute gdje će koji pixel staviti na slici“. Dosta takvih zadataka se često i ponovljeno koristi, poput ovog primjera učitavanja slika.

Naravno, postoje i specijalizirani programi koji imaju složenije ponašanje i zahtijevaju veću kontrolu nad hardverom – poput videoigara, pa programeri u tim slučajevima ne koriste samo gotova rješenja nego poneke naredbe pišu na nižim razinama.

Za primjer, igra Horizon Zero Dawn koristi trikove i izbacuje iz RAM-a sve objekte koji nisu u vidnom polju igrača kako bi tu memoriju mogao iskoristiti za prikaz onoga što se može vidjeti.

Što je to programski jezik?

Programski jezik možemo opisati i kao alat kojim se pišu slijedne komande koje izvodi CPU (procesor) na nekom računalu. Kao što smo već spomenuli, programski jezici nastali su kako bi olakšali pisanje i čitanje kompleksnijih komandi i slijedova istih.

Osobama koje ne poznaju svijet programiranja te naredbe (komande) izgledaju gotovo kao nepovezani simboli na ekranu. Napisali smo “gotovo” jer, uz malo truda, čak i potpuni laici mogu uočiti određene povezanosti. Primjerice, donja slika opisuje jedan program pisan u C# jeziku. Nemojte se prestrašiti stvari koje ne razumijete, već pokušajte proniknuti čemu program služi:

Iako možda ne znate pisati u C# jeziku, iz navedenog možete doći do zaključka da ovaj program pretvara stupnjeve Fahrenheita u stupnjeve Celzija. Napisano je dovoljno slično ljudskom (engleskom) jeziku kako bi došli do tog saznanja. Naravno, programeri razumiju i značenje manje poznatih elemenata koji okružuju one na engleskom. Iako izgledaju komplicirano, nisu nešto što prosječan čovjek ne bi shvatio nakon nekog vremena provedenog u učenju.

Kako naučiti programski jezik?

Sad kad smo donekle objasnili što programeri rade, vjerojatno smo barem malo ohrabrili neke od vas na učenje ove vještine. Kao što smo već naveli, programskih jezika ima puno, no u industriji video igara dva najpopularnija su C# i C++. Njihovu popularnost osnažili su Unity 3D (C#) i Unreal Engine (C++).

Mnogi se pitaju koliko znanje matematike pomaže u učenju programiranja. Dobro poznavanje matematike pomaže, no nije nužno preduvjet. Kvalitetan učitelj može komplicirane stvari prenijeti na jednostavan način. Kad učenik može vizualizirati matematičke funkcije, predočiti ih kao nešto što se događa u računalu sa smislom i logikom, i njemu postaje lakše razumjeti što se točno događa. Naprednija matematika potrebna je za određene segmente poput računanja fizike ili složenijih 3D operacija, kao i kad likovi u igri moraju naći najkraći put kroz prepreke ili se oslanjati na svoju umjetnu inteligenciju.

Programski jezici mogu se učiti i preko foruma. Primjerice, forumi poput c plus plus, Dream In Code, Stack Overflow i sličnih bit će od koristi ako imate neki konkretan i specifičan problem.

Također, ako koristite Reddit, na subredditima r/programming i r/learnprogramming sigurno ćete pronaći mnogo korisnih linkova i materijala. Za učenje programskih jezika korisni su i online tutorijali na YouTubeu, Udemyju, ili Courseri.

Ipak, mnogima je najlakše učenje uz mentora uz kojeg će imati prilike dobiti dobre temelje za daljnji razvoj te će pomoći u rješavanju konkretnih problema. Upravo takav tečaj programiranja u C++ jeziku nudi i Machina Academy, a prijaviti se možete na machina@machina.hr.

Za one koji žele steći određenu širinu prije nego se specijaliziraju za jedan jezik, ustanove visokog obrazovanja nude široke mogućnosti ovisno o interesima pojedinca.

Sličnosti i razlike između C++ i C# programskih jezika

Ako ste potpuni početnik, ispis njihovih različitosti najvjerojatnije vam neće puno govoriti. No zbog nešto naprednijih čitatelja reći ćemo da C# programski jezik može funkcionirati samo unutar Microsoftovog .NET frameworka, što znači da se njime možete koristiti samo unutar sustava koje potpisuje ta tvrtka.

S druge strane, C# ima takozvani „garbage collector“ koji olakšava rad s memorijom računala, dok se programeri C++ istom mogu baviti izravno. C# također ima direktan pristup memoriji, no za razliku od C++, ne podržava makro-naredbe. C++ se odlično snalazi s ostalim libraryjima pisanima u C, dok je kod C# takav slučaj više izuzetak nego pravilo. Ovo su tek neke od razlika.

Niti jedan od ovih jezika tehnički nije bolji od drugoga, već ovisi za što se koriste i na koji način. Savjetodavno je svoje učenje početi na C#, ali u jednom trenu svakako prijeći i na C++ obzirom da je isti dostupan u svim segmentima informatičke scene.

Učenje programskih jezika kao što su C++ i C# vrlo je pametna investicija. Iako tehnologija stalno napreduje i možemo očekivati nove programske jezike u budućnosti, isti se neće u samoj srži razlikovati od onih koje koristimo u ovoj generaciji.

Poznavatelji ovih jezika vrlo će se lako prebaciti na druge jezike, kako postojeće, tako i nove koji se pojave. Do tog sigurno ima još dosta vremena i možemo bez bojazni računati da ćemo se s C++ i C# još desetljećima družiti.

C++ i C# u razvoju videoigara

Game engine sustavi izgrađeni su pomoću programskih jezika (većina ih je programirana upravo u C++ programskom jeziku) pa poznavatelji mogu svoje igre raditi s puno većim spektrom mogućnosti.

Primjerice, Unity je baziran na C# programskom jeziku pa oni koji poznaju taj jezik iz navedenog enginea mogu izvući puni potencijal. To je slično kao što od vozača koji se razumije u automehaniku možete očekivati bolje iskorišteno vozilo od onog koji zna samo voziti. Isto tako poznavatelji C# lako će „podići haubu“ i prilagoditi određene elemente kako bi igra bolje izgledala.

S druge strane, Unreal Engine baziran je na programskom jeziku C++. Poznavatelji C++ jezika moći će „razgovarati“ s Unreal Engineom te prilagoditi sebi neke alate koje program sam po sebi možda i nema.

Zaključak

Ukoliko želite raditi u industriji videoigara poznavanje C++ i C# bit će vam prijeko potrebno. Učenje je svakako preporučljivo uz pomoć profesionalnog predavača koji može stalno nadgledati vaš rad i pratiti vaš napredak. Baš takav oblik učenja nudi Machina Academy na svojim tečajevima.

Na kraju, ako već to nismo dovoljno jasno iznijeli u gore u tekstu – budite hrabri! Bez obzira za koji se jezik odlučili, kada ga usavršite, neće biti problem prebaciti se na drugi. Kada steknete programerski način razmišljanja, preostaje vam naučiti sintaksu, tj. stil drugog jezika, što se vrlo brzo savlada.

Iako na prvi pogled mogu izgledati apstraktno, C++ i C# programski jezici osmišljeni su da prate logiku i smisao. Nakon što prvi put isprogramirate svoju igru ili možda aplikaciju i na ekranu dobijete željeni rezultat, pomislit ćete kako je bilo lako doći do tog trenutka i s iščekivanjem očekivati nadolazeća postignuća.