Salutare prieteni si bine v-am regasit! Astazi o sa vorbim despre cum am invatat eu programare, deoarece primesc din ce in ce mai multe intrebari similare in ultima vreme. Prima oara o sa va spun de ce m-am apucat eu de programare, iar motivul o sa vi se pare stupid, dar in acelasi timp interesant.
De ce programarea?
Nu stiu cati dintre voi stiti de SA-MP, dar acesta un mod de San Andreas prin care te poti juca cu prietenii. Eram in clasa 5-a si toata lumea din jurul meu conducea masini super rapide, iar eu nu aveam astfel de masini, deoarece eram la inceput si trebuia sa petrec multe ore ca sa imi permit si eu o masina de genul, asa ca m-am gandit sa imi fac propriul server in care sa pot conduce masini de genu. Nu aveam nici cea mai vaga idee despre cum se face asta, asa ca am inceput ca toata lumea: am downloadat un server gata facut si am incercat sa il modific. Bine-nteles ca era plin de buguri, iar tot ceea ce stiam era sa schimb continutul mesajelor si al culorilor.
Fast-forward in clasa 7-a m-am demotivat sa mai fac servere de SA-MP si am incercat sa fac site-uri web si am descoperit WordPress si HTML. Mi-am petrecut vara din aceea perioada punand un blog pe picioare, blog unde scriam despre diverse lucruri: ce se intampla pe la scoala, pe unde m-am plimbat cu bicicleta saptamana aia, copilarii de genul. Se pare insa ca “aceasta pasiune de a scrie” a ramas in mine si in ziua de azi, pentru ca intotdeauna scriu “scenariul” tutorialului pe site, iar mai apoi il filmez.
In clasa 8-a odata cu admiterea la liceu, am reusit sa avansez foarte mult cu serverul de SA-MP, am inteles notiuni de baza precum “ce este o variabila” “ce face un for” “ce face un while” si asa mai departe, si reuseam sa repar bug-uri ce apareau pe server, si reuseam sa fac “un sistem complet de la 0”.
Ajuns la liceu, totul s-a dat peste cap, de la un elev care lua usor 10 la matematica, chimie, fizica, s.a.m.d. am ajuns la un elev care se chinuia sa ia 6, pentru ca profesorii erau exigenti iar lenea mea din ce in ce mai mare. INSA a existat o singura materie unde eram stapan pe mine, ati ghicit: informatica. Deoarece eu aveam deja in spate sute de ore bune de programare in PAWN (limbajul folosit in SA-MP). Iar faptul ca informatica era singura materie unde nu eram ultimul din clasa, m-a motivat sa continui sa lucrez.
Cum am invatat informatica?
Ei bine, este destul de dificil sa raspund la aceasta intrebare, deoarece inca invat programare, acesta este un domeniu in care niciodata nu o sa le poti stii pe toate. Am invatat programare printr-o tehnica numita “trial and error” (adica incearca in continuu pana reusesti).
In clasa a 9-a mi-am propus sa invat cam toata materia ce se preda la liceu, pentru ca aveam foarte mult timp liber (nu prea imi dadeam interesul la celalalte materii). Nestiind de unde sa incep, am facut ce face orice elev: am luat manualul de informatica si m-am pus sa rezolv probleme din el. Am observat ca toate problemele sunt la fel, doar ca formulate altfel si ca nu invat nimic util si ma invart in jurul cozii.
Asa ca am intrebat in stanga si in dreapta de unde pot face probleme mai faine de informatica si mi s-a spus sa lucrez de pe “Arhiva Campion” (un fel de pbinfo.ro pe vremea mea). Rezolvam cu usurinta 10-15 probleme pe zi de-acolo, deoarece erau asemanatoare cu cele din manual, repetitive si neprovocatoare. Am mai intrebat in stanga si in dreapta si am aflat de infoarena.ro – iar de-acolo a inceput distractia.
A fost pentru prima oara cand stateam ore pe o problema ca sa o rezolv. Prima oara cand incercam sa imi dau seama ce trebuie sa fac pentru a lua 100 de puncte. Pot spune ca m-a motivat, deoarece voiam sa invat cat mai multe, dar m-a si demotivat in acelasi timp pentru ca nu imi ieseau problemele.
In clasa a 9-a am participat la olimpiada de informatica insa nu m-am calificat. Asa ca am mers la olimpiada de TIC, si am luat locul 2 si m-am calificat la nationala. (o sa vorbesc despre olimpiada de TIC intr-un alt episod).
In clasele a 10-a, a 11-a si a 12-a in schimb, am reusit sa ma calific la nationala, insa nu am reusit sa iau nici o medalie deoarece nu eram suficient de pregatit. Aveam insa o tehnica “de hacker” cum imi placea sa ii zic: analizam cu atentie problema, cautam cazurile particulare si le rezolvam pe acelea, pentru a nu lua chiar 0 puncte.
In paralel cu “algoritmica” am continuat sa fac site-uri web in timpul liber, si m-am pus sa invat PHP, iar in clasa a 11-a m-am calificat la faza nationala infoeducatie (un fel de olimpiada pentru informatica aplicata) unde am luat locul 3 la sectiunea “Aplicatii Web”. Codul pe care il scriam in aceea perioada a fost cel mai dezorganizat cod ce l-am scris in viata mea. Functii scrise unde nu trebuie, variabile denumite prost, s.a.m.d.
Spre finalul clasei a 11-a am fost contactat de o persoana care a auzit ca ma pricep la PHP, sa lucrez pentru ea. Eu nu aveam nici cea mai vaga idee cum este sa lucrez “pe bune” dar am acceptat propunerea, pentru ca niciodata nu zic nu la provocari. Ne-am intalnit la pranz undeva in Complexul Studentesc (pentru cei ce sunteti din Timisoara, probabil stiti zona). M-a intrebat mai multe lucruri despre mine, iar la final am batut palma sa lucram impreuna.
Eu nu aveam nici cea mai vaga idee ce fac, dar ii inspiram foarte multa incredere lui “Cosmin” (o sa il numim Cosmin). Imi dadea task-uri de rezolvat, iar eu gaseam o modalitate sa fac totul sa functioneze, chiar daca nu era cea mai eficienta metoda, Cosmin era fericit ca la final de saptamana totul era asa cum isi dorea. Tot Cosmin mi-a oferit si primii bani mai seriosi, mi-a dat 10 milioane pentru aproape o luna de lucru. Nu este o suma mare, dar pentru mine era enorm.
In perioada in care am lucrat cu Cosmin am invatat un lucru FOARTE important: niciodata sa nu zici “nu stiu”. Stiu ca intr-o zi m-a intrebat “stii Python” iar eu i-am zis “nu foarte bine” (desii nu aveam nici cea mai vaga idee de sintaxa, de nimic..). Peste cateva zile imi zice “stii sa faci un crawler in Python?” iar eu bine-nteles ca ii raspund “da” (chiar daca nici nu stiam ce e ala crawler). Am stat 2 nopti cautand pe net ce este aia, cum functioneaza, cum pot sa fac si eu ceva de genul, iar in 4-5 zile am programat un web spider pentru ideea lui. Iar aceasta metoda de a spune “da” iar mai apoi sa invat cum se face un lucru, m-a urmarit pana in ziua de azi, niciodata sa nu spuneti “nu” la oportunitatile ce va apar, daca par realizabile, spuneti “da” si invatati cum sa le faceti mai tarziu.
Merita sa ai un mentor in informatica?
Apare foarte des acest termen “mentor” in mediul online de la noi din tara, si nu numai. Haideti mai intai sa vedem ce este un mentor. Un mentor este un indrumator care te ajuta in momentul cand te blochezi, o persoana pe care te poti baza in momentul cand ai nevoie de ajutor. In experienta mea de 20 de ani de viata, am identificat mai multe tipare de mentori:
- mentori care iti sunt prieteni (verisori, colegi de liceu, de facultate, s.a.m.d.)
- mentori pe care ii platesti ca sa te ajute (profesori de informatica, etc)
- mentori bisnitari (am vorbit despre ei in celalalt videoclip)
Parerea mea sincera este ca nu ai nevoie de un mentor ca sa inveti informatica de la zero, DAR un mentor bun in acest domeniu te poate ajuta sa scurtezi ore bune de cautari pe internet, ore in care efectiv umblii in intuneric, nestiind unde sa cauti, sau mai nasol.. ce sa cauti.
Un mentor este o persoana care iti spune ce fel de problema ai, cum ai ajuns sa ai acea problema, si ce poti face ca sa o rezolvi. De exemplu: eu am invatat haotic informatica: la inceput for-uri, dupa programare web, dupa grafuri, dupa baze de date.. nu am invatat structurat, nu am invatat notiunile intr-o ordine fireasca, am invatat aleator. Daca as fi avut un mentor in schimb, probabil ajungeam la aceleasi rezultate ce le-am in prezent folosind jumatate din timpul folosit pana acum.
Daca simti ca ai nevoie de un mentor, cauta unul. Insa nu face mare tragedie din asta daca nu iti gasesti, deoarece nu este neaparata nevoie de unul.
O sa raspund si la cateva intrebari primite pe grupul nostru de Facebook
- De cate ore este nevoie ca sa iti pui o baza solida in programare?
Undeva in jur de 1,000 de ore sunt necesare pentru a intelege cum functioneaza lucrurile. Insa aceasta cifra nu este batuta in cuie. Persoanele ce se pricep la matematica, prin notiunile din informatica putin mai repede, ele avand nevoie de 800 de oare. Sunt alte persoane ce prin lucrurile mai greu, si bine-nteles ca au nevoie de mai multe ore
- Dupa ce stii despre ce e vorba si ai o baza cum continui cu invatatul si cum dezvolti gandirea necesara
Gandirea o dezvolti rezolvand cat mai multe probleme. Dar nu numarul de probleme conteaza, ci mai mult tipul de probleme. Degeaba rezolvi o problema ce iti cere sa aflii suma primelor n elemente din vector, dupa care alta problema ce iti cere sa aflii suma primilor n-1 elemente, ati inteles ideea. Problemele trebuie sa fie cat mai variate. O data ce ai ajuns la nivelul “de baza”, trebuie sa tintesti spre ceva mai sus “nivelul de olimpiada judeteana” spre exemplu
- Cum ai reusit sa stai disciplinat si ce program ai avut zilnic?
La aceasta intrebare nu pot raspunde, deoarece nu am fost atat de disciplinat precum mi-as fi dorit. Programul meu zilnic “de lucrat” la informatica era dupa ora 16 cand terminam scoala. Dar va imaginati ca stateam cateva ore pe Facebook, dadeam vrajeala la fetele de la mine din liceu, iar efectiv lucrat pentru informatica, nu cred ca lucram mai mult de 2-3 ore pe zi.
- Cand ai inceput sa inveti programare/informatica ca lumea
Cand am intrat la liceu, in clasa a IX-a. Am observat ca stiu deja o buna parte din materie, asa ca am primit un “boost” de incredere ce m-a facut sa continui.
- Te-a ajutat matematica la ceva?
Nu. Singura parte din matematica ce te ajuta este logica. Eventual formulele matematice pentru geometrie atunci cand rezolvi probleme de olimpiada sau de interviuri.
- Ai avut nevoie de ajutor? Sau ai reusit in totalitate singur?
Am avut nevoie de ajutor pentru a ma antrena de faza nationala a olimpiadei de informatica si am avut un profesor din liceu ce m-a pregatit. Tot el m-a invatat metoda de “hacker” sa analizez cazurile extreme, AIB-uri, RMQ-uri, cam tot ce tine de Arhiva Educationala, cu el am facut-o. Si tin sa ii multumesc pe aceasta cale (desii nu cred ca o sa vada videoclipul asta prea curand)
- Cat ar fi durat sa inveti toate astea daca ai fi stiut cum sa faci un management mai bun al timpului?
O intrebare foarte buna. Daca luam ca punct de start clasa a 6-a, iar acum sunt in anul IV de facultate, ar fi in total cam 10-11 ani. Daca as fi avut un management al timpului bun, si nu mi-ar fi stat capul dupa fete, probabil aceasta durata ar fi fost redusa la jumatate.
- Ce faceai cand stateai peste 5 ore la o problema si nu reuseai sa gasesti o rezolvare
Nu va recomand metoda mea, dar daca tot a venit si aceasta intrebare.. in momentul cand petreceam ore in sir sa rezolv o problema si nu imi iesea, cautam varianta de rezolvare pe internet (sau dadeam mesaj privat tuturor care luau 100 de puncte pe infoarena) si ma milogeam de ei sa imi dea codul sursa. Mai apoi luam codul sursa si “il converteam” intr-un cod ce ar fi putut fi scris de mine. Mai apoi, luam metoda mea de rezolvare, si metoda de 100p si comparam linie cu linie pe hartie.
- De ce codul lui e mai rapid? Ce face el si eu nu fac?
- De ce sorteaza sirul? Cu ce il ajuta?
- De ce nu a parcurs sirul de la inceput, si l-a parcurs de la final?
- De ce de ce de ce
Este foarte bine sa iti pui aceasta intrebare atunci cand rezolvi probleme. Informatica nu poate fi rezolvata doar pe calculator, vei avea tot timpul nevoie de un pix si un caiet pentru a desena cerinta problemei, pentru a intelege mai bine ce vrea de la tine.
In incheiere as vrea sa va spun ca oricine poate ajunge programator, nu este nevoie de carti si nu este nevoie de programe scumpe ce costa peste 5,000 de euro. Singura persoana ce te poate ajuta sa ajungi acolo unde iti doresti esti tu. Si numai de tine depinde succesul tau.
Daca ai nevoie de cineva care sa te ajute sa inveti, atunci da click pe link-ul din descriere pentru a te inscrie la o sedinta gratuita de consultanta.
Glumeam.. cam asta a fost pe astazi, va multumesc tare mult pentru vizionare, daca aveti intrebari sau nelamuriri, nu uita sa le lasi in casuta de comentarii de mai jos, eu am fost Mihai si ne auzim data viitoare!