Sari direct la conținut »

Tutorial Hell și cum să ieși din el

Tutorial Hell și cum să ieși din el

Vă place că rimează? 🙂 Și mie. Ăsta e un articol rapid scris ca inspirație din întrebările pe care le tot primesc de la voi pe mail și Discord și pe care aș vrea să le răspund într-un fel în care ajută și alți oameni. Așa că am făcut un articol cu detalii despre cum să ieși din Tutorial Hell.

Înainte de toate, vreau să-i mulțumesc lui Denis, care a fost ultimul care mi-a scris pe tema asta și m-a inspirat să scriu și să public articolul curent, care e o variantă extinsă a reply-ului pe care i l-am trimis lui.

Ce înseamnă Tutorial Hell?

Tutorial Hell e starea aia în care intri când ești prins sau prinsă într-un ciclu continuu în care consumi tutoriale de programare (sau de orice fel) fără să poți aplica niciuna din cunoștințele dobândite în viața reală ca să construiești aplicații sau proiecte pe cont propriu. E foarte frustrant pentru developerii la început de drum care se simt copleșiți și nesiguri legat de cum să facă primul pas în călătoria lor de învățare. Natura repetitivă a procesului ăstuia de a parcurge tutoriale fără să dobândești abilitatea de a folosi cunoștințele de acolo are potențialul să-ți blocheze capacitatea să rezolvi probleme, care e esențială în procesul de a construi proiecte și implicit un portofoliu.

Azi vom discuta despre cum să scapi din Tutorial Hell în special din perspectiva unui om care vrea să devină Front End Developer – dar sfaturile se pot aplica oricui, care învață orice lucru nou, schimbând puțin contextul tehnic analizat și adaptând exemplele.

Secrete care te ajută să scapi din Tutorial Hell ca Front End Developer (și nu numai)

1. Nu mai pune presiune pe tine și nu pleca de la zero

S-ar putea să ai senzația că superstarurile din IT se pun în fața unui IDE gol și încep direct să scrie de la zero o aplicație de succes fără niciun efort sau fără contribuție externă. Nimic mai fals!

Primul și unul din cele mai importante sfaturi pe care le am e să nu mai pui presiune pe tine că „trebuie” să știi cum să faci… orice, din memorie. Nu trebuie să știi să faci nimic de la zero.

Nici eu când mă pun în fața unui IDE gol nu știu cum să-ncep sau de ce am nevoie ca să parcurg pasul următor, fiindcă aleg să nu-mi încarc memoria cu toate detaliile astea când am la dispoziție nenumărate surse de informații de la care să plec. De obicei mă inspir de undeva, „fur startul” luând fie munca mea mai veche (un proiect pe care-l pot adapta) fie inspirându-mă de la alții: din exemplele concrete sau proiectele altora de pe GitHub, așa cum am făcut spre exemplu și cu proiectul pe care-l abordăm acum în live-uri despre transformarea listei de resurse de învățare într-un website complet. Și pe măsură ce încep să mă lovesc de lucruri pe care-mi dau seama că trebuie să le fac, fie caut pe Google, fie pe YouTube, fie mă inspir din alte proiecte care știu că rezolvă problema asta într-un mod similar cu ce vreau eu și asamblez bucăți de cod (sau scriu cod nou, sau îl rog pe GitHub Copilot să mă ajute) care să bifeze „pasul următor”.

Cea mai importantă scară e următoarea. Cea mai importantă problemă de rezolvat e cea pe care ai decis tu s-o rezolvi acum. Concentrează-te pe bucăți mici din proiect ca să poți da gata tot proiectul. Ia-o încet!

Acest „pas următor” e cel mai important. Cea mai importantă scară pe care o ai de urcat este cea care urmează. De-aia cu timpul înveți să împarți proiecte mari și probleme mari în bucăți mici și abordabile, și să le ierarhizezi sau ordonezi într-un fel logic așa încât dacă urmezi pas cu pas, scară cu scară, drumul către linia de finish poți să îți faci măcar o idee despre efortul necesar în a dezvolta proiectul sau rezolva problema.

