de Amy M Haddad

Cum să fii un mare programator

Ce îi deosebește pe marii programatori?

Cum sa fii un mare programator
Fotografie de David Rangel pe Unsplash

După cum știm cu toții, programatorii extraordinari construiesc caracteristici uimitoare, site-uri web, aplicații și altele asemenea. Dar ce au în comun?

În cercetarea mea, nu este vorba doar de cunoașterea cu adevărat a unei limbi sau de a avea un anumit background educațional. Programatorii cu adevărat talentați au însușit elementele fundamentale. Această bază le permite să construiască lucruri grozave și să vină cu idei avansate.

Gândește-te la o piramidă. Are o bază mare, dar treptat devine mai mică și mai subțire spre vârf. Învățarea fundamentelor formelor de programare care stau la baza. Totul decolează de acolo.

Deci, care sunt acele elemente fundamentale? Pe baza experienței mele și a programatorilor ale căror medii le-am cercetat, văd fundamentele de programare ca o abordare în două părți.

Rezolvarea problemelor extraordinară

În primul rând, trebuie să fii un rezolvator de probleme eficient. Acesta este un loc important pentru a începe de la programare este rezolvarea problemelor.

Deși există multe modalități de a rezolva o problemă, există câteva părți ale procesului care mi se disting. Programatorii care sunt, de asemenea, mari rezolvatori de probleme distilează o problemă la esența ei, pentru a-și identifica scopul general și a începe o problemă cu scopul. Apoi, împart fiecare problemă în părți mici, ușor de gestionat – atacând fiecare parte la rând, și uneori în termeni vizuali, desenând o imagine pentru a o face „lume reală”.

Procesul este mai greu decât pare. Când am început să programez, m-am lovit de un perete: ca mulți alții, nu am învățat niciodată cum să rezolv problemele în școală; este o abilitate care nu este predată cu ușurință. Mi s-a dat o problemă stabilită la ora de matematică și tocmai am intrat, ceea ce am făcut când am început să programez. În mod surprinzător, îmi învârteam roțile inutil și loveam obstacolele la cea mai simplă dintre probleme.

Lucrurile au început să se schimbe când am început să învăț despre procesul de rezolvare a problemelor și cum să rezolv problemele în mod eficient. Acum încep o problemă cu intenție. Am cartea lui George Polya, Cum să o rezolvi, pentru a mulțumi pentru acel sfat.

Am adaptat câteva dintre ideile lui Polya la programare, cum ar fi înțelegerea problemei. „Problema trebuie înțeleasă”, scrie Polya. Aceasta include posibilitatea de a „puncta principalele părți ale problemei, necunoscutul, datele și starea”. Pentru fiecare problemă, scot o foaie de hârtie și scriu răspunsuri la aceste întrebări: pentru ce rezolv sau încerc să găsesc? (necunoscut); ce mi se dă? (date); și ce constrângeri sau detalii trebuie să știu? (condiție).

Înțelegerea problemei poate părea evidentă, dar evident este ușor de trecut cu vederea. În mai multe ocazii, am turnat ore într-o problemă doar pentru a-mi da seama mult mai târziu că am ratat un detaliu mic, dar critic în enunțul problemei. Scrierea detaliilor problemei mă încetinește mental și mă ajută să mă gândesc exact la ceea ce trebuie să fac, care este jumătate din luptă.

De acolo, fac un plan, care este o altă sugestie a Poliei. Are sens. Scriu o schiță înainte de a scrie un articol. Un artist face o schiță a picturii înainte de a lucra la pictura în sine. Un constructor folosește desene și planuri pentru a construi o casă. Nu este diferit cu programarea. În loc să se grăbească în face, Trebuie să încep prin gândire despre ceea ce îmi propun să fac și să fac un plan de atac.

Există multe modalități de a face acest lucru. Uneori descriu pașii pe care trebuie să-i fac în ordine numerică: mai întâi faceți acest lucru, apoi faceți asta. Alteori fac problema vizuală. Când învățam despre bucle, am scos o mână de migdale și am iterat fizic prin grămadă. Este un exemplu prostesc, dar m-a ajutat să mă gândesc la problemă.

