Cum imi pot dezvolta capacitatea de a rezolva probleme?

Salutare, vreau sa va intreb: Voi cum v-ati dezvoltat aceasta capacitate de a rezolva probleme, de a rezolva rapid? Sunt incepator, inca la facultate (an 3 la FMI - an terminal) iar capacitatea mea de a rezolva probleme este inca destul de slaba, rezolv lent sau chiar nu-mi pot da seama de solutie, ma uit la alti colegi si rezolva destul de rapid fata de mine, de exemplu la cursul de baze de date la interogarile SQL, unor colegi le ia sa rezolve un set de exercitii undeva la vreo 30min, iar eu ma chinui si 1h-1h 30m pentru aceleasi exercitii, fie pe unele nu le pot rezolva, si ma simt prost in privinta performantei mele. Cum imi pot dezvolta logica, imi puteti recomanda un framework despre cum as putea gandi solutii? Multumesc anticipat.

Din punctul meu de vedere sunt 2 aspecte:

  • Tine de experienta/exercitiu. Cu cat rezolvi mai multe problem cu atat sansele ca cea pe care incerci sa o rezolvi acum este cel putin asemanatoare cu una anterioara si atunci iti va fi usor

  • Tine de modul in care functioneaza creierul uman, astfel incat asa cum pentru unii este foarte usor sa picteze/creeze muzica etc pentru unii problemle abstracte din programare/matematica sunt mai usoare

1 Like

Rezolvand probleme.

Nu neg ca poate exista si o dotare naturala.

3 Likes

Dacă e vorba de creativitate, nu sunt foarte sigur că vei rezolva vreodată problema asta, e o chestie înnăscută. Probabil în timp vei putea compensa într-o oarecare măsură prin experienţă.

Eu nu mi-aş bate capul prea mult cu asta, nu peste tot e nevoie de creativitate în munca de development software. Devii expert pe o nişă şi nu vei avea goluri pe care să le completezi cu imaginaţia.

Dacă te ajută cu ceva, nici eu nu mă consider vreun mare “solver” de probleme, probabil mulţi dintre cei de pe acest forum pot găsi soluţii la probleme logice mult mai rapid decât mine şi probabil sunt mulţi mult mai buni programatori decât mine. Şi ce-i cu asta, e loc pentru toată lumea, nu toţi trebuie să lucreze la NASA, unii trebuie să scrie şi banalele programe economice :slight_smile:

3 Likes

Repet ce s-a zis mai sus: rezolvand probleme.

Nu e nicio rusine ca la inceput sa te uiti direct la rezolvare. Important e sa intelegi ce se intampla acolo si sa ramai cu ceva.

Apoi incerci iar si iar pana cand incepi sa recunosti niste patternuri. Apoi o sa ti se para din ce in ce mai usor.

S-ar putea ca unii sa aibe skillul asta mai dezvoltat “din nastere”. Dar asta nu inseamna ca tu nu vei putea ajunge la un nivel bun.

Practica si perseverenta conteaza. Niciun om nu se naste invatat.

2 Likes

Again, rezolva probleme.

Ca sa ai o intelegere mai buna, incearca sa nu te gandesti la fiecare problema independent, ci facand parte dintr-o ierarhie de probleme.
Astfel o sa identifici primitivele (daca schimbi problema cu una asemanatoare si observi ca unele lucruri te ajuta la ambele, ai identificat primitivele).

Exemplu:

  1. rezolva o problema cu map si reduce, analizeaza primitivele separat (map si reduce), dupa un timp o sa vezi cate probleme poti rezolva doar cu aceste doua primitive.
  2. invata structurile de date dictionar si heap, incearca sa rezolvi probleme de algoritmi folosind doar aceste doua primitive, surprinzator sunt multe (inseamna ca primitivele sunt puternice)

Asta e si abordarea din cursul SICP

2 Likes
  • Rezolvi mai multe probleme. Si asemanatoare, dar si diferite. Incepi sa recunosti pattern-uri. Cand eram in clasa a 8 a am rezovat toata vara probleme dintr-o culegere de Gheba si am observat ca exercitiile de la clasa seamana intre ele si se rezova cam in acelasi mod.
  • Nu te compara cu altii. Fiecare are propiul mod de abordare.

Poti sa lucrezi si cu ceilalti colegi. Se zice ca mai multe perechi de ochi vin cu idei bune :slight_smile:


image

4 Likes

Mulți care ajung la facultate nu s-au apucat de programare în facultate.

Dacă în liceu în MS Access sau FoxPro ti-a predat baze de date un profesor bun o să știi 80% din materia de facultate. Pentru un astfel de om e o joacă.

Acum să nici nu mai vorbim de cei care erau olimpici sau la info intensiv și chiar au avut profesori buni, proiecte personale, clienți reali și toate cele. Foarte mulți sunt foarte buni și la matematică, fizică.

Dacă ceva e frustrant înseamnă că înveți, singura strategie bună ca să înveți mai rapid e să înveți în grup sau să îți iei un mentor. Eventual poți lucra pe proiecte reale.

1 Like

Oare cum as putea sa imi dezvolt masa musculara si sa imi intaresc articulatiile, sistemul respirator, etc. E FIX ACEEASI INTREBARE! Raspunsul este in ambele cazuri sa faci ceva de genul asta:

Multe exercitii, multa experienta, munca multa.

1 Like

Cauta sa intelegi bine si logic conceptele de baza. Descompune problemele in subprobleme mai usor de rezolvat iar in final combina rezultatele.
Se vorbeste mult de exercitiu; da, e util cand ai inteles conceptele de baza din domeniul ala, altfel o sa incerci sa aplici in mod gresit modele de rezolvare vazute la alte probleme.

