de Richard Reis
Cum să gândești ca un programator – lecții în rezolvarea problemelor

Dacă sunteți interesat de programare, este posibil să fi văzut acest citat înainte:
„Toată lumea din această țară ar trebui să învețe să programeze un computer, pentru că te învață să gândești.” – Steve Jobs
Probabil v-ați întrebat și ce înseamnă, exact, să gândiți ca un programator? Și Cum o faci ??
In esenta, totul este vorba un mod mai eficient de rezolvare a problemelor.
În această postare, scopul meu este să te învăț așa.
Până la sfârșitul acestuia, veți ști exact ce pași trebuie să faceți pentru a fi un rezolvator de probleme mai bun.
De ce este important acest lucru?
Rezolvarea problemelor este meta-abilitatea.
Cu toții avem probleme. Mare si mic. Modul în care ne ocupăm de ei este uneori, bine … destul de întâmplător.
Cu excepția cazului în care aveți un sistem, acesta este probabil modul în care „rezolvați” problemele (ceea ce am făcut când am început să codez):
- Încercați o soluție.
- Dacă acest lucru nu funcționează, încercați altul.
- Dacă acest lucru nu funcționează, repetați pasul 2 până când veți avea noroc.
Uite, uneori ai noroc. Dar acesta este cel mai rău mod de a rezolva problemele! Și este o pierdere de timp imensă.
Cel mai bun mod implică a) a avea un cadru și b) practicând-o.
„Aproape toți angajatorii acordă prioritate abilităților de rezolvare a problemelor.
Abilitățile de rezolvare a problemelor sunt aproape în unanimitate cea mai importantă calificare pe care o caută angajatorii …. mai mult decât competența limbajelor de programare, depanarea și proiectarea sistemului.
Demonstrarea gândirii computaționale sau a capacității de a descompune probleme mari și complexe este la fel de valoroasă (dacă nu chiar mai mult) decât abilitățile tehnice de bază necesare pentru un loc de muncă. ” – Rang de hackeri (Raportul de competențe pentru dezvoltatori 2018)
Aveți un cadru
Pentru a găsi cadrul potrivit, am urmat sfaturile din cartea lui Tim Ferriss despre învățare, „Bucătarul de 4 ore”.
M-a determinat să intervievez două persoane cu adevărat impresionante: C. Jordan Ball (clasat pe locul 1 sau pe locul 2 din peste 65.000 de utilizatori pe Coderbyte), și V. Anton Spraul (autorul cărții „Gândiți-vă ca un programator: o introducere în rezolvarea creativă a problemelor”).
Le-am pus aceleași întrebări și ghici ce? Răspunsurile lor au fost destul de similare!
În curând, și tu îi vei cunoaște.
Sidenote: asta nu înseamnă că au făcut totul la fel. Fiecare e diferit. Vei fi diferit. Dar dacă începeți cu principii, suntem cu toții de acord că sunt buni, veți merge mult mai departe mult mai repede.
„Cea mai mare greșeală pe care o văd noii programatori este că se concentrează pe învățarea sintaxei în loc să învețe cum să rezolve problemele.” – V. Anton Spraul
Deci, ce ar trebui să faci atunci când întâlnești o nouă problemă?
Iată pașii:
1. Înțelegeți
Știți exact ce vi se cere. Majoritatea problemelor dificile sunt grele, deoarece nu le înțelegeți (de aceea acesta este primul pas).
Cum să știi când înțelegi o problemă? Când îl puteți explica în engleză simplă.
Vă amintiți că ați fost blocați pe o problemă, începeți să o explicați și vedeți instantaneu găuri în logica pe care nu ați văzut-o înainte?
Majoritatea programatorilor cunosc acest sentiment.
Acesta este motivul pentru care ar trebui să vă notați problema, să dați o diagramă sau să spuneți altcuiva despre asta (sau ceva … unii oameni folosesc un rață de cauciuc).
„Dacă nu puteți explica ceva în termeni simpli, nu îl înțelegeți.” – Richard Feynman
2. Planificați
Nu vă scufundați corect în rezolvarea fără un plan (și cumva sperați că vă puteți confunda calea). Planificați-vă soluția!
Nimic nu vă poate ajuta dacă nu puteți scrie pașii exacți.
În programare, acest lucru înseamnă că nu începeți să piratați imediat. Dă-i creierului tău timp să analizeze problema și să proceseze informațiile.
Pentru a obține un plan bun, răspundeți la această întrebare:
„Având în vedere intrarea X, care sunt pașii necesari pentru a returna ieșirea Y?”
Sidenote: Programatorii au un instrument excelent care să-i ajute cu asta … Comentarii!
3. Împărțiți
Fiți atenți. Acesta este cel mai important pas dintre toate.
Nu încercați să rezolvați o mare problemă. O să plângi.
În schimb, împărțiți-l în subprobleme. Aceste subprobleme sunt mult mai ușor de rezolvat.
Apoi, rezolvați fiecare subproblemă una câte una. Începeți cu cel mai simplu. Cel mai simplu înseamnă că știți răspunsul (sau sunteți mai aproape de acel răspuns).
După aceea, cel mai simplu înseamnă că această sub-problemă rezolvată nu depinde de rezolvarea altora.
Odată ce ați rezolvat fiecare sub-problemă, conectați punctele.
Conectarea tuturor „Sub-soluții” vă va oferi soluția la problema inițială. Felicitări!
Această tehnică este piatra de temelie a rezolvării problemelor. Amintiți-vă (citiți din nou acest pas, dacă este necesar).
„Dacă aș putea învăța fiecare programator începător o abilitate de rezolvare a problemelor, ar fi„ reducerea tehnicii problemei ”.
De exemplu, să presupunem că sunteți un programator nou și vi se cere să scrieți un program care să citească zece numere și să afle care este numărul al treilea cel mai mare. Pentru un programator nou-nouț, aceasta poate fi o sarcină dificilă, chiar dacă necesită doar sintaxă de programare de bază.
Dacă sunteți blocat, ar trebui să reduceți problema la ceva mai simplu. În loc de al treilea cel mai mare număr, ce zici de găsirea celui mai mare total? Încă prea dur? Dar despre găsirea celui mai mare dintre doar trei numere? Sau cea mai mare dintre două?
Reduceți problema până la punctul în care știți cum să o rezolvați și scrieți soluția. Apoi extindeți ușor problema și rescrieți soluția pentru a se potrivi și continuați până vă întoarceți de unde ați început. ” – V. Anton Spraul
4. Blocat?
Până acum, probabil că stați acolo gândindu-vă „Hei Richard … E minunat și totul, dar dacă sunt blocat și nici măcar nu pot rezolva o problemă secundară ??”
În primul rând, respirați adânc. În al doilea rând, este corect.
Nu-ți face griji, prietene. Acest lucru se întâmplă tuturor!
Diferența este că cei mai buni programatori / rezolvatori de probleme sunt mai curioși de erori / erori decât iritați.
De fapt, iată trei lucruri de încercat atunci când vă confruntați cu o whammy:
- Depanare: parcurgeți pas cu pas soluția dvs. încercând să găsiți unde ați greșit. Programatorii o numesc așa depanare (de fapt, asta este tot ceea ce face un depanator).
„Arta depanării constă în a afla ce ai spus cu adevărat programului tău să facă, mai degrabă decât ceea ce ai crezut că i-ai spus să facă.” ”- Andrew Singer
- Reevaluează: Fa un pas inapoi. Priviți problema dintr-o altă perspectivă. Există ceva care poate fi abstractizat într-o abordare mai generală?
„Uneori ne pierdem atât de mult în detaliile unei probleme încât trecem cu vederea principiile generale care ar rezolva problema la un nivel mai general. […]
Exemplul clasic al acestui lucru, desigur, este însumarea unei lungi liste de numere întregi consecutive, 1 + 2 + 3 + … + n, pe care un foarte tânăr Gauss l-a recunoscut rapid a fost pur și simplu n (n + 1) / 2, evitând astfel efortul de a fi nevoit să adauge. ” – C. Jordan Ball
Sidenote: Un alt mod de reevaluare începe din nou. Ștergeți totul și începeți din nou cu ochii proaspeți. Sunt serios. Veți fi uimit cât de eficient este acest lucru.
- Cercetare: Ahh, bun Google. Ai citit bine. Indiferent ce problemă ai, probabil că cineva a rezolvat-o. Găsiți acea persoană / soluție. De fapt, faceți acest lucru chiar dacă ați rezolvat problema! (Puteți învăța multe din soluțiile altora).
Avertisment: nu căutați o soluție la marea problemă. Căutați doar soluții la subprobleme. De ce? Pentru că dacă nu te lupți (chiar și puțin), nu vei învăța nimic. Dacă nu înveți nimic, ți-ai pierdut timpul.
Practică
Nu vă așteptați să fiți grozavi după doar o săptămână. Dacă doriți să fiți un bun rezolvator de probleme, rezolvați o mulțime de probleme!
Practică. Practică. Practică. Va fi doar o chestiune de timp înainte de a recunoaște că „această problemă ar putea fi rezolvată cu ușurință cu
Cum să exersezi? Există opțiuni în wazoo!
Puzzle-uri de șah, probleme de matematică, Sudoku, Go, Monopoly, jocuri video, cryptokitties, bla… bla… bla….
De fapt, un model comun în rândul persoanelor de succes este obiceiul lor de a practica „micro rezolvarea problemelor”. De exemplu, Peter Thiel joacă șah, iar Elon Musk joacă jocuri video.
„Byron Reeves a spus„ Dacă doriți să vedeți cum poate arăta conducerea de afaceri în trei până la cinci ani, uitați-vă la ce se întâmplă în jocurile online ”.
Avansăm până astăzi. Elon [Musk], Reid [Hoffman], Mark Zuckerberg și mulți alții spun că jocurile au fost fundamentale pentru succesul lor în construirea companiilor lor. ” – Mary Meeker (Raport tendințe internet 2017)
Asta înseamnă că ar trebui să joci doar jocuri video? Deloc.
Dar despre ce sunt jocurile video? Așa este, rezolvarea problemelor!
Deci, ceea ce ar trebui să faceți este să găsiți o ieșire pentru a practica. Ceva care vă permite să rezolvați multe micro-probleme (în mod ideal, ceva ce vă place).
De exemplu, îmi place provocările de codare. În fiecare zi, încerc să rezolv cel puțin o provocare (de obicei pe Coderbyte).
Așa cum am spus, toate problemele au modele similare.
Concluzie
Asta-i tot oameni buni!
Acum, știi mai bine ce înseamnă să „gândești ca un programator”.
Știi, de asemenea, că rezolvarea problemelor este o abilitate incredibilă de cultivat (meta-abilitatea).
De parcă nu ar fi suficient, observați cum știți și voi ce să faceți pentru a vă exersa abilitățile de rezolvare a problemelor!
Phew … Destul de cool nu?
În cele din urmă, îți doresc să întâlnești multe probleme.
Ai citit bine. Cel puțin acum știi cum să le rezolvi! (de asemenea, veți afla că, cu fiecare soluție, vă îmbunătățiți).
„Chiar când crezi că ai navigat cu succes într-un obstacol, apare un altul. Dar asta este ceea ce menține viața interesantă.[…]
Viața este un proces de rupere a acestor impedimente – o serie de linii fortificate pe care trebuie să le traversăm.
De fiecare dată, veți învăța ceva.
De fiecare dată, veți dezvolta forță, înțelepciune și perspectivă.
De fiecare dată, un pic mai mult din competiție cade. Până când nu rămâne decât tu: cea mai bună versiune a ta. ” – Ryan Holiday (Obstacolul este calea)
Acum, du-te să rezolvi câteva probleme!
Și noroc?
Multumiri speciale la C. Jordan Ball și V. Anton Spraul. Toate sfaturile bune de aici au venit de la ei.
Mulțumesc pentru lectură! Dacă ți-a plăcut, testează de câte ori poți lovi în 5 secunde. Este un cardio excelent pentru degete ȘI îi va ajuta pe ceilalți să vadă povestea.