Abia apoi intervine creativitatea, în „pasul curent”: când încerc fie să optimizez cazul ăla generic pe contextul meu specific, fie când simt nevoia să optimizez chestia aia generică și s-o fac mai mulată pe datele sau nevoile aplicației curente.

Plus că în multe circumstanțe simt că nu pot progresa fiindcă nu știu exact care sunt pașii următori, deci e nevoie să petrec niște ore sau zile pur și simplu organizându-mi munca și lucrurile care sunt necesare de făcut în viitor, ca mai apoi să mă pot așeza liniștit să codez ce am nevoie având planul făcut dinainte. Tu ca începător n-ai de unde să știi cum să faci un plan din ăsta până nu treci tu singur sau singură prin experiența dezvoltării unui proiect de la un cap la altul, și de-asta e OK să te iei după planurile făcute de alții – fie în tutoriale sau cursuri, fie ca sfaturi pe care le primești când întrebi despre asta pe oameni cu mai multă experiență.

„Cum îmi fac un plan?”

Mi se pare cea mai rar pusă întrebare dintre toate de către începători, fiindcă majoritatea nu știu că au nevoie de planificare înainte de a munci efectiv, și pur și simplu se apucă de treabă fără să aibă un țel anume sau o idee de pașii care trebuie urmați să ajungă la rezultatul dorit.

Deci pe scurt: când nu știi cum să începi, ia un proiect deja făcut (chiar un proiect de tutorial dacă ți-e la îndemână) și modifică-l sau sparge-l în bucăți mai mici și încearcă să înțelegi cum e construit. Nu trebuie niciodată să pleci de la zero absolut, de la o pagină goală, în care trebuie să scrii tu direct ce ai nevoie ca să construiești o aplicație completă, pentru că de cele mai multe ori nu știi ce presupune o aplicație completă și oricum n-ai cum să știi cum să îți organizezi munca s-o construiești până nu dobândești niște experiență cu asta.

Hobby-ul meu preferat când învățam HTML era să mă uit pe site-uri mișto și să copiez codul oamenilor ălora, să înțeleg cum e făcut și apoi să-l modific să iasă cum vreau eu în proiectul pe care-l dezvoltam în acel moment. Poate fi chiar fun, recomand!

2. Învață să cauți singur/ă răspunsurile tehnice

Dacă te blochezi undeva tehnic și nu știi cum să rezolvi o problemă concretă, trebuie să înveți să cauți pe Google, StackOverflow, dev.to și alte site-uri similare, iar în ultimă instanță să întrebi specialiști și colegi de domeniu. Sună ușor, dar e mai greu decât pare.

E o artă în sine să găsești paginile sau rezolvările cât mai apropiate de ce ai tu nevoie, din detaliile pe care le incluzi în căutare și din felul cum începi să înveți care sunt site-urile care chiar au răspunsuri viabile și care sunt site-urile sau comunitățile care-ți pierd vremea. Și nici asta nu se învață din prima, îți trebuie timp și multe căutări nereușite din care nu trebuie să îți pierzi răbdarea și să nu disperi că nu găsești exact ce vrei. Persistența e cheia aici.

3. Găsește un proiect pe care să-l faci din pasiune

E posibil să fii în Tutorial Hell pentru că nu ai motivația necesară să duci lucrurile la bun sfârșit, să înveți ce ai de învățat și să începi să aplici la niște proiecte de-ale tale. Și motivația asta se poate găsi și în tipul sau tema aleasă pentru proiect.

Dacă vrei să te apuci de ceva practic, în general e ideal să fie ceva ce-ți place să construiești (cel puțin la început, ca să ai motivație). Și direcțiile astea pot să vină direct din pasiunile tale. Dacă-ți place să te joci, fă un joc (chiar și din cele mai banale de genul Hangman / Spânzurătoarea sau Tic Tac Toe / X și 0). Dacă-ți place să fii organizat, fă un To Do List. Dacă-ți place să călătorești, fă un blog de travel. Dacă-ți place să gătești, fă o listă de rețete cu date structurate. Dacă-ți place arta, fă o galerie de artă exclusiv cu lucrările artiștilor preferați.

Un joc simplu de X și 0 e un început excelent pentru proiectele tale dacă-ți plac jocurile.

