De ce este util să inventezi roțile.

De ce este util să inventezi roțile.

Recent, am avut un interviu cu un dezvoltator JavaScript care a candidat pentru un post de senior. Un coleg, de asemenea prezent la interviu, l-a întrebat pe candidat să scrie o funcție care să facă o solicitare HTTP și, în cazul unui eșec, să încerce din nou de mai multe ori.

El a scris codul direct pe tablă, așa că era suficient să deseneze ceva aproximativ. Dacă ar fi arătat doar că înțelege bine esența problemei, am fi fost destul de mulțumiți. Dar, din păcate, nu a reușit să găsească o soluție potrivită. Atunci, atribuind acest lucru emoțiilor, am decis să-i ușurăm un pic sarcina și l-am rugat să transforme funcția cu callback-uri într-o funcție bazată pe promisiuni.

Dar, din păcate. Da, era evident că un astfel de cod îi fusese familiar înainte. El știa în linii mari cum funcționează totul. Ne-ar fi ajuns o schiță a soluției care să demonstreze înțelegerea conceptului. Totuși, codul pe care candidatul îl scria pe tablă era complet lipsit de sens. Avea o părere extrem de confuză despre ce sunt promisiunile în JavaScript și nu putea să explice cu adevărat de ce sunt necesare. Pentru un junior ar fi fost încă acceptabil, dar pentru un post de senior nu se califica. Cum ar fi reușit acest dezvoltator să rezolve bug-uri într-un lanț complex de promisiuni și să explice altora ce anume a făcut?

Dezvoltatorii consideră codul final ca fiind de la sine înțeles.

În procesul de dezvoltare, ne confruntăm constant cu materiale reproducibile. Transferăm fragmente de cod pentru a nu fi nevoiți să le scriem din nou de fiecare dată. Astfel, concentrându-ne toată atenția asupra părților cheie, privim codul final cu care lucrăm ca fiind ceva evident – presupunem pur și simplu că totul va funcționa corect.

Și de obicei, chiar că funcționează, dar atunci când apar dificultăți, înțelegerea mecanicii sale se dovedește extrem de valoroasă.

Astfel, candidatul nostru pentru postul de dezvoltator senior considera obiectele promise ca fiind evidente. Probabil că își imagina ce trebuie să facă cu ele când apare în codul altora, dar principiul general nu-l înțelegea și nu a fost capabil să-l repete în interviu. Poate că a învățat un fragment pe de rost – nu e deloc dificil:

return new Promise((resolve, reject) => {
  functionWithCallback((err, result) => {
   return err ? reject(err) : resolve(result);
  });
});

Și eu am făcut la fel – probabil că toți am făcut-o măcar o dată. Pur și simplu memoram un fragment de cod pentru a-l folosi mai târziu în muncă, având o idee generală despre cum funcționează totul. Dar dacă dezvoltatorul ar înțelege cu adevărat conceptul, nu ar trebui să memoreze nimic – ar ști pur și simplu cum se face și ar reproduce fără efort tot ce este necesar în cod.

Consultați sursele

În 2012, când dominarea cadrelor frontale nu se stabilise încă, lumea era condusă de jQuery, iar eu citeam cartea Secrets of the JavaScript Ninja, scrisă de John Resig, creatorul jQuery.

Cartea îi învață pe cititori cum să-și creeze propriul jQuery de la zero și oferă o oportunitate unică de a înțelege gândirea care a dus la crearea bibliotecii. În ultimii ani, jQuery a pierdut mult din popularitatea sa, dar totuși recomand cu căldură cartea. Ceea ce m-a impresionat cel mai mult a fost sentimentul persistent că aș fi putut ajunge la toate acestea și singur. Pașii descriși de autor păreau atât de logici, atât de clari, încât am început să cred cu seriozitate că aș fi putut crea jQuery fără dificultate, dacă m-aș fi apucat de treabă.

Desigur, în realitate nu aș fi reușit nimic de genul ăsta – aș fi considerat că este prea greu. Soluțiile proprii mi s-ar fi părut prea simple și naive pentru a funcționa, iar eu m-aș fi dat bătut. Aș fi considerat jQuery ca fiind ceva evident, a cărei funcționare corectă trebuie pur și simplu să credem în orb. Ulterior, cu greu aș fi mai pierdut timp încercând să înțeleg mecanica acestei biblioteci, folosindu-mă de ea ca de o cutie neagră.

Însă, întâlnirea cu această carte m-a schimbat. Am început să mă uit mai atent la codul sursă și am descoperit că implementarea multor soluții este, de fapt, foarte transparentă, chiar evidentă. Nu, desigur, să ajung la un asemenea lucru este deja un alt capitol. Dar studiul codului altora și reproducerea soluțiilor deja existente ne ajută să gândim ceva propriu.

Inspirația pe care o vei culege și modelele pe care începi să le observi te vor schimba ca dezvoltator. Vei descoperi că acea bibliotecă minunată pe care o folosești constant și la care te-ai obișnuit să te gândești ca la un artefact magic nu funcționează pe baza magiei, ci doar rezolvă problema într-un mod concis și ingenios.

Uneori, va trebui să te zbateri cu codul, analizându-l pas cu pas, dar exact așa, avansând în pași mici și succesivi, vei reuși să reproduci drumul autorului către soluție. Acest lucru îți va permite să te aprofundezi în procesul de scriere a codului și îți va oferi mai multă încredere în căutarea propriilor soluții.

Când am început să lucrez cu promisiuni, mi s-a părut că este o pură magie. Apoi am aflat că în spatele lor se află aceleași apeluri inverse, iar lumea mea de programare s-a schimbat complet. Deci, modelul, al cărui scop este să ne scape de apelurile inverse, se realizează prin apeluri inverse?!

Asta m-a ajutat să privesc lucrurile din alte perspective și să realizez că nu am în față niște bucăți ciudate de cod, a căror complexitate extremă nu o voi înțelege niciodată. Acestea sunt doar modele, pe care poți să le înțelegi fără probleme cu un pic de curiozitate și aprofundare. Exact așa învață oamenii să programeze și cresc ca dezvoltatori.

Reinventeați acest roată

Așa că nu ezita să reinventezi roțile: scrie-ți propriul cod pentru a lega datele, creează o promisiune făcută manual sau construiește de la zero o soluție pentru gestionarea stărilor.
Nu contează că nimeni nu va folosi aceste lucruri – ci tu știi acum cum să faci asta. Și dacă vei avea ocazia să folosești ulterior aceste realizări în propriile proiecte, atunci va fi cu adevărat grozav. Vei putea să le dezvolți și să înveți și mai multe.

Scopul aici nu este să trimiți codul tău în producție, ci să înveți ceva nou. A scrie implementarea unei soluții deja existente este o modalitate excelentă de a învăța de la cei mai buni programatori și de a-ți perfecționa abilitățile.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster