Jump to content
MrGrj

[Tutorial]Cum invat sa programez ?

Interactive poll  

53 members have voted

  1. 1. Pentru cei care programati, de ce v-ati apucat de programare ? De ce ati continuat ?

    • M-am apucat de placere. Am continuat din acelasi motiv
      30
    • Pentru bani. Apoi a devenit ceva placut ( nu mi-a mai pasat de bani )
      5
    • Am fost nevoit. Inca sunt.
      1
    • Am avut o idee de business pe care am dus-o la capat. I'm rich now.
      2
    • Am vrut sa devin hacker, dar mi-am dat seama ca programarea nu inseamna doar asta
      4
    • M-am apucat pentru ca am vazut ca imi dezvolta modul de a gandi si ma ajuta in viata de zi cu zi
      5
    • Am vrut sa devin faimos. Inca nu sunt.
      2
    • Nu stiu / Nu raspund. @aka m-am apucat ca asa mi-a venit
      4


Recommended Posts

  • Active Members
Posted (edited)

Bun, vad tot mai des aceasta intrebare pe forumuri (nu doar RST). Mai nou, primesc mesaje de genul:

 

- Cum ai invatat sa programezi ?

- Cat a durat ?

 

M-am gandit sa raspund tuturor, si cu aceasta ocazie poate iese un tutorial din care fiecare va avea cate ceva de invatat. (PS: astea sunt intrebarile gresite puse de oricine sperand ca daca li se da un raspuns de genul: "am invatat singur si mi-a luat 3 luni" , atunci automat si ei vor putea face acelasi lucru. Acestia din urma nu iau in calcul urmatoarele:

  • poate cel pe care l-au intrebat a avut un background solid
  • poate ca el si-a dat intr-adevar interesul si a vrut sa devina cineva / sa faca ceva
  • poate ca ceea ce a invatat el nu se va potrivi cu ceea ce vrei tu sa inveti

 

In primul rand, pentru a incepe o cariera in programare, fie ea web sau software, tre' sa va placa. Tre' sa va doriti sa vreti sa realizati singuri ceva, iar la sfarsit, dupa multe ore nedormite sa ziceti: "Ba, da ! Uite ce-am facut. Singur". Fara pasiune, putina dorinta si entuziasm veti ajunge niste wannabes (refference) care vor aspira intotdeauna la ceea ce fac altii, ei nestiind sa faca practic..nimic. (Been there, done that)

 

In ciuda faptului ca majoritatea se apuca de programare pentru: bani, a fi hackeri sau a da cu DDoS in cel mai bun tovaras pe Skype, exista si pusti pasionati, care vor sa invete pentru ca le place. Pentru ca vor sa creeze, sa se perfectioneze si sa-si atinga un scop: scopul de a deveni la un moment dat printre cei mai buni.

 

Pe scurt, unul dintre pasii catre o viata de programator este dorinta / pasiunea. Nu devii Guido van Rossum (refference) pierzand timp, cersind VNC-uri / root-uri / scan-uri pe toate forumurile. 

 

In al doilea rand, pe langa incredere, pasiune si dorinta, ai nevoie de putin creier. Si aici imi voi permite sa impart programatorii in trei categorii:

 

  • cei care se nasc cu darul de a programa 
  • cei care invata sa programeze (si reusesc sa o faca intr-un mod foarte ok)
  • cei care cred ca au invatat sa programeze, se mint, si stagneaza pe intreg parcursul carierei

 

Voi incerca sa fiu scurt si la obiect, pentru ca nu imi sta in fire sa tin prelegeri de mii de randuri.

 

O mica schema:

schema_giordan.jpg

 

Inainte de a te apuca sa programezi, exista niste reguli de bun simt la care trebuie sa te gandesti si pe care trebuie sa le iei in calcul:

 

  1. Cat timp nu stii sa vorbesti si sa scrii corect in limba romana, nu poti invata o alta limba. 
  2. Cam tot ce tine de programare e legat in mod direct de limba engleza. Ca este documentatie sau ca este limbajul in sine, NU poti face nimic daca nu stii engleza la un nivel acceptabil.

 

Acum ca am trecut de aceste doua etape, imi permit sa mai fac o mica observatie, din propria experienta:

 

Programarea nu se invata din carti ! 

 

Majoritatea programatorilor pe care ii cunosc au invatat programare cu diverse resurse online (articole / tutoriale scurte, nu intinse pe sute de pagini din care nu inveti nimic), si cel mai important au invatat prin a dezvolta un proiect real (fie el cat de mic). Programarea e ca futaiul - poti sa te uiti la o carte cu 13 pozitii o zi intreaga. Daca n-ai o gagica pe care sa experimentezi, te uiti degeaba. Asa si cu cartile. Poti sa citesti 13 carti de C, daca nu pui in aplicare ceea ce citesti, degeaba. ( asta apropo de densitatea cartilor - recomand articole scurte, la obiect decat carti cu 2000 pagini ).

 

Remember: NU poti depasi nivelul de incepator daca ramai la carti / tutoriale.

 

Acum sa nu credeti ca: "Ia uite, s-a trezit si asta sa vina aici sa scuipe 3 cuvinte si sa-si spuna parerea de cacat". Pe mine unul, ma doare la stromeleag daca intelegeti ceva din ce scriu sa nu. Important e ca voi sa deschideti ochii si sa incepeti sa realizati ca daca vreti sa faceti ceva in viata, va trebuie un minim de efort. 

 

Cat dureaza ?

 

Eu m-am apucat serios de 5 ani si inca am senzatia ca stiu extrem de putine. De la caz la caz, si tinand cont de tipul de programator la care te incadrezi, poate dura de la 1 an la o viata intreaga. Pana si Guido van Rossum a spus ceva de genul: "Chiar daca eu am inventat acest limbaj de programare, pe o scara de la 1 la 10, mi-as da nota 9. Pentru ca sunt constienti ca sunt altii care il stiu deja mai bine ca mine". Deci, nu timpul e problema. Conteaza sa vrei, apoi vei vedea ca timpul e irelevant.

 

Let's dig in a bit:

 

Reguli de aur:

  • un program trebuie sa fie scris in asa fel încat sa poata fi citit de catre oricine.
  • fa bucatile in asa fel incat sa intelegi usor ce face fiecare fara a trebui sa stii cum se face. ( Domnul Djikstra - in olandeza se citeste aproximativ Daicstra, recomanda o tactica veche de pe vremea lui Cezar: divide et impera ( adica: imparte si stapaneste). Asa e bine sa scrieti programele - in bucati cat mai independente unele de altele care interactioneaza intre ele in moduri cat se poate de clare si simple.
  • un editor inteligent reduce handicapul unort fisiere mari, pentru ca va permite sa va mutati cautand automat aparitiile functiilor si variabilelor.
  • invata sa faci debug (din pacate, cunosc multi programatori de duzina care intreaba: Ce-i aia ?). E cazul sa cautati si sa vedeti de ce e bine sa stiti asta. Hai, putina mobilizare :)

 

Si ele pot continua (portabilitatea codului, comentariile, fiabilitatea, etc.), insa de baza astea sunt.

 

Sa luam ca exemplu un kiddo care vrea sa invete un limbaj de programare:

 

  • 1. Stiu limba romana ? O stiu
  • 2. Stiu si engleza ? Nu prea, dar am de gand sa schimb asta - mentalitatea dorita
  • 3. Ce limbaj vreau sa invat ? Pai, hai sa vedem ce as vrea sa fac.
  • 4. Am ajuns la concluzia ca vreau sa invat Python. Now what?
  • 5. Citesc si ma interesez daca Python e pe placul meu. Face ce-mi doresc ? Face. Ma ajuta sa ajung acolo unde vreau ? Da. Exista documentatie cacalau in caz ca ma incurc ? Exista.
  • 6. Ma apuc de treaba. Cu probleme simple. Imi bat capul, incerc sa-mi dau seama. Nu reusesc. Fac debug. Intreb lumea. 
  • 7. Am invatat "the basics". Trec la lucruri mai complicate. Fac un mini-proiect. Fac scannerul ala de il ceream din saptamana in saptamana pe RST si luam ban de la nenorocitul de @hades Nu mai dau bani pe el, e doar al meu, ba chiar pot sa il vand. Si asa toata lumea e impacata: tu ramai cu cunostintele si scannerul, noi ne bucuram ca nu mai esti cretin si tot asa. E ca un lant trofic. Si crede-ma ca daca ajungi la nivelul la care vei putea face un scanner, nu-l vei face. Vei vrea sa faci chestii mult mai complexe.

 

 

Voi inchide topic-ul asta cu un citat pe care il dau de multe ori exemplu: "As soon as we started programming, we found to our surprise that it wasn't as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs."

 

Voi mai adauga idei pe masura ce voi avea mai mult timp. 

 

 

 

Edited by MrGrj
  • Upvote 25
Posted

Mai este o categorie de programatori: Cei carora le plac puzzle-urile/challenge-urile.

Mie nu imi place programarea in sensul de a crea ceva, ma plictisesc.Programarea clasica, cea de industrie, in general e plictisitoare pentru ca:

  • toata lumea trage de tine sa termini cat mai repede si de cele mai multe ori nu ai timp sa gandesti intr-un mod foarte optim. Faci ceva care merge si esti multumit de chestia respectiva;
  • nimeni nu e niciodata multumit de ceea ce produci. Intotdeauna se va gasi cineva care sa comenteze ca nu ii place nu stiu ce chestie sau ca clientul schimba specificatiile de pe o zi pe alta;
  • mereu lucrezi cu cod facut de altii, iar de multe ori iti vine sa le faci si partea lor de munca, doar pentru a sti sigur ca respectivul lucru merge.

Daca mi se da un puzzle sau sa optimizez ceva, pierd nopti intregi incercand sa rezolv respectivul lucru, dar daca mi se da sa realizez nu stiu ce chestie ma ia un somn pe care nici macar 1 litru de cafea nu il alunga. :)

  • Upvote 1
  • Active Members