Orice-ai face, e important ca primele proiecte să beneficieze nu doar de motivația ta de a învăța meseria practică și tehnologiile implicate în codarea unui site sau aplicații web (sau a orice altceva încerci să înveți acum), ci și motivația intrinsecă venită din faptul că tu chiar vrei să faci ceva care să-ți placă, să fie util sau interesant pentru tine sau apropiații tăi. Asta te va ajuta să rămâi motivat când (în mod inevitabil) te vei bloca pe undeva.

Cu toții ne blocăm. Doar că oamenii cu experiență au învățat să caute soluții sau să aibă răbdare cu blocajele astea și să le ocolească sau rezolve în mod elegant, din anii de experiență din spate. Tu neavând experiență în a gestiona genul ăsta de probleme, vei simți frustrare și poate chiar te vei lăsa de treabă dacă nu-ți iese ceva, dacă ți se pare greu sau inconfortabil. Ceea ce e una din cele mai mari bariere în a învăța ceva nou. Pentru că orice „joc” vrei să joci în viață (inclusiv ăsta de a învăța ceva nou), important nu e să „câștigi” de fiecare dată, important e să crești șansele statistice să poți juca de cât mai multe ori. În felul ăsta, va fi inevitabil să devii mai bun sau bună în ce faci, și să câștigi din ce în ce mai des.

Și deci dacă proiectul pe care încerci să-l construiești îți place nu doar din motivul că înveți ceva nou, ci și că ești pasionat de cum ar putea fi rezultatul final fiindcă se leagă de un interes de-al tău intrinsec, sunt șanse să găsești resurse mentale și voința să depășești blocajul mai repede. Dacă e ceva plictisitor și care nu-ți aduce plăcere sau valoare, o să lași treaba baltă și probabil o să încerci altceva sau n-o să mai încerci nimic. Și nu e OK așa.

Dacă pur și simplu nu găsești nicio idee printre pasiunile tale pe care s-o folosești ca bază a proiectului pe care vrei să-l dezvolți, fă ceva similar, dar nu identic, cu proiectul dezvoltat de omul care face tutorialul pe care-l urmezi în momentul ăsta. Dacă faci ceva similar, îți transferi toate cunoștințele deja acumulate direct în execuția unui lucru nou și ușor diferit față de ce-ai învățat să construiești în tutorial și tot e ceva mai bine.

4. Ia-ți timp și ai răbdare

Poate cel mai important lucru de ținut minte: lucrurile astea iau timp. Nu îți seta așteptări greșite cum că trebuie să treci la pasul următor din procesul de învățare în mai puțin de X zile / săptămâni / luni. Nu dispera că nu-ți iese din prima. Nu te speria că durează săptămâni să faci chiar și o chestie banală. Așa e la început. Nimeni n-a făcut lucrurile astea perfect din prima.

Răbdarea și perseverența sunt printre cele mai importante calități de care ai nevoie ca să reușești să înveți domeniul ăsta, pe lângă ce-am zis în restul articolului pe care-l citești acum. Așa că dă-ți timp și nu te grăbi, și o să vezi că lucrurile se leagă după ce încerci de mai multe ori sau după ce vezi mai multe feluri de a rezolva problemele cu care te confrunți.

Ăsta e și unul din motivele pentru care eu recomand parcurgerea ÎNTREG documentului ăstuia cu resurse sau măcar primele 7-8 pagini. Chiar dacă sunt lucruri care se repetă sau pe care le știi, repetiția e mama învățăturii. Dacă găsești 2 cursuri care par că predau același lucru, fă-le pe amândouă, repetă lucrurile pe care le știi deja ca să le aprofundezi. Îți garantez că vor fi diferențe, nuanțe și accente puse altfel pe niște informații, care te vor ajuta să înțelegi teoria din mai multe unghiuri și asta îți va da flexibilitate în abordare când te vei apuca de un proiect.

Versatilitatea asta în abordare e foarte utilă la job, când ai tot felul de constrângeri pe care în condiții „controlate” de tutorial n-o să le ai niciodată. Deci e un skill bun de avut în carieră.

5. Codează în timp ce înveți, nu după

