– Mai Ovidiu tu te auzi ce zici? Nu se poate una ca asta! Abia trecusera 15 ani de cand s-a inceput productia de masa a calculatoarelor personale iar Tim Berners-Lee abia crease idea de site-uri web pe care ne dam noi acum. Yahoo abia aparuse, iar Google si Youtube nici macar nu erau create! Revino-ti!
– Ai perfecta dreptate cititorule. Web-ul abia aparuse iar calculatoarele personale erau mult mai rare decat masinile personale. Ai putintica rabdare si poate ca la final imi vei da dreptate (sau ma vei huidui). 🙂 Sa stii ca ce am scris mai jos cele ce le voi scrie mai jos sunt adevarate, adica e povestea mea cu programarea..
1. Povestea mea
Totul a inceput in vacanta de iarna din anul 1992, eram in clasa I. In acea iarna varul meu, cu 9 ani mai mare decat mine, a venit la noi in vacanta aducand cu el un CIP 03 (Calculator de Instruire Programabil) caruia ii incarcam interpretorul BASIC de pe caseta audio (vezi imagine). Si jocurile video tot de pe caseta audio le incarcam. Asa ca in acea vacanta m-am distrat jucand Load Runner si alte cateva jocuri.
Peste 2-3 ani varul meu si-a luat alt calculator (HC91) iar CIP-ul a ajuns pe mana mea si dupa cateva saptamani sau luni de jucat m-am plictisit (sau m-am frustrat pentru ca nu reuseam sa trec de unele nivele de joc). Si pentru ca facusem rost de o carte de BASIC, in loc sa pregatesc caseta de jocuri, dupa ce incarcam interpretatorul Basic, am inceput sa ma uit pe acea carte si sa copiez ca papagalul tot ce imi zicea in acea carte. Apoi modificam exemplele date de ei. Apoi le combinam intre ele. Testam tot ce imi trecea prin minte pentru ca stiam ca nu am ce strica. In cel mai rau caz trebuia sa reincarc Basic-ul.
Apoi am invatat sa deplasez litere si figuri geometrice pe ecran. Am reusit sa simulez cantecul “O vioara mica” care suna jalnic, dar eu reuseam sa imi dau seama ce cantec se aude acolo (lucru care pentru mine era cel mai important). Iar povestea a culminat cu momentul in care am reusit sa fac o litera sa se deplaseze pe ecran de la stanga la dreapta (pe post de masina) si o alta litera controlata cu doua taste, reprezentand pietonul care traversa strada si care castiga de fiecare data cand reusea sa traverseze strada si murea cand era lovit de “Masina”. Tot ce va povestesc eu aici a fost un proces care a durat 3-4 ani. Pentru ca intre timp intrasem in posesia unui HC91 cu FloppyDisc de 5,25 si puteam sa salvez pe discheta ce lucram, nu doar pe hartie. 😀
Iar partea cea mai funny a fost ca abia in liceu am aflat ca ceea ce faceam eu se numeste programare.
2. De ce acum 25 de ani era mai usor sa inveti programare?
Cele mai evidente motive pentru care acum 25 de ani era mai usor sa inveti programare sunt: lipsa de optiuni la limbajele de programare pe care puteai sa incepi sa le inveti (care ne ajuta sa ne pastram focusul), lipsa de framework-uri (care desi ne fac viata de programator mai usoara, ne fac procesul de invatare mai anevoios), cantitatea redusa de materiale de invatare (care ne ajuta sa nu pierdem timp cautand o alta resursa mai buna), numarul redus al distragerilor (care ne ajuta sa ne pastram concentrarea pentru mai mult timp) si promisiuni vs asteptari realiste. In subpunctele urmatoare le voi trata pe toate pe rand.
A. Limbajul perfect
Acum 25 de ani nu pierdeam timp cautand sa invatam limbajul “perfect” pentru ca aveam putine optiuni. In cazul meu a fost doar o singura varianta Basic, dar la acel moment pe calculatoarele mai evoluate mai puteai opta intre C si Pascal. Iar tendinta nu era sa stii din fiecare limbaj “cate putin” (a se citi nimic util) ci stateai cu acel limbaj pana cand fie renuntai (si probabil ca au renuntat multi) fie il invarteai pe toate partile pana o scoteai la capat (mie imi place sa cred ca intr-un final am ajuns in aceasta categorie, pentru ca si eu am renuntat de foarte multe ori, dar am revenit de fiecare data cu multa curiozitate si speranta).
Un alt avantaj al numarului redus de limbaje de programare pe care le poti studia este faptul ca in loc sa pierzi timp invatand sintaxa pentru mai multe limbaje de programare “pierdeai” timpul intelegand mai in profunzime acel limbaj. As risca sa zic, ca reuseai sa intelegi mai bine programarea ca si concept care depinde destul de putin de limbajul de programare cu care lucrezi. (Acum sa nu credeti ca eram un mic geniu si ca atunci constientizam tot ce va spun aici si acum. Acestea sunt gandurile mele de acum privind retrospectiv. Cum va spuneam mai devreme eu nici nu stiam ca ceea ce fac eu este programare, era un fel de a ma juca. La fel cum, cativa ani mai tarziu, m-am jucat cu electronica.)
In zilele noastre, avand in vedere ca sunt trainer, primesc cateva zeci de mail-uri pe luna de la persoane care vor sa invete programare. Si cea mai frecventa intrebare este referitoare la ce limbaj de programare sa invete. Si mai rar plangeri de genul ca stiu si limbajul ala, si pe celalalt si pe mai nu stiu care si totusi nu isi gasesc job. Iar la final vine intrebarea suprema: “Ce limbaj ar mai trebui sa invat ca sa imi gasesc job?” Si bineinteles ca raspunsul intra in categoria: Nu conteaza cate meserii stii sa faci ci cat de bine stii sa faci o anume meserie. Asa este si in programare, la inceput trebuie sa iti canalizezi eforturile spre a intelege bine un limbaj de programare.
B. Framework-ul perfect
Acest subiect vine in continuarea punctului de mai sus. Si as zice ca este specific noilor limbaje in trend care vin si cu multe variante de framework-uri. Si cand, in sfarsit, te-ai hotarat ce limbaj sa inveti ai de ales si ce framework sa inveti: “Sa fie Angular sau React, desi vad ca VueJs vine tare din spate”, “Eu am invatat Flask desi vad ca cel mai mult se cauta Django”.
Daca ai ajuns in punctul asta fara sa ajungi sa stapanesti bine un limbaj de programare deja ai facut o greseala: sa inveti in acelasi timp un limbaj de programare cu un framework. Pentru ca si limbajul de programare are un set de restrictii si specificitati si framework-ul are restrictiile si specificitatile lui. Si in loc sa le inveti separat si sa le poti diferentia, in capul tau se va face un mare amalgam si nu vei fi capabil sa faci diferenta dintre framework si limbaj iar asta te va lega de limbajul si framework-ul invatate.
Acum 25 de ani toate acestea nu existau pentru ca programarea era la inceput si nu devenise atat de specializata. Iar asta iti aducea un grad destul de mare de familiaritate si de flexibilitate.
C. Cursul perfect
“Salut fratele meu! M-am hotarat sa devin programator de Java. Zi-mi si mie care este cel mai bun curs gratis de Java in limba romana.” (Acest mail, retusat putin, l-am primit recent si n-am stiut ce sa ii raspund. Asa ca, daca aveti recomandari, va ascult.)
Cartile au un mare avantaj, acela de a-ti oferi un continut structurat pentru invatare (cum ar fi zis bunica-mea: se asigura ca nu pui caruta inaintea boilor), azi ii zicem learning path. Acest lucru te ajuta ca intai sa pui “fundatia” programarii si mai apoi “acoperisul” ei. Concret, tu nu poti intelege parametrii daca ai lacune la variabile sau nici macar nu stii ce sunt alea.
Pe internet (in special pe YouTube) sunt multe informatii dar nestructurate. Acest lucru nu il deranjeaza pe un programator cu experienta pentru ca el stie exact in ce “sertar” al mintii sa puna acea informatie, dar pentru un incepator poate fi coplesitor. Nu mai zic de cazul in care informatiile sunt in contradictoriu in diferite surse.
Un alt dezavantaj al tutorialelor video este faptul ca un cursant care incepe sa parcurga un astfel de tutorial executa “ca maimuta” pas cu pas ce vede fara sa treaca prin filtrul ratiunii si fara a incerca sa inteleaga de ce cel ce a scris acel cod a ales acea varianta de implementare. Iar asta se numeste analfabetism functional Iar programarea si analfabetismul functional nu pot exista simultan intre aceleasi doua urechi. Atunci cand scrii din carte sunt sanse mai mari sa scrii ceva gresit si va trebui sa intelegi ce e gresit ( bineinteles ca aceste greseli, daca nu reusesti sa le gasesti la timp, pot deveni frustrante si asta nu mai este un avantaj).
Daca la acele tutoriale mai aveti si codul gata scris si doar il copiati si il rulati ca sa vedeti ca merge. Sa stiti ca in 99% din cazuri cei care au facut tutorialul au testat codul. Dar tu, cel ce vrea sa devina programator, nu a gandit si nu a scris nici o linie de cod, iar programarea se invata gandind si scriind cod (in ordinea asta).
D. Distragerile
De cate ori nu v-ati asezat in fata calculatorului ca sa mai exersati la programare sau sa faceti orice alt ceva si apoi, 2-3 ore mai tarziu, ati realizat ca ati verificat tot feed-ul de la facebook, ati ajuns la zis cu filmuletele de pe YouTube de pe canalele de pe care sunteti abonati, dar la programare daca abia ati reusit sa lucrati 10-20 de minute. Si mie mi se mai intampla.
Acum 25 de ani internet nu aveam, telefon mobil nu aveam, televizor aveam dar nu pot sa spun ca ma atragea prea tare. Drept urmare ce puteam sa fac? Sa joc fotbal, sa ma bat cu fratele meu sau sa surubaresc la calculator. Deci distragerile erau foarte putine la numar comparativ cu astazi. Desi, datorita consolei Terminator 2 am luat o lunga perioada de pauza de la programare. Pauza care si-a facut simtit efectul. In acea pauza multe detalii despre programare dar si despre lucrurile pe care stiam sa le fac si care uitasem cum se fac.
Tot legat de distrageri mai este o problema la programare. Majoritatea conceptelor din programare au un nivel de complexitate mediu spre ridicat, asta solicita intelectului nostru un nivel de concentrare destul de ridicat. Iar un nivel de concetrare suficient de ridicat nu il poti obtine in cateva minute. De accea, programarea si intreruperile (date de notificarile de WhatsApp sau Instagram care vin din 5 in 5 minute) nu se inteleg. Ci, mai degraba devine o pierdere de timp si iti creaza concluzia: “Programarea asta nu este de mine, e prea complicata!” Cand, de fapt, problema este ca tu nu ii acorzi suficienta atentie ca sa o intelegi. De aceea, recomandarea mea este ca atunci cand inveti programare sa nu ai telefonul langa tine. Iar pe laptop sa ai deschis doar resursele de invatare care nu ar trebui sa fie mai multe de 2-3.
E. Graba si Marketingul mincinos
“Curs complet de Python in 8 ore”, ”De la non-programator la Fullstack Developer in 12 ore” si lista poate continua (doar dati un search pe google)
Cu totii vrem rezultate imediate, iar oamenii de marketing stiu asta si ne livreaza reclame fix cum ne dorim. Realitatea este ca programarea nu se grabeste. Si din experienta mea de trainer de peste 5 ani, pentru a avea o imagine de ansamblu corecta si, cat de cat completa despre programare, o persoana are nevoie de 500-700 de ore de studiu si practica fara distrageri, pentru a putea ajunge pe o pozitie de programator junior.
Cu siguranta in zilele noastre sunt si multe motive pentru care este mai usor sa inveti programare (motive despre care vom vorbi intr-un alt articol). Totusi nu trebuie sa neglijam nici motivele pentru care, celor care incep sa invete programare astazi, le este mai greu.
De asemenea, probabil mai sunt astfel de motive pentru care, acum 25 de ani era mai usor sa inveti programare. Voi ce motive ati gasit? Astazi, care este principa bariera care va opreste sa invatati programare?