Posted
2 minutes ago, tjt said:

Mai este o categorie de programatori: Cei carora le plac puzzle-urile/challenge-urile.

Mie nu imi place programarea in sensul de a crea ceva, ma plictisesc.Programarea clasica, cea de industrie, in general e plictisitoare pentru ca:

  • toata lumea trage de tine sa termini cat mai repede si de cele mai multe ori nu ai timp sa gandesti intr-un mod foarte optim. Faci ceva care merge si esti multumit de chestia respectiva;
  • nimeni nu e niciodata multumit de ceea ce produci. Intotdeauna se va gasi cineva care sa comenteze ca nu ii place nu stiu ce chestie sau ca clientul schimba specificatiile de pe o zi pe alta;
  • mereu lucrezi cu cod facut de altii, iar de multe ori iti vine sa le faci si partea lor de munca, doar pentru a sti sigur ca respectivul lucru merge.

Daca mi se da un puzzle sau sa optimizez ceva, pierd nopti intregi incercand sa rezolv respectivul lucru, dar daca mi se da sa realizez nu stiu ce chestie ma ia un somn pe care nici macar 1 litru de cafea nu il alunga. :)

@tjt iti recomand cu caldura http://codegolf.stackexchange.com/

 

(eu pe asta imi mai fac de cap)

 