Pe măsură ce înveți, codează tu singur/ă exemplele din tutoriale și cursuri, inspirându-te de acolo. Unul din motivele pentru care Scrimba e o platformă excelentă este că îți arată simultan și video-ul cu profesorul și interfața unui IDE unde poți face și tu edit-uri live. Asta mi se pare că ajută mult procesul de învățare.

Alternativa e să faci un curs de pe orice platformă și după fiecare lecție să aplici noțiunile nou învățate într-un proiect de test de-al tău, să vezi cum funcționează, să te inspiri din ce fac oamenii ăia în curs, eventual să revii asupra noțiunilor predate cât sunt încă proaspete. Și la final, să faci neapărat proiectele date ca temă la final de secțiune și pe parcurs, ca să înglobezi cunoștințele predate pe măsură ce le acumulezi, nu doar după ce se termină cursul.

Așadar, nu coda doar după ce consumi conținut. Codează în timpul în care consumi conținut sau imediat după fiecare lecție în parte, ca să ai șanse maxime să reții și să vezi și rezultatele muncii în timp real. Cine știe? Poate riști să înceapă chiar să-ți placă ce faci. 🙂

6. Nu te compara cu alții

Uneori ne demotivăm singuri când ne comparăm cu percepția noastră despre cât de rapid ni se pare c-au evoluat alții și cât de greu ni se pare că evoluăm noi. Asta se leagă și de punctele 1 și 4 de mai sus, dar vreau să tratez treaba asta separat tocmai fiindcă e o problemă foarte frecventă și insipidă.

Da, poate alți oameni învață unele lucruri mai repede și alții mai încet. E perfect normal, avem tipuri diferite de inteligență și în IT, chiar și pe același job, e nevoie de oameni cât mai diverși în echipe, ca să poată aborda lucrurile cât mai holistic.

Plus că faptul că o persoană învață (sau i se pare că învață) mult mai repede un lucru nu-i face neapărat buni profesioniști. Câteodată faptul că insiști, că petreci mai mult timp pe stăpânirea unei zone tehnice (tu având senzația că n-o știi suficient de bine) s-ar putea să te ajute să o înțelegi mult mai bine decât cineva care are impresia că știe deja „cu se se mănâncă” și s-ar putea să te ajute să îți dezvolți mai mult alte skill-uri care derivă din detaliile de implementare ale aspectului tehnic respectiv. Și o să-ți dea și o percepție mai adecvată legată de dificultatea pe care s-ar putea s-o aibă și alții de a înțelege zona respectivă.

7. Folosește resurse cât mai diverse

Tutorialele nu sunt singura sursă de inspirație pe care o poți folosi când înveți. Pe mine personal mă ajută foarte mult cheat sheet-urile și documentația.

Un cheat sheet despre CSS Grid făcut de Mariana Simon pe dev.to și Twitter: https://twitter.com/simonpaix

Cheat sheet-urile (exemplul de mai sus e de la Mariana Simon) sunt liste de funcții sau comenzi sau orice ai nevoie ca să înțelegi și să folosești lucrul pe care-l înveți, în format foarte compact. Documentația unei tehnologii noi de multe ori dă exemple și explică pe scurt ce face fiecare bucată din acea tehnologie.

Dacă niciuna din formele astea de explorare a informației nu funcționează, mă uit la un video sau la un exemplu în care lucrul pe care vreau să-l construiesc e deja făcut și funcțional, și încerc să urmăresc cum ajunge persoana care l-a construit la forma respectivă citind codul și parcurgând video-ul.

Alteori, am nevoie de un curs întreg ca să înțeleg logica din spatele folosirii unei tehnologii nou învățate. Și alteori, doar de un articol care explică diverse moduri de abordare a tehnologiei respective, din care să-mi aleg un unghi care-mi convine. Sau pur și simplu un exemplu de cod din GitHub care rezolvă problema așa cum vreau eu.

