Sfaturi de început de drum

Salut!

Am 15 ani si urmeaza sa intru in clasa a IX-a pe profil matematica-informatica cu intensiv informatica. Fiind vacanta de vara, m-am gandit sa fructific timpul pe care il petrec in fata PC-ului prin initierea in acest domeniu.

M-am documentat serios si am realizat pe ce parte ar trebui sa ma duc. Nu ma atrage programarea in C++ sau alte limbaje de pe aceeasi parte.

Mi se pare foarte interesanta partea de web. Aici stiu ca se imparte in doua categorii:

  • Front-end

  • Back-end

Punctul meu forte nu este creativitatea (desenul, culoarea etc. etc.), deci front-end-ul nu este o alegere buna pentru mine. Nu vreau sa imi para rau mai tarziu pentru ca am ales un lucru care nu imi face placere sa il practic.

Imi place mai mult sa invat. Imi place sa zic “De ce X este asa si nu ar putea fi asa?”. Imi place sa analizez lucrurile in profunzime. Dupa ce am mai cautat pe internet cateva ore bune, am aflat ca Back-end-ul necesita toate aceste puncte pe care eu le consider forte.

Nelamurirea mea cea mare este cum as putea incepe? Cu ce sa incep? Ce sa studiez?

Va multumesc anticipat! O zi buna si spor la treaba! :wink:

Salut,

Din punctul meu de vedere maii intai ar trebui sa incepi cu partea de algoritmica, structuri de date etc deci ai putea sa te interesezi de niste carti ok. Majoritatea au exemplele scrise in C/C++, ceea ce o sa faci cam tot liceul (nu PHP/HTML etc) :smiley:

1 Like

Multumesc pentru raspuns! Stiu ca in liceu voi face algoritmica, structuri de date etc. Zilele astea chiar ma gandeam ca nu pot face o treaba buna daca incep direct cu un limbaj, fara sa am o previzualizare si o gandire pe care o dezvolt exact prin cele mentionate mai sus.

O sa caut mai multe carti si sper ca o sa fie ok.

Multa bafta! O zi buna iti doresc! :smiley:

Ești la vârsta la care orice ai alege nu îți va părea rău. Asta pentru că ești la vârsta la care poți schimba totul de două ori pe an fără să pierzi nimic. Nici măcar timp nu s-ar putea numi că ai pierdut, pentru că vei căpăta experiență.

Începi cu un limbaj super simplu ca sintaxă: ruby, python. Fără a folosi module scrise de alții, începi să implementezi tot felul de chestii banale. De la rezolvări de ecuații până la „ghicește numărul”.

2 Likes

Iti multumesc pentru ajutor! Voi cauta mai multe resurse pentru a-mi dezvolta gandirea, si anume pentru algoritmica si ceea ce voi mai studia la liceu, dupa cum mi-a sugerat stefanz.

Conteaza alegerea dintre Ruby si Python? Amandoua mi se par doua optiuni perfecte pentru mine si iti multumesc inca o data pentru sugestie. Trebuie sa incep cu usorul, dupa cum mi-ai spus.

Da, ai dreptate. Am viata inainte, sunt tocmai la inceput. Orice informatie pe care o asimilez inseamna perfectionare.

Apreciez nespus de mult orice sfat, oricat de mic sau de mare este, de aceea tin sa multumesc de fiecare data cand am ocazia. Multumesc inca o data! Multa bafta! :wink:

Încă un sfat - sunt o groază de lucruri de învățat în computer science. Dacă o iei de la baze spre vârf îți faci o fundație solidă, dar riști sa nu ajungi în varf, unde sunt aplicațiile.

Cel mai bine, mai ales la început de drum, după ce vezi cam cum merge cu programarea, e să construiești proiecte. Aplicații, site-uri, jocuri etc. Ce te pasionează pe tine in principiu. Înveți dupăia deajuns cat sa poți să-ți faci treaba si puțin mai mult. O să vezi că sunt concepte comune tuturor (algoritmi, baze de date, limbaje de programare), si lucruri specifice (geometrie, browser quirks etc). Cele dintâi sunt cele mai valoroase, dar de multe ori pe cele din urmă îți mănânci o pâine.

Recomand si eu Python sau Ruby, pentru că taie o groază din chestiile neesentiale pentru stagiul asta, si au și librarii uriașe, care ajută mult când construiești aplicații. Intre cele doua as alege Python, versiune 3.

În școală o să faci C++ sau Pascal, dar ar trebui la un moment dat sa vezi si cei cu C++ singur, ca să înțelegi cum merge un calculator mai în detaliu. Ca fapt divers, sunt limbaje oribile pentru începători. Nu înțeleg de ce școlile noastre insistă să își îngreuneze viata, încercând să invete atât programare, cât și algorimti si programare low-level. Multi se dezic de subiect din clasa a 9-a, si in felul asta ajungem la lipsuri de 80k programatori în industrie cum vedeam vehiculat acum ceva vreme prin știri.

