A te bloca face parte din a fi programator, indiferent de nivel. Așa-numita problemă „ușoară” este de fapt destul de grea. Nu sunteți sigur cum să mergeți înainte. Ceea ce ai crezut că va funcționa nu merge.

Cealaltă parte a programatorului este să te descurci.

M-am blocat foarte mult recent, așa că am găsit modalități de a obține desfăcut a fost mereu prezent în mintea mea. Iată câteva tactici pe care le-am folosit. Poate că te pot ajuta și pe tine.

Faceți problema concretă

Creați o diagramă, faceți o schiță rapidă sau utilizați obiecte reale pentru a vă oferi un aspect vizual. Va face problema să fie mult mai ușor de gândit.

O problemă cu care m-am confruntat mi-a cerut să găsesc diferența absolută între sumele diagonalelor unei matrice pătrate. E o gură și multe de păstrat în capul meu. Așa că am extras-o: am creat o matrice pătrată de numere și am încercuit diagonalele.

Cum sa va dezlantuiti cand atingeti un perete de programare

O schiță simplă a făcut literalmente pașii să sară asupra mea: însumează o diagonală (care este 15), apoi cealaltă (care este 17) și apoi găsește diferența absolută dintre ei (care este 2).

Această abordare se aplică și altor probleme. Când învățam despre bucle, am repetat o grămadă de migdale. Când lucrez la o problemă recursivă, voi face o diagramă pentru a vedea ce se întâmplă în teancul de apeluri până când îmi ating cazul de bază.

Comunitatea este aceasta: concretizați abstractul.

Scrieți exact ce încercați să faceți

Scrieți pasul specific la care lucrați atunci când simțiți că vi se apropie ciclul prea familiar.

Cele cinci sau zece secunde necesare pentru a nota câteva cuvinte pe o bucată de hârtie vă vor ajuta să vă solidificați procesul de gândire și să vă redirecționați atenția.

Aici sunt cateva exemple:

  • Stocați numele cursurilor ca chei în obiect
  • Treceți argumentul la funcția de apel invers
  • Resetați variabila „maxValue” la 0

Resetarea variabilei „maxValue”, de exemplu, nu a rezolvat problema. Dar a fost un pas important în acest proces. Scrierea acestei scurte fraze m-a readus pe drumul cel bun: a fost o reamintire a ceea ce îmi propusesem să fac. De asemenea, m-a asigurat că mă concentrez pe un singur lucru, nu pe multe.

Așadar, data viitoare când te vei simți încercând aceeași abordare din nou și din nou și obținând același rezultat, oprește-te și întreabă-te: „Ce anume încerc să fac aici?”

Apoi, scrie – da, scrie – răspunsul tău pe o bucată de hârtie.

Nu este suficient să te gândești la răspunsul tău. Dacă „gândesc” întâmplător în sinea mea, voi grăbi procesul și nu se câștigă mult (dacă e ceva). Trebuie să-l notez.

Simplificați datele introduse

Este mult mai puțin intimidant să lucrezi cu câteva lucruri decât multe. De aceea, este util să vă simplificați datele introduse.

O problemă mi-a dat o listă cu trei dicționare. A fost numai trei dicționare, dar asta era încă două prea multe.

names = [
    {'first':'John', 'last':'Smith', 'email':'johns@example.com'},
    {'first':'Mary', 'last':'McDonald', 'email':'marym@example.com'},
    {'first':'Sam', 'last':'Davey', 'email':'samd@example.com'}
]

Sarcina mea a fost să sortez fiecare dicționar după nume, apoi după prenume (de exemplu, Davey, Sam: samd@example.com). In orice caz, problema era mai ușor de gândit când am făcut lista celor trei dicționare o listă a unuia.

name = [
    {'first':'John', 'last':'Smith', 'email':'johns@example.com'}
]

Am rezolvat problema folosind un singur dicționar. Apoi, am aplicat aceeași logică problemei mai mari la îndemână.

Când simplificați datele furnizate, faceți problema mult mai ușor de gestionat.

Rezolvați o problemă mai mică