Ce vreau să spun e că fiecare din noi învățăm eficient în alt mod și felul cum asimilăm informație se schimbă în funcție de contextul în care suntem. Dacă tutorialele nu par să funcționeze bine pentru tine, schimbă mediul prin care-ți iei informația (video, audio, text, curs, exemplu, articol, etc)… sau chiar „profesorul” de la care înveți (autorul tutorialului). Poate că un curs care părea promițător la început a devenit super plictisitor când ai ajuns la jumătatea lui. Asta poate să-nsemne că te plictisește „materia” predată, sau pur și simplu că profesorul care-ți predă nu mai e interesat să se facă plăcut și înțeles când predă lucrurile respective. Sau poate nu-i înțelegi accentul. Și așa mai departe.

Cum ziceam și mai sus, diversitatea îți dă flexibilitate când abordezi o problemă nouă. 3 feluri de a rezolva aceeași problemă nu înseamnă timp pierdut, înseamnă abilitatea de a alege cea mai bună modalitate de rezolvare pentru contextul în care ești.

8. Din când în când, ieși din zona de confort

Uneori poți începe să te simți în largul tău făcând tutorial după tutorial, și viața unui profesionist nu e chiar așa. E nevoie ca ocazional să te confrunți și cu lucruri mai grele, neprevăzute, mai în afara zonei de confort. E nevoie să te scoți din rutină și să faci lucruri noi, care să semene cu ceva ce ai putea primi ca proiect dacă ai lucra deja în domeniu. Sau dacă lucrezi deja, imaginează-ți că primești ceva destinat cuiva cu un nivel de senioritate peste al tău (dacă ești junior, pentru mid, dacă ești mid, pentru senior, dacă ești senior, pentru principal sau arhitect).

Și de-asta, uneori ai nevoie să ieși din sfera proiectelor ghidate de tutorialele sau cursurile pe care le parcurgi și să îți iei inima-n dinți pentru a-ți dovedi că există progres real. Asta nu înseamnă să-ți dai challenge-uri foarte grele din prima, dar dacă ești la început de drum, după ce ai deja 7-8 cursuri sau tutoriale finalizate, e timpul să iei la mână un site cum este frontendmentor.io și să te apuci să faci unul din challenge-urile lor de front end. Și nu te lăsa până nu-l termini, chiar dacă te blochezi sau ți se pare mai greu ca un tutorial, folosind toate lucrurile sugerate deja de mine mai sus: caută pe Google, întreabă comunitatea, crește-ți răbdarea și dezvoltă niște rezistență la stress. La finalul unui challenge din ăsta te vei simți atât de bine încât vei crede că poți să urci și Everestul! Și asta e perfect! Folosește energia și motivația din doza asta de dopamină ca să te apuci de un alt proiect, un alt challenge sau un alt curs mai dificil. Și tot așa.

9. Abordează probleme cu greutate progresivă

Dacă ți-ai propune să îți organizezi viața, ai începe direct cu ce e mai greu, sau cu ce e mai la îndemână?

Dacă ai vrea să urci Everestul, te-ai duce direct acolo fără nicio pregătire, sau ai începe cu un deal, apoi Moldoveanu, Mont Blanc și abia apoi Everest?

Dacă ai vrea să alergi la maratonul de 40km, te-ai duce direct fără pregătire să-ți dai duhul pe pistă, sau ai lua-o încet de la 1km, apoi 2, apoi 4 și așa mai departe?

Cred că-nțelegi ce vreau să spun. Lev Vygotsky are o teorie numită Zona Dezvoltării Optime sau Proxime. În ea, el zice că un om se poate dezvolta în orice arie în mod optim dacă pornește de la lucruri pe care le înțelege și stăpânește și apoi iese puțin din zona de confort, abordând lucruri doar puțin mai grele decât cele uzuale, așa încât să ajungă să le stăpânească și pe alea, și tot așa.

Zona dezvoltării proxime sau optime și unde se află ea în relație cu restul zonelor.

Dacă-ți imaginezi un cerc sau disc și-l împarți în 3 zone concentrice, zona interioară e cea pe care o stăpânești deja. Spre exemplu, dacă te-ai apucat să înveți web development și ai trecut cu brio prin HTML și CSS, înseamnă că astea două tehnologii se află, cel puțin parțial, în zona asta interioară pe care o știi și o folosești oricând cu plăcere și ușurință. Unii oameni rămân toată viața aici. Reușesc să învețe ceva valoros pentru societate, un job sau un lucru

