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

U posljednje se vrijeme sve više ljudi želi baviti izradom video igara. Mnogi od njih razvili su i neku od vještina koja im u tome može pomoći, poput crtanja ili pisanja priča. Kamen spoticanja svih projekata bio je i ostao programiranje, odnosno poznavanje nekog od programskih jezika (C++, C#, Ruby, Python,  JavaScript, itd.).

Veliki broj ljudi zapravo ne zna što programeri rade na svom radnom mjestu i cijeli je njihov posao kao neka tajanstvena, nedostupna zemlja skrivena brojevima. Vrijeme je da zavirimo u nju.

U prijašnjem blogu prikazali smo osnovnu razliku između dva najpopularnija game enginea – Unreal Engine i Unity 3D. U ovom ćemo blogu pokušati „demistificirati“ programiranje i objasniti jednostavnim rječnikom koja je osnovna razlika između dva najpopularnija programska jezika u game developmentu.

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 zvano 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 jednoj 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.

programski jezici

Preko pisanja naredbi u programskim jezicima programeri daju upute računalima. Različiti programski jezici imaju različitu svrhu 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 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 kao poput ovog učitavanja slika.

Naravno, postoje i specijalizirani programi koji imaju složenije ponašanje i zahtijevaju veću kontrolu nad hardverom – poput video igara – pa programeri u tim slučajevima ne koriste samo gotova rješenja nego poneke naredbe pišu na nižim razinama. Horizon Zero Dawn, primjera radi, 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 sljedova istih.

Osobama koje ne poznaju svijet programiranja te naredbe (komande) izgledaju kao gotovo nepovezani simboli na ekranu. Napisali smo gotovo jer uz malo truda čak i potpuni laici mogu uvidjeti 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:

kako izgleda programiranje

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 izučavanje 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. Poznavanje iste 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 kompjuteru 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 plusDream In CodeStack Overflow i slični bit će od koristi ako imate neki konkretan i specifičan problem.

Također, ako koristite Reddit, na subredditima r/programmingr/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 im 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++ s 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.

C++ vs C# programski jezik

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++ s obzirom na to da je isti dostupan u svim segmentima informatičke scene. Neki predlažu da se prije učenja ovih jezika savladaju Ruby ili Phyton s obzirom na to da isti ljude podučavaju razmišljanju na programerski način, nakon čega je još lakše usvajati znanja o C++ i C# programskim jezicima.

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.

Vrijeme je iskušalo C++ kroz više od 30 godina otkad se pojavio, a kraja mu nema nigdje na vidiku. Isto tako, programeri konstantno usvajaju nova znanja i nove načine programiranja, tako da je posrijedi vještina u kojoj uvijek ima nešto novo za naučiti.

Za oba ova jezika kaže se da su orijentirani na objekte. No što to ustvari znači? Većina ljudskih jezika na svijetu usredotočena je na stvarne predmete („objekte“) i njihove međusobne odnose. Lakše ćemo zamisliti mačku nego matematičku funkciju. Da bi olakšali ljudima komunikaciju s kompjuterom, C++ i C# programski jezici podatke obrađuju kao objekte kojima pridodavaju različite funkcionalnosti. Drugim riječima, ovi se jezici trude izgledati više ljudski nego računalno.

C++ i C# u game developmentu

Game engine sustavi izgrađeni su pomoću programskih jezika (većina ih je programirana upravo u C++ programskom jeziku) pa poznavatelji potonjih 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.

Poznato je da Unreal Engine nudi Blueprint sustav vizualnog kodiranja uz koji korisnik ne treba naučiti kodiranje. Naravno, ovaj sustav ima ponekih limitacija, no idealan je za početnike koji žele napraviti svoj prvi projekt bez znanja programiranja.

Zaključak

Kako je težnja računalne industrije da što više ljudi može raditi što više stvari na računalima, pa i izrađivati video igre, proizvode se različiti alati pomoću kojih se sam čin pisanja u programskim jezicima svodi na najmanju moguću mjeru.

Programi poput Constuct2  ili RPG Makera mogu dovesti do jednostavnih igara bez da njihovi korisnici uopće poznaju te jezike. Na sličan način radi i Blueprint sustav popularnog Unreal Enginea.

Ako vaša igra iz snova izgleda kao prosječan 3D naslov današnjice, poznavanje C++ i C# bit će vam prijeko potrebno. Učenje je svakako preporučljivo obaviti 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 dobro 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 svlada.

Programiranje nije namijenjeno kompjuterima, već ljudima. Iako na prvi pogled mogu izgledati apstraktno, C++ i C# programski jezici su osmišljeni 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.