Găsiți modele mai ușor și înțelegeți ce sunteți într-adevăr cerut să faceți atunci când rezolvați o versiune mai mică a problemei.

Iată un exemplu de problemă din cartea lui Reuven Lerner, Antrenament Python:

„Utilizați o listă de înțelegere pentru a inversa ordinea cuvintelor rândurilor dintr-un fișier text. Adică, dacă prima linie este abc def și a doua linie este ghi jkl, atunci ar trebui să returnați lista [‘def abc’, ‘jkl ghi’]. ”

Când rezolv o versiune mai mică a unei probleme, mi se pare util să îndepărtez straturile de complexitate și să folosesc structura mea ideală de date. În acest exemplu, asta a însemnat ignorarea fișierului text și a înțelegerii listei (straturi de complexitate) și utilizarea unei liste (structura mea de date ideală).

Apoi am rezolvat problema. Mi-am deschis editorul și am tastat structura mea ideală de date.

letters = ['abc def', 'ghi jkl']

Am inversat comanda și am obținut rezultatul scontat folosind o buclă for.

reversed_letters = []
for letter in letters:
   letter_list = letter.split(" ")
   letter_list.reverse()
   reversed_letters.append(" ".join(letter_list))

Odată ce am lucrat, am adăugat straturile de complexitate înapoi pe rând până când am rezolvat problema, așa cum a cerut declarația de problemă.

Rezolvarea unei versiuni mai mici a problemei vă ajută să ajungeți în centrul a ceea ce trebuie să faceți. Este, de asemenea, un alt mod de a simplifica complexul.

Ia o pauză

Creierul tău nu încetează să mai gândească doar pentru că degetele nu mai tastează.

Ți-a apărut vreodată o idee în cap în timp ce făceai altceva decât programarea? Te-ai întors vreodată la o problemă după un antrenament și soluția te privește în față? Mi s-a întâmplat.

Nu întâmplător ați ajuns la ideea sau soluția dvs. când făceați altceva – când nu lucrați în mod deliberat. „Epifaniile pot părea să iasă de nicăieri”, explică American științific, „Dar sunt adesea produsul activității mentale inconștiente în timpul perioadelor de nefuncționare”.

Dacă simți că alergi cu un zid de cărămidă, ai putea fi foarte bine. Ar putea fi cel mai bine să faci o pauză. Oferă-ți minții ceva timp pentru a digera la ce lucrezi și pentru a reveni la problema reînnoită.

Asociați-vă cu un alt programator

Lucrul cu altcineva poate fi o modalitate excelentă de a genera idei și de a vedea o problemă dintr-o altă perspectivă. Dar îți recomand cu tărie să faci tot ce îți stă în putință pentru a te dezlega mai întâi.

Vor exista întotdeauna blocaje. Învățarea modului de depanare a propriilor probleme este o abilitate esențială de învățat. Este ușor să spui „Nu înțeleg. Lasă-mă să-l întreb pe acest inginer superior. ” Apoi, cereți inginerului principal să vă rezolve problema. Este mai greu să-ți dai seama singur, dar trebuie cel puțin să încerci.

Dacă ați pus sincer piciorul în față, contactați un programator cu o întrebare specifică. Acest lucru arată respect pentru timpul celuilalt programator și vă va face sesiunea de împerechere mai eficientă.

Apoi, cereți un indiciu – nu aveți programatorul să vă rezolve problema. Veți întâlni fără îndoială o situație similară pe drum, așa că folosiți sesiunea de împerechere ca o oportunitate de învățare. Te va ajuta pe termen lung.

Înfășurându-se

A fi blocat este frustrant, pentru a fi sigur. S-ar putea să încercați doar una dintre tacticile de mai sus și să aveți un moment de „bec”, sau poate fi necesar să încercați o combinație și să vă regăsiți pur și simplu în timpul procesului.

Dar sunt două lucruri pe care le-am învățat din îmbrățișarea luptei: învăț multe și descoperirea vine. Continua.

Scriu despre învățarea programării și despre cele mai bune modalități de a face acest lucru (amymhaddad.com).