De asemenea, nu desconsidera front-end-ul. Pentru construcția de aplicații pe internet, opinia mea este că un inginer trebuie să fie stăpân pe toate aspectele problemei - să fie full-stack. Iar front-end-ul nu înseamnă doar design, iar doar în cele mai simple cazuri este “simplu”. Pagina principală a Facebook.com sau Amazon.com doar simple nu sunt. Iar dacă faci ceva gen single page application, un front-end web este echivalentul unei aplicații de android sau ios ca si complexitate si nevoi inginerești.

Separarea în front-end si backend are sens în ideea de construcție de infrastructură. Oamenii care construiesc React sau definesc standarde web pot fi considerați că lucrează front-end etc.

3 Likes

Iti multumesc mult pentru sfaturile pe care mi le-ai oferit. Voi tine cont cu siguranta de tot ceea ce mi-ai explicat.

Voi merge cu Python 3, iar ca editor voi folosi Notepad++ sau Sublime Text. Nu stiu care este mai okay pentru mine. Poate puteti sa imi recomandati voi unul din acestea doua sau puteti veni cu un alt editor bun pentru inceput.

Cu siguranta voi acorda importanta limbajului C++ pe care-l voi face in liceu (nu voi face Pascal, am vorbit cu niste elevi din acelasi liceu) si il voi aprofunda acasa, oricand voi avea timp.

Sigur ca nu voi desconsidera front-end-ul. Voi invata si HTML & CSS, insa nu ma voi axa pe acestea. Cand voi avea nevoie de HTML si CSS, le voi folosi.

Mi-am format in minte un drum pe care ma voi baza, insa voi avea nevoie de o mica aprobare, si, desigur, eventualele obiectii din partea voastra.

Acesta implica, mai inainte de toate, studierea algoritmicii, structurilor de date si a celor ce imi dezvolta gandirea. Intre timp, voi incepe cu Python. (nu cred ca este o idee proasta sa incep chiar din prima cu Python) Dupa ce va incepe anul scolar, voi invata tot ceea ce se poate la liceu. El ma va ajuta sa inteleg cum stau lucrurile in programare. Dupa un timp, voi trece si voi invata HTML si CSS in paralel cu Pythonul pe care voi continua sa-l aprofundez. Acum…nu stiu cand as putea incerca si PHP. Pare foarte interesant si este folositor pentru back-end.

Mai departe voi vedea, pana atunci este cale lunga. Nu cred ca are vreun rost sa vorbesc despre lucruri pe care le voi face peste ani buni.

Nu voi neglija nici macar o secunda restul materiilor. Matematica, fizica, limba si literatura romana, chimia, biologia, engleza si restul materiilor se leaga intre ele, de aceea trebuie sa le dau o importanta deosebita.

2 Likes

Dupa inca ceva timp de cautari pe internet, am gasit JavaScript ca fiind ceva bun, de viitor si o optiune buna pentru incepatori. Stiu ca tine de front-end, insa, cine stie, poate in viitor ma voi decide sa ma axez pe front-end si…surpriza…nu voi stii JS. Poate spun prostii.

Desi nu am inclinatii spre desen, mi se pare mai frumos si mai interesant sa structurezi si stilizezi un website, decat sa lucrezi pe partea de server, baza de date etc. Vorbind cat se poate de sincer, singurul motiv pentru care m-am opus alegerii Front-end-ului a fost ca am auzit ca daca nu ai inclinatii spre desen, culoare etc., nu poti face nimic bun.

In momentul de fata cred ca am luat-o putin pe langa drum. Nu mai sunt sigur de ce vreau sa fac. Stiu ca am destul timp in fata, nu este nimic o pierdere de timp, insa ma gandesc ca daca incep cum trebuie, o tin asa si mai departe.

Imi cer scuze daca se considera double-post. Multumesc anticipat! :slight_smile:

1 Like

Spor la invatat, @AnduIX! Cum zice si @iamntz, nu te stresa sa inveti direct “ce trebuie”, pentru ca e o tinta in miscare, peste un an va fi altceva la moda. Concentreaza-te pe functionalitate, sa ajungi sa faci lucruri care sa mearga, si pe intelegerea a ceea ce faci.

2 Likes

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 :slight_smile:

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 :

2 Likes

Wow. Nu ma asteptam la atat ajutor! Sunteti superbi! :slight_smile:

Am vorbit cu un baiat care vrea sa imi dea o mana de ajutor informala, iar mai tarziu o sa facem niste proiecte in echipa.

Fiecare exercitiu pe care-l voi face, i-l voi trimite lui pentru a vedea daca este totul in regula. Lucreaza in domeniu in strainatate si este de treaba. Nu imi cere bani, zice ca face asta de vreo 4-5 ani. Mai ajuta inca un baiat, doar ca acela este mai avansat ca mine.

Am uitat sa precizez ca voi incepe clasic si anume cu C.

La C o sa dai de problema clasica, chiar si cu un profesor e destul de greu sa intelegi cum functioneaza pointerii si fara sa inveti structurile de date la care ar fi utile inainte n-o sa aibe nici un sens. In alte limbaje nu exista pointeri si lucrurile sunt mai simple, de exemplu ai string-uri pe cand la C o sa te blochezi chiar si la simple operatii fiindca va trebui sa folosesti pointeri.

1 Like

Daca nu te atrage C++ dar vrei sa intri in web, apuca-te de SEO.