Din Octombrie anul trecut m-am reapucat de programat. Doar că am avut și încă am mult de recuperat înainte să fac ceva util cu programatul. Nu m-am mai atins de nimic legat de cod de când am terminat liceul, unde am învățat Pascal, C++ și VisualBasic plus niște teorie aferentă, pentru că SQL pentru la muncă nu se pune. Programul de curs a fost și încă e simplu: învăț și practic în fiecare zi, timp de cinci zile — uneori mai mult pentru că am și zece ore de olandeză pe săptămână.
Ca o paranteză, m-am apucat de JavaScript. E un limbaj popular care beneficiază de o grămadă de resurse online, am foști colegi și mentori care mă ajută, limbajul se schimbă mereu și pot să construiesc proiecte destul de ușor. Dar nu fac doar JavaScript, pentru că nu îmi place ideea de a învăța superficial limbajul și niște framework-uri, așa că am reluat și concepte de informatică pe care alții le-ar aprofunda la facultate și plănuiesc să învăț și să practic măcar un alt limbaj de programare de altă natură — poate Swift (deși Olanda pare că iubește PHP și Java).
De trei luni încoace am păstrat un fel de mini jurnal despre ce am învățat, ce mă inspiră, cum învăț mai bine, plus alte lucruri ca să-mi fac viața mai ușoară pe parcurs. În același timp vreau să-l ajut și pe fratele meu care învață și el JavaScript la facultate, dar cu alt scop (artă și design).
Ce am scris până acum din ce am învățat singură și/sau din sfaturile pe care mi le-au oferit alții:
A învăța un limbaj de programare e ca și cum ai învăța o limbă străină
Proiectul e supus acelorași eșecuri ale memoriei. E util de știut sintagma use it or lose it. Dacă înveți o limbă nouă și nu o practici în mod regulat, o să începi să uiți cuvinte, gramatică și cum să formezi fraze. Știu cum e cu pianul, franceza și chiar româna (scriu aici ca să nu uit). O simt cu olandeza și cu JavaScript pe care abia le-am început.
Atâta timp cât nu am o memorie musculară și cuvintele nu curg foarte ușor, trebuie să practic continuu. Încerc să practic câte ceva în fiecare zi, oricât de urât, atâta timp cât funcționează. O să devină mai bun pe parcurs.
Nu e neobișnuit să citești, cercetezi și să experimentezi ore sau zile la rând până când înțelegi cum funcționează ceva
Evident că poți să bibilești la o problemă cât vrei tu sau te ține proiectul și/sau pușculița cu economii, dar nu e foarte fezabil. Pentru mine a fost o schimbare de mentalitate drastică de la product management într-un startup cu un ritm de muncă ultra-rapid. Ca product manager, sarcina ta e să conduci și înveți din experimente mici și variate, așteptarea e să urnești proiectele către linia de sosire. E de așteptat ca progresul tău să fie vizibil în interiorul companiei: documente, idei, pași următori, comunicat statusuri, etc. și să trebuiască să întreții multe relații profesionale doar ca să-ți menții statutul și legitimitatea. Pe scurt, ești un pic politician, strateg, și manager de proiect.
Așa că ideea de a sta ore sau zile la rând doar ca să product câteva zeci sau sute de linii de cod cere mentalitatea opusă față de cea pe care am avut-o în ultimii ani. Dar e o idee cu care trebuie să mă obișnuiesc, pentru că de multe ori tot ce am la dispoziție e un site cu documentație care poate nu mă lămurește foarte tare sau nu se aplică situației mele, plus codul deja existent, internetul și colegii (cu puțin noroc).
E util să te expui la cod scris de oameni care se pricep
Continuând analogia cu limbajul și cărțile, dacă vrei să dezvolți un vocabular bogat atunci o să vrei să citești multe cărți considerate bune, sau măcar reprezentative pentru ceva anume (o tehnică, un curent, etc.). La fel și cu limbajele de programare: ajută mult să știi cum arată o soluție elegantă, performantă, șamd. E foarte greu să găseși sau să discerni exemple ca începător dacă nu ai colegi sau profesori care să îți arate soluții întregi, dar chiar și fără asta te poți uita la bucăți de cod sau proiecte întregi (și cunoscute) de pe GitHub. Nu înțelegeam mereu ce se întâmplă, dar pe parcurs am început să-mi dau seama și să fac conexiuni cu ce învățam.
O altă chestie utilă pentru mine a fost CodeWars, o platformă unde trebuie să rezolvi probleme oferite pentru diverse limbaje de programare înainte să primeși acces la soluțiile altora. Mi s-a întâmplat de multe ori să vin cu o soluție naivă de începător, doar ca apoi să văd cum au rezolvat alții mai pricepuți și să învăț un tipar mai bun pentru ce făceam.
E o idee bună să consulți și niște cărți
În ultimii zece anii s-a împământenit ideea că poți să înveți aproape orice de pe YouTube. Cum să pornești motorul? YouTube. Cum să cânți la muzicuță? YouTube. Da, poate te-ai descurca până la un moment dat exclusiv din filmulețe de pe YouTube și articole. Sunt destule lucruri bune chiar dacă sunt gratis. Și sigur că există o grămadă de cursuri video online, pentru că nu te costă foarte mult să te apuci de predat. Dar există și o grămadă de greșeli și bălării pe care nu le poți recunoaște decât dacă ești experimentat sau te ghidează cineva experimentat – mai ales în scris.
Am găsit lucruri care au fost corecte odată dar nu mai sunt pentru că limbajul a evoluat dar autorii nu au actualizat conținutul. Am găsit și multe lucruri care n-au fost niciodată corecte, de exemplu create de oameni care scriau câte o postare pe Medium imediat cum învățau un concept, în ideea de a explica în scris ca să înțeleagă și ei mai bine. E un sâmbure de adevăr în ideea că dacă nu poți să explici altcuiva un concept, înseamnă că nu l-ai înțeles foarte bine. Dar dacă nu verifică nimeni ce scrii, sau încerci să explici fără să-l fi folosit vreodată în practică, există riscul să-i încurci mai mult pe alții în momentul în care devine public.
Cel puțin în perioada de început am căutat cărți publicate de surse (oarecum) de renume, de ex. O’Reilly, nu orice PDF self published, chiar dacă există lucruri bune și acolo dacă știi ce și unde să cauți. Cunoștințele din cărți o să învechească și ele, dar cel puțin atât cât sunt actuale sunt mai detaliate, bine organizate și beneficiază de corectură înainte de tipar. N-am învățat direct din ele, dar le-am ținut alături pentur referință, ca pe un dicționar, ca să aprofundez idei noi. Au fost enorm de utile pentru concepte de informatică și chichițe ale limbajului pe care nu le-am găsit în cursuri, pentru că altfel nu s-ar termina niciodată.
Legat de asta, mi-a plăcut și articolul Trade Money for Time de pe Letters to a New Developer.
Mai vedem peste trei luni.
Comentarii
2 răspunsuri la „Ce am învățat despre programat în primele trei luni”
Seria You DOn’t Know JS a lui Kyle SImpson este disponibila si gratuit pe GitHub (commituita de autor),
Kyle Simpson are si niste cursuri ok pe Front End Masters
https://github.com/getify/You-Dont-Know-JS
Am citit recent o carte SF, Cartea interviurilor SF de Lucian Vasil Szabo si mi s-a parut chiar interesanta, recomand.