Happy code golf challanges. In caz ca vrei o lista mai lunga, uite aici

Posted
12 minutes ago, tjt said:

Mai este o categorie de programatori: Cei carora le plac puzzle-urile/challenge-urile.

Mie nu imi place programarea in sensul de a crea ceva, ma plictisesc.Programarea clasica, cea de industrie, in general e plictisitoare pentru ca:

  • toata lumea trage de tine sa termini cat mai repede si de cele mai multe ori nu ai timp sa gandesti intr-un mod foarte optim. Faci ceva care merge si esti multumit de chestia respectiva;
  • nimeni nu e niciodata multumit de ceea ce produci. Intotdeauna se va gasi cineva care sa comenteze ca nu ii place nu stiu ce chestie sau ca clientul schimba specificatiile de pe o zi pe alta;
  • mereu lucrezi cu cod facut de altii, iar de multe ori iti vine sa le faci si partea lor de munca, doar pentru a sti sigur ca respectivul lucru merge.

Daca mi se da un puzzle sau sa optimizez ceva, pierd nopti intregi incercand sa rezolv respectivul lucru, dar daca mi se da sa realizez nu stiu ce chestie ma ia un somn pe care nici macar 1 litru de cafea nu il alunga. :)

 

Eu de 3 ani incoace am lucrat doar pe proiecte din 0 sau pe lucruri facute solid, se poate sa lucrezi ca freelancer si sa fii selectiv, trebuie doar sa ai "reputatia" necesara

Posted
30 minutes ago, Robert1995 said:

 

Eu de 3 ani incoace am lucrat doar pe proiecte din 0 sau pe lucruri facute solid, se poate sa lucrezi ca freelancer si sa fii selectiv, trebuie doar sa ai "reputatia" necesara

Pentru partea de web development, chiar si mobile development e ok sa fii freelancer, dar nu poti sa compari un proiect de freelance cu un proiect facut intr-o companie in care sunt peste 50 de programatori pe respectivul proiect.

  • Upvote 1

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...