4 Likes

Eu nu m-as stresa cu a rezolva probleme abstracte. Adevaratele probleme sunt cele de natura asta:

“Avem nevoie de un sistem de gestiune care sa ne proceseze comenzile automat. Dar sa nu le proceseze automat, sa le proceseze manual, pentru ca o parte din angajatii nostri care lucreaza cu ele sunt speriati daca valorile dintr-o comanda sunt schimbate automat”

Sau

“Am nevoie de un program care imi actualizeaza codul comenzii daca a fost achizitionat de la furnizor”. Clientul nu zice ca vrea doar comnezile active, imi dau eu seama de asta. Programul detecteaza o comanda activa cu un cod lipsa, vrea sa-l actualizeze. Clientul: Nu, comanda aia e anulata. Ma uit in baza de date, comanda nu e anulata. Clientul: Oh well, in mintea mea era anulata. Clientul tot nu o anuleaza.

Sau

“Vreau o aplicatie noua ca cea veche nu functioneaza corect”. La lista cerintelor: “Sa mearga la fel ca vechea aplicatie ca noi ne-am obisnuit sa lucram cu tot felul de workarounds din aplicatia gresita”.

4 Likes

Rezolvarea problemelor abstracte este un skill util, pentru că altfel va trebui să cunoști fiecare dedesupt al aplicației folosite, nefiind capabil să spargi lucrurile în „black boxes”. În loc să ai „modulul ăsta care îmi calculează taxele pe țară” ai „modulul ăsta care calculează 2% TVA-ul românesc, 8% ăla franțuzesc șamd”.

Chiar și în exemplele tale sunt noțiuni care, fără o gândire abstractă, nu au sens.

Pentru @Peter: Din păcate nu este o formulă magică, alta decât elbow grease. Se aplică (și aici) treaba aia în care cu cât faci mai mult o activitate cu atât vei fi mai bun la acea activitate. Cel mai important cred însă că este: nu faci acea activitate mecanic sau dogmatic.

3 Likes

Ah, de ce nu ma intalnesc si eu cu ‘probleme adevarate’? :slight_smile:

Poate ai clienti care au habar pe ce lume traiesc. Poate i-ai cautat. Eu nu pot risca nici o zi fara sa fiu platit acum (copil, sotie “somera”, mama, matusa, soacra toti batrani si bolnavi).

Numai saptamana asta s-au dus 4000 de lei. Centrala noua + o tura de cumparaturi (700 de lei).

E misto cand poti sta fara venit 3 - 6 luni de zile, dar cu familie si cu rude in varsta nu mai poti. Si batranii nu au avut nici un plan de pensionare. Cat primesc de la Stat. Si ce cazuri am bat inspre 800 de lei pe luna. Bine ca au avut cancer si primesc inca niste bani pentru a plati o persoana sa ii ingrijeasca.

1 Like

Nu, am clienti care nu lucreaza cu de-astea.

Surpriza, exista pe lume si altceva decat comenzi si facturi.

Daca e pe partea de probleme legate de algoritmi, incearca sa practici probleme de pe LeetCode. Poti cauta solutii pe YouTube, sau chiar pe platforma, dar nu face din asta o obisnuinta. Nu conteaza cat stai la o problema, conteaza sa inveti ceva din ea. Nu e relevant timpul in care tu gasesti o solutie, ci calitatea solutiei. Cat despre baze de date, probabil nu stii suficient de bine SQL, insa nu ar trebui sa fie prea greu.
Mai antreneaza-te, si nu mai face comparatii cu nimeni, pentru ca nu sunt productive.

3 Likes

Pare ca repet ce au spus ceilalti: multa practica

In plus, foloseste plusul pe care ti-l da facultatea si anume sa intelegi lucrurile si din punct de vedere teoretic

Cand rezolvi problemele cauta si ce e in spate: cum functioneaza si de ce.

Nu multa lume intelege sql, iar daca vorbim despre Oracle sau ce o preda Gabriela Mihai lucrurile sunt si mai dificile. Poate colegii tai au experienta cu sql. Take your time. Stiu o gramada de programatori care au probleme cu sql sau au avut la inceput

Apropo de leetcode, din cand in cand mai fac probleme de pe-acolo, cand imi aduc aminte de ei.
Ma cam plictisesc de moarte problemele alea, desi le inteleg utilitatea.

Just for fun, cand exista o solutie ‘clasica’ mai bag si cate o solutie ne-ortodoxa doar pentru amuzament, sa vad daca e acceptata.

De exemplu exista o problema care cere sa gasesti daca exista o bucla intr-o lista simplu inlantuita… metoda ‘standard’ e sa folosesti un algoritm hare & tortoise, asta a fost solutia mea:

class Solution {
public:
    bool hasCycle(ListNode *head) {
        if (!head) return false;
        
        while(head)
        {
            if (head->val > 10000000)
                return true;
            head->val = 10000001;
            head = head->next;
        }
        
        return false;
    }
};

In enunt nu se spune ca nu ai voie sa ‘distrugi’ datele, plus ca exista puse limite pe valoare in specificatie, asa ca…

:rofl:

2 Likes

Poate voiai un raspuns direct, dar zic ca e mai bine sa te uiti la TedX Talk-ul asta. L-am vazut acum cativa ani si m-a ajutat sa inteleg ce sunt de fapt “problem solving skills” si cum temerile personale le saboteaza adesea.