Zona exterioară e zona imposibilă pentru tine momentan. Zona pe care oricât te-ai strădui în acest moment n-o poți aborda în niciun fel. Nu știi de unde s-o apuci. În zona asta se aruncă de obicei oamenii foarte ambițioși sau cei care au foarte multă încredere în ei. Și aproape tot timpul se lovesc de eșec. Și asta pentru că drumul natural din interior în exterior trece prin zona intermediară.

Zona de mijloc, dintre cea interioară de confort și cea exterioară de imposibilitate se numește Zona Dezvoltării Proxime sau Optime. În zona asta, orice lucru pe care vrei să-l faci sau să-l înveți construiește peste ce știi deja și deși ți-e mai greu decât în zona comodă, totuși reușești să progresezi – fie citind, fie văzând pe alții cum fac, fie ascultând podcast-uri, fie fiind ghidat/ă de un mentor sau specialist sau o comunitate, fie explorând și descoperind singur/ă.

Concret, oricând înveți ceva nou, trebuie să înveți să stai tot timpul ancorat/ă în lucrurile pe care le știi deja și să explorezi progresiv lucruri mai grele. Dar nu merge mai departe prea repede, înainte să simți că stăpânești cunoștințele nou acumulate! Și secretul este să stai în „zona de mijloc” toată viața, la orice vârstă și în orice context în care te afli. Nu te opri niciodată din învățat lucruri noi care te interesează, și care nu-s neapărat mult mai grele decât știi deja, ci abordabile și plăcute pentru tine. Asta-ți va asigura robustețe mentală, claritate și viziune, te va proteja de boli mentale la bătrânețe și-ți va asigura o carieră de succes, pentru că orice angajator își dorește în echipă pe cineva care învață continuu lucruri noi (și relevante pentru lucrurile pe care le face deja la job) – plus că de la un punct încolo poți aplica cunoștințele acumulate și ca să începi să muncești pentru tine.

10. Uneori, pur și simplu e nevoie să înveți bazele

Dacă nimic din ce-am zis mai sus nu funcționează, șansele sunt că pur și simplu nu înțelegi suficient de bine bazele tehnologiei pe care o înveți. Și asta se întâmplă de obicei dacă spre exemplu vrei să înveți React și nu știi JavaScript. Sau dacă vrei să înveți UX dacă nu știi bazele design-ului. Sau dacă vrei să înveți SEO dacă nu știi bazele marketing-ului.

Dacă luăm în calcul punctul 9 de mai sus, e ca și cum ai încercat să înveți o parte din zona exterioară fără să pornești din centru. Ai reușit practic să creezi o mică insulă de cunoștințe disparate pe care nu știi cum să le legi de restul abilităților și experienței tale și din cauza asta, deși poate stăpânești o parte din lucrurile de acolo, n-ai șanse să performezi niciodată până nu unești zonele între ele și îți găsești o „rădăcină” care să stabilizeze cunoștințele avansate pe care le-ai dobândit.

Dacă pare că lucrurile pe care le înveți nu au nicio legătură cu ce știi deja, extinde-ți bazele așa încât să le conectezi de lucrurile pe care le stăpânești.

Sfatul meu în cazul ăsta e să pui pe pauză lucrurile foarte avansate, pe care te-ai grăbit să le înveți (sau ai fost prost sfătuit/ă) dar pe care nu le stăpânești mai deloc și să te întorci la fundamente, să pornești din centru, către Zona Dezvoltării Optime.

Dacă ai probleme tehnice concrete de care te lovești, scrie în comunitatea de aici, de pe Discord și te ajutăm în secțiunea corectă (Design, Development, etc) – nu doar eu, ci și restul oamenilor din comunitate.

Mai găsiți alte materiale utile despre subiectul ăsta pe FreeCodeCamp, Reddit și cu siguranță și pe Google. 🙂

Dacă vă mai pot ajuta cu idei sau lucruri concrete, vă stau la dispoziție! Aștept comentarii, mail-uri sau mesaje pe Discord și încerc să vă ajut cu orice pot.

Spor la treabă!

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.