O să-ți descriu azi abordarea pe care o am eu atunci când învăț ceva nou, dar și câteva greșeli pe care eu le-am făcut și nu vreau ca tu să le repeți.
O recomandare pe care o fac și eu mereu, e să înveți programare prin practică, sau “learning by doing”. Dar există o problemă în abordarea asta. O greșeală pe care și eu o fac chiar și acum de prea multe ori.
Ce este “learning by doing” în programare
Înainte de toate, hai să vedem la ce mă refer prin “learning by doing”.
Ei bine nu e niciun secret, înseamnă să înveți făcând mai degrabă practică decât studiind teorie. Adică să te apuci direct de proiecte dintr-o fază destul de incipientă.
Pentru mulți dintre noi învățatul de lucruri noi presupune să “tocim” niște teorie pe care mai apoi să o putem recita atunci când cineva ne întreabă.
De ce se întâmplă asta?
Păi e evident, din cauza sistemului de învățământ convențional în care suntem obișnuiți să memorăm lucruri, în loc să înțelegem și să explicăm conceptele cu cuvintele noastre.
Ba chiar mai mult, sunt cazuri în care nu ai voie să schimbi un text care îți este predat, ci trebuie să îl înveți cuvânt cu cuvânt (da, mi s-a întâmplat personal asta la un curs din facultate).
Nu cred că există atitudine mai toxică și experiență mai proastă pentru un student/elev.
Atunci cred că e evident că suntem foarte reticenți atunci când încercăm să învățăm ceva direct făcând, în loc de memorând pagini întregi de teorie.
Acum să revenim, spuneam că abordarea asta presupune să te arunci direct în practică cât mai devreme.
Asta poate fi extrem de util, mai ales atunci când vorbim de programare.
Bineînțeles, nu mă înțelege greșit, programarea are aspectele ei teoretice destul de adânci, nu e olărit să înveți doar prin practică.
Dar în cazul ăsta, o să înveți foarte mult în momentul în care te lovești direct de probleme și le rezolvi. Probabil nu vei reține chiar din prima soluția unei probleme, dar în momentul în care se ivește deja a doua, a treia oară, cu siguranță vei ști soluția.
Și pentru că nu suntem la școala generală, să memorăm lucruri, chiar dacă nu îți va veni soluția direct din minte, vei ști ce și unde să cauți pentru a o găsi.
Dar înainte să te arunci direct în proiecte și scris cod, trebuie să știi un lucru.
Nu ignora complet teoria când înveți programare
Problema este că dacă te ghidezi doar după abordarea asta, vei avea mari lacune în fundația cunoștințelor tale.
Știu că de multe ori, plăcerea de a scrie cod ne face să ne grăbim teribil și să ne apucăm de proiectul ăla interesant la care visăm, fără să stăm prea mult pe gânduri.
Începem cu mare avânt să lucrăm o zi, două, trei, dar la scurt timp, frustrarea începe să se adune. Orele petrecute făcând research pe StackOverflow și alte site-uri cresc vertiginos și pare că pe măsură ce înaintăm, progresul scade exponențial.
Ne lovim de tot felul de erori pe care nu le înțelegem și deși se găsesc o grămadă de potențiale soluții online, nimic nu merge în cazul nostru.
Așa îți vei petrece o bună parte din timp, iar în scurt timp, gândul că ar trebui să abandonezi proiectul ăsta deja apare.
Te gândești câ ar fi bine să renunți la el și să începi altul fresh, pentru că acum înțelegi unde ai greșit și data viitoare nu vei mai face aceleași erori.
Nicio șansă, vei face și următoarele dăți fix aceleași greșeli, pentru că e ca și cum ai încerca să pornești mașina fără benzină.
Probabil că până chiar și așa, dacă ești suficient de perseverent vei reuși să înveți din toate iterațiile astea, pentru că vei mai începe să înțelegi cum să rezolvi anumite probleme care apar de mai multe ori.
Dar chiar și așa, fie le vei rezolva printr-o metodă greșită, fie nu vei înțelege de ce merge după ce aplici soluția respectivă.
Și asta te pune într-o poziție extrem de proastă, pentru că deși pare că evoluezi, tu de fapt aplici niște soluții care ai văzut că merg, fără să înțelegi de fapt care este problema și unde greșești.
Aproape că ai putea spune că ai ajuns în același stadiu: învațatul prin memorare.
Teorie înainte de practică
Acum că ți-am povestit toate lucrurile astea, probabil că îți spui: “ok, păi și atunci ce să fac?”
Păi răspunsul cred că e evident, lasă-te purtat de val în proiectul tău, dar citește și ceva teorie în același timp.
Nu trebuie să o faci cu notițe, cu foaie și pix, pentru că nu vor avea mare efect cred.
Doar citește, îți promit că pe măsură ce citești despre cum funcționează lucrurile în profunzime, vei începe să faci niște legături mentale și vei avea revelații.
Citește teorie multă și fă practică și mai multă.
Poate că îți pare că e foarte multă informație, dar după câteva luni în care ai făcut asta, nici n-o să-ți dai seama cât de mult ai reușit să evoluezi.
Pentru că nu numai că poți scrie cod mult mai ușor, dar poți să și argumentezi alegerile pe care le faci în codul tău.
Poți să vezi greșeli pe care le-ai făcut în codul scris anterior și să le corectezi. Îți promit că refactorizarea propriului cod îți va da o satisfacție enormă și senzația că evoluezi.
Asta te va motiva și mai tare, lucru care evident va face să crești și mai mult.
Acum poate te întrebi, de unde să iei teoria asta de citit.
Păi în primul rând din documentația tehnologiei pe care o folosești. Dacă scrii React, există documentație foarte bună, dacă scrii C#, există la fel documentație foarte bună. Chiar dacă scrii JavaScript nativ, există o documentație foarte bună.
Începe cu documentația, dar nu te opri aici, citește constant articole de blog, scrise de oameni mai pricepuți și uită-te peste cod scris în proiecte serioase. Da, proiecte open source pe care le găsești pe GitHub, vei învăța enorm din asta.
Urmărește câteva cursuri sau tutoriale online și fii atent la ce explică instructorul. Scrie codul o dată cu el și ascultă atent ce explică.
Știu, poate asta nu e la fel de interesant ca scrisul codului direct, dar poți face asta în paralel. Îți faci un fel de program, în care să studiezi și teorie și să lucrezi și la proiectul tău.
Combină toate sursele astea de teorie, dar acordă-ți timp pentru a putea sedimenta toate informațiile.
Apropo, dacă ești în căutarea unui curs online dar nu știi ce să alegi, s-ar putea să te pot ajuta. C# Masterclass te va ghida atât cu teorie cât și practică printr-o călătorie dincolo de nivelul cunoștințelor de junior. Nu doar că vei putea învăța structurat, dar bonusurile primite te vor ajuta treci mai ușor peste interviurile tehnice și să-ți ghidezi cariera spre nivelurile superioare de senioritate.
Deși pare că lucrurile s-au derulat destul de repede, povestea nostră poate dura mai bine de un an până să ajungi la un nivel destul de incipient de cunoștințe.
Desigur, spun destul de incipient raportându-mă la nivelul de cunoștințe cu care operează un programator la job în task-urile de zi cu zi, dar pentru tine, nivelul ăsta incipient înseamnă o cantitate semnificativă de informații și un progres destul de mare.
Cod fără teorie
De ce cred eu că o combinație între toate lucrurile descrise mai sus, e cea mai bună soluție?
Evident, pentru că și eu am trecut prin asta.
Mint, încă mai trec de multe ori prin asta, când trebuie să asimilez un subiect cu care nu m-am mai întâlnit până atunci.
Trec repede la treabă și mă folosesc de intuiție și de “trial and error” ca să duc la bun sfârșit un lucru.
Și după multe încercări fără reușită, ajung într-un final pe pagina de documentație la secțiunea “Getting Started”. Trag niște aer în piept și mă pun pe ctitit.
Deja am pierdut foarte mult timp încercând să fac un lucru fără să înțeleg exact ce fac.
De multe ori, experiența mă ajută și reușesc să fac lucrurile chiar și așa. Mai ales dacă există deja implementări sau exemple ale aceluiași lucru în proiectul în care lucrez.
Pot să extrapolez și să fac implementarea doar observând și aplicând șabloane.
Dar de multe ori, în situația mea, sunt condiționat de un deadline și nu am timp să înțeleg toate aspectele teoretice necesare. Deși asta ar fi o investiție pe care aș recupera-o fiind mai productiv în timp.
Dar tu, cel care acum interacționezi cu primele linii de cod, asigură-te că te agăți de cât mai multe resurse, pentru a avea o fundație solidă. Nu te grăbește nimeni.
Știu, promisiunile cu salarii mari și speranța unui job mai lejer te fac totuși să devii mai grăbit și mai anxios în tot procesul ăsta. Dar asta nu te ajută.
Programarea nu e copiatul de cod dintr-o parte în alta. Chiar dacă ai auzit tu de la vecinul de lângă tine, că are el un prieten care lucrează în IT și nu face nimic toată ziua și mai ia și o gramadă de bani.
Concluzie
Tehnica pe care o descriu aici evident că depinde, de la persoană la persoană, nu toată lumea poate asimila informații în același mod.
Dar dacă ești genul de persoană care în general preferă să se apuce rapid de treabă și nu-și bate capul prea tare cu teoria, ce spun aici s-ar putea să te ajute.
Așa că data viitoare când vrei să tratezi repede o tehnologie cu care nu ai mai lucrat până atunci, adu-ți aminte de asta.
Mai ales dacă ți s-a întâmplat în trecut și ai petrecut mai multe ore încercând să te deblochezi din erori banale care, dacă ai fi știut minimul necesar despre subiectul în cauză, nu ar fi existat.
Știu că pare timp pierdut, dar în timp, învățatul structurat în felul ăsta o să-ți salveze de fapt timp.
Acum nu vezi asta, dar dacă pici în plasa de a te băga de câteva ori într-o situație de genul ăsta o să înțelegi ce zic.
Cam atât pentru azi, pe data viitoare.