Voi desena și poze sau diagrame. Pentru o problemă recursivă, voi desena o diagramă a ceea ce se întâmplă la fiecare apel recursiv până când voi atinge cazul de bază. Cu toate acestea, aproape întotdeauna găsesc o modalitate de a simplifica problema pentru a o face mai ușor de gestionat și pentru a mă ajuta să văd un model. Mai presus de toate, scopul pentru mine este să introduc o problemă cu scopul și să mențin acest sens al scopului pe tot parcursul.

În ciuda planurilor cele mai bine făcute, problemele sunt încă grele și totuși rămân blocat. A deveni un mare rezolvator de probleme necesită timp; este o abilitate la care încă lucrez și cu siguranță merită efortul. Este o diferență pe care o puteți vedea.

Când citesc cod scris de un excelent rezolvator de probleme, este curat și ușor de înțeles. Variabilele sunt bine denumite. Funcțiile sunt scurte și clare. Fiecare linie de cod are un scop specific; puful se îndepărtează. Claritatea codului reflectă procesul de gândire al programatorului: pot citi programul de sus în jos și știu exact ce se întâmplă. Aceasta este rezolvarea excelentă a problemelor și pentru asta mă străduiesc.

Dar computerul dvs.?

Învățarea informaticii este a doua programare fundamentală. De curând am început să învăț informatică și o iubesc pentru că depășesc nivelul suprafeței. Mă duc „în culise” pentru a afla ce se întâmplă atunci când folosesc o funcție încorporată, de exemplu. De asemenea, învăț despre memorie și timpul de rulare, printre multe alte subiecte. Pe scurt, învăț De ce un computer face lucrurile pe care le face.

Cunoașterea „de ce” îmi îmbunătățește cunoștințele contextuale și mă face un programator mai informat. Drept urmare, sunt mai atent la codul pe care îl scriu. Acum, că știu puțin despre timpul de execuție, de exemplu, voi opta pentru utilizarea unei căutări binare în loc să iterez prin fiecare element dintr-o listă.

De asemenea, îmi îmbogățește înțelegerea modului în care funcționează conceptele de programare de bază. De exemplu, lucram la o problemă recursivă și nu primeam soluția pe care o anticipasem. După o examinare atentă, am aflat de ce: a avut legătură cu executarea stivei de apeluri, idee care mi-ar fi scăpat cu doar câteva luni în urmă.

Sau ia cursuri. M-am luptat foarte mult cu cursurile pentru cea mai lungă perioadă de timp și am fost îngrozit să folosesc una. stiam Cum să scrie o clasă, dar nu era încrezător cand și De ce Aș folosi una. Asta s-a schimbat când am aflat ce se întâmplă de fapt în computerul meu când creez instanțe și apelez metode. În cele din urmă a făcut clic, odată ce am avut un anumit context. Atât pentru recursivitate, cât și pentru ore, știința informaticii a eliminat golurile din cunoștințele mele.

De prea multe ori, fundamentele sunt respinse. Progresul poate fi lent, iar oamenii tind să aleagă mai multe lucruri „distractive” la care să lucreze atunci când li se oferă opțiunea. Ce păcat. Programatorii care stăpânesc elementele fundamentale par să codifice cu încredere: știu „cum” și „de ce” alegerile lor de programare, ceea ce le îmbunătățește munca și le creează credibilitatea față de ceilalți.

În plus, o înțelegere solidă a elementelor fundamentale face ca învățarea de noi limbi și tehnologii să fie mai ușor de realizat. De exemplu, luarea timpului pentru a înțelege cu adevărat concepte de bază precum iterația, recursivitatea și abstractizarea cu un limbaj vă va ajuta atunci când învățați un altul. Pur și simplu, există multe de câștigat și puțin de pierdut prin stăpânirea fundamentelor.

Sunt scriitor (amymhaddad.com) și un programator pentru începători.