Eu la 14-15 ani scriam plugin-uri pentru Counter-Strike 1.6 sau coduri si boti pentru Mu Online, Conquer Online, World of Warcraft si multe altele.
Ti-as recomanda sa scrii moduri pentru jocuri open world gen GTA V sau Fallout 4 deoarece poti invata o gramada de lucruri si e mult prea mult fun. (adica serios, te joci si cu cat stii sa programezi mai bine cu atat faci chestii mai avansate, plus ca trebuie sa inveti putin photoshop pentru texturi, putina grafica 3d pentru modele custom si animatii, algoritmi exotici care nu sunt predati la scoala si care sunt greu de invatat fara un mediu interactiv gen pathfinding, detectare coliziune, chestii legate de fizica gen ecuatii de miscare, cea mai scurta cale, teoria grafurilor, vectori)
Dar daca chiar vrei sa te distrezi si sa te dai si mare creeaza jocuri pe telefon (sau modifica-le cu prostii, de exemplu pui poza unui profesor ca textura pe ceva side scroller) fiindca e probabil cel mai usor sa fi smecher in clasa cu asa ceva in ziua de azi. Eventual poti chiar sa inveti cum sa scrii coduri pentru jocuri de telefon sau cum sa spargi aplicatii (nu doar de telefon).
Sa iti dau un exemplu, poti sa faci un bot de pokemon go care se duce prin lume si strange toti pokemonii fara sa te misti cu destul de putine cunostinte. Dupa ce le aratati colegilor toti pokemonii nu mai auzi de pokemon go
Daca cumva ai parinti mai bogati poti sa iti cumperi roboti, kit-uri arduino, raspberry pi, un kit de breadboard, o imprimanta 3D, o drona (daca stai la sat) sau chiar un CNC si sa faci diferite chestii. Robotica este iarasi extrem de interactiva si efectiv te obliga sa inveti concepte destul de complicate predate in anul 2-3 la facultatea de informatica. Sa nu mai zic nimic de faptul ca e mult mai ieftin sa te apuci decat pe vremea mea daca te descurci cu componentele chinezesti.
Ca si limbaj de programare, in primul rand trebuie sa stii engleza la un nivel inalt (gen sa poti citi de exemplu Lord of the Rings fara sa te uiti pe fiecare pagina la dictionar). Dupa ce stii engleza ai mai multe optiuni, daca vrei sa te distrezi cu jocuri si roboti C# e o alegere foarte buna si usoara. (nu il confunda cu C++, e mult mai usor o data ce iti dai seama cum merg lucrurile)
Daca vrei sa te distrezi in general cu orice ( in special servere) Javascript is the way to go in ziua de azi. (poti face programe desktop cu electron, aplicatii mobile cu react native, orice fel de servere cu node, poti programa chiar si roboti si sa nu uitam ca fiecare pagina web se foloseste de javascript.
Trebuie sa te atentionez totusi ca baza informaticii este intuitia pentru a scrie algoritmi care rezolva probleme si singurul mod in care poti sa devii mai bun este sa scrii constant algoritmi si sa rezolvi probleme.
Pe categoria web frontend-ul sau backend-ul nu te intereseaza la inceput, uita ca exista separarea aceasta. Tu trebuie sa rezolvi cat mai multe probleme, incepand cu probleme usoare pana la probleme mai grele ca sa ai intuitie. Exista probleme si pe partea de frontend si pe partea de backend si se rezolva exact in acelasi mod.
Doar nu te apuci sa scrii logica unui site web si sa afisezi totul in consola. Trebuie sa faci o pagina intreaga ca sa intelegi in mod interactiv despre ce este vorba de fapt; poti sa eviti sa lucrezi cu photoshop, illustrator si alte programe foarte utile pentru a realiza elementele artistice utilizand sisteme gen twitter bootstrap sau zurb foundation care iti ofera elemente deja precreate si tu doar te joci cu ele ca la lego ca sa iti faci interfata. Dupa ce ai interfata poti sa faci logica la aplicatia ta ca sa ai o pagina dinamica si asta se numeste backend.
In general programarea pe backend necesita cunostinte solide ale bazei de date si trebuie sa fi capabil sa lucrezi pe hartie, adica sa planuiesti baza de date, sa planuiesti cum iti organizezi logica, sa stii ce structuri de date sa folosesti.
La jocuri de exemplu, in special jocurile online backend-ul si frontend-ul se contopesc. Sa luam de exemplu San Andreas Multiplayer unde ai un server care preia si transmite datele la clienti si tot ce este afisat la clienti este transmis de catre server. Frontend-ul ar fi jocul San Andreas si clientul samp in sine, dar tu nu ai acces la ele in mod normal si iti ramane doar serverul care are niste api-uri cu care poti controla frontend-ul la fiecare client in parte. De exemplu cand jucatorul ajunge intr-o anumita pozitie si serverul primeste cordinatele de la client poti seta ca la acele cordinate jucatorul sa moara (redai o anumita animatie pe client si dupa muti jucatorul la alte cordinate) sau sa primeasca o masina s.a.m.d. Cand mergi cu masina in joc cordinatele din client se sincronizeaza cu cordinatele din server si serverul transmite acele cordinate, ca sa realizezi miscare aici deja intervine fizica si cunostintele de hardcore backend. (bine la samp ai totul mura in gura si nu te mai intereseaza frontendul la lucrurile de baza gen mersul masinii) Dar in mod normal ca sa realizezi o experienta buna in client ar trebui sa stii sa implementezi miscare deterministica, predictie a miscarilor si multe alte lucruri destul de complicate care tin de relatia backend-frontend.
Daca vrei sa stii ce inseamna backend cu adevarat citeste putin despre cum functioneaza hitbox-urile si retelistica in Counter-Strike, un joc aparent simplu are niste fizica incredibil de complexa in spate ca sa fie fun. La prima vedere ai zice ca e vorba de frontend si dupa de backend, dar la final nu te poti decide fiindca faci exact acelasi lucru si pe server si pe client.
In programare astea inseamna backend hardcore :
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Teoria din articolul de mai sus sta la baza fiecarui joc online decent lansat in ultimii 15 ani. (cu exceptia WoW care n-are detectie de coliziune sau compensare la lag)
http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/
Blogul de mai sus este o mina de aur daca vrei sa stii putin despre cum merg jocurile online si putina retelistica. Sunt si alte bloguri care acopera tween tree-uri
Daca esti curajos poti chiar sa iti faci propriul joc sau mod cu Source Engine, Unreal Engine sau Unity 3D complet gratuit. Unreal/Source Engine este extrem de puternic si poti invata foarte multe din codul sursa public al functiilor.
In ultimul timp si pe web apare aceasta duplicare, gen poti randa o pagina web pe server si dupa sa o trimiti la client sau poti procesa informatia pe client in loc de server si dupa doar sa o salvezi in baza de date dar deja deviez de la subiect. Deci singurul lucru care te intereseaza este ca ori esti programator si te ocupi de cod, ori esti designer si te ocupi de elementele de design, desigur daca esti talentat poti sa stii si putin design/animatie si nu e imposibil sa fi bun la amandoua. (vezi de exemplu minecraft a fost facut de un singur om la inceput) Dar sunt lucruri minime pe care trebuie sa le stie si programatorul si designerul.
Inchei articolul cu un wallpaper pe care e o lista de challenge-uri care te poate ajuta sa inveti programare cum trebuie daca le iei pe rand si le rezolvi :