Cum să înveți programare (de la zero!) (V)

Cum să înveți programare (de la zero!) (V)

Cred că ne cam apropiem cu pași repezi spre sfârșitul acestui mini-serial. Am explicat despre motivație, despre focus, despre ce nu ai nevoie. Dar… până la urmă, cum începi?

Cum începi?

Ei bine, lucrurile sunt mai simple decât crezi. Pentru că programarea asta are fix două părți. Prima parte e cea mai dificilă și, din fericire, treci doar o singură dată: antrenarea creierului să gândească… analitic cred că-i cuvântul.

Prima parte: învățarea

Atunci când înveți un concept nou, ajută extrem de mult să poți face analogii la ceea ce cunoști deja. În Code Complete treaba asta a fost numită „explicarea pe bază de metafore”. O definiție seacă, într-o limbă de lemn, intră pe o ureche, iese pe alta. Dar o metaforă… ei bine, asta rămâne.

Doar că noțiunile de programare nu au analogii bune, ergo tot procesul poate părea mai greu. Dar ajută enorm dacă ești familiar cu matematica.

Prin urmare, cursul/tutorialul/cartea care te-ar învăța programare ar trebui să înceapă cu noțiuni foarte bine explicate și, mai important, să fie bine înțelese. Dacă îți imaginezi că poți „sări” peste o anumită noțiune (din varii motive) și să te descurci ulterior… ei bine, am o veste nu prea bună pentru tine.

Partea a doua: re-învățarea

Dacă de învățarea efectivă te lovești o singură dată, când înveți programare, prin re-învățare treci de fiecare dată când treci la un limbaj nou și presupune învățarea subtilităților respectivului limbaj, a tooling-ului șamd.

În punctul ăsta se presupune că deja știi cum să înveți. Știi să te documentezi. Știi la ce să (nu) acorzi atenție și tot așa, prin urmare nu voi intra în mai multe detalii.

Cu ce limbaj de programare încep?

Chiar dacă am zis că nu contează limbajul cu care începi, contează să începi cu un limbaj. Care ar putea fi ăla? Ai nevoie de un limbaj ce se poate instala ușor și care are o gramatică simplă (adică ceva ce se poate citi cât mai ușor în engleză).

Sigur, în teorie poți începe cu orice limbaj, indiferent că-i C, Java sau ASM, dar scopul este să poată fi citit cât mai ușor de cineva care vede pentru prima dată cod scris. Iar main() sau strict-typing s-ar putea să nu aibă sens la început.

Eu aș recomanda ori Python ori Ruby pentru început, datorită eleganței codului scris și lipsa „zgomotului de fond”: acolade, punct și virgulă etc. Dar, până la urmă, contează și limbajul din cursul urmat, nu?

Recomandări

Ca o încheiere a acestei serii voi face câteva recomandări care îți vor permite să înveți programare singur. Și sigur.

  • CODE – Nu neapărat o carte de căpătâi, dar se explică la un nivel foarte accesibil anumite noțiuni din funcționarea unui CPU.
  • Learn to Program: The Fundamentals – se folosește de Python pentru a te învăța de la zero noțiunile esențiale în orice limbaj: strings arrays, boolean, loops etc. În plus, platforma permite și o auto-testare, ceea ce este un plus.
  • This is CS50x – vine de la Harvard și, la fel ca cel de mai sus, te ia de la zero să te învețe chestii. Spre deosebire de cursul de mai sus însă, face fix ce am zis eu mai sus: nu se concentrează pe un limbaj anume (treci prin Python, C, JavaScript) ci se concentrează pe explicarea noțiunilor care chiar contează.

Concluzii

Așa cum am zis, am început această serie de articole după ce l-am scris pe primul și mi-am dat seama că mă lungesc. Moment în care am zis să îl împart în două. La al doilea s-a repetat și tot așa. Nu am avut un outline ci doar o direcție în care am vrut să merg.

Că a ieșit bine sau nu, doar tu, cititorule, îmi poți spune într-un comentariu.

Spor la învățat!

7 Comentarii

dam167 a scris

Mi se pare de apreciat efortul tău, dar după părerea mea nu, n-a ieșit bine. O să-mi exprim părerea din postura unuia fără școală în IT care s-a apucat acum o lună să învețe câte ceva despre programare (Python) și sunt destul de motivat pentru că mă interesează aplicații care să-mi facă niște calcule inginerești. Momentan nu vreau să mă angajez și nu sunt sigur cât de mult voi merge pentru finisarea aplicațiilor, primul pas vreau să fie funcționalitatea și dezvoltarea de algoritmi care să reducă input-ul utilizatorului – în limbajul meu de amator, să fie programul cât mai deștept. Ia ce scriu în continuare ca o părere personală, nu ca pe o ofensă.

Ai o abordare greșită. Am citit 5 postări și nu am învățat absolut nimic și mi se pare că toată seria e o eternă introducere care duce în direcția opusă învățării. Primele 3 postări mă tot avertizează că sunt lucruri pe care ar trebui să nu le fac, aproape că mă ceartă și îmi prevăd un viitor apropiat lipsit de motivație, parcă în loc să continui ce citesc ar trebui să mă duc să mă uit în oglindă și să mă întreb ce vreau să fac cu viața mea. Am parcurs și celelalte 2 postări și n-am nici o satisfacție că am învățat ceva, iar asta te dezarmează. E ca un curs universitar în care în primele 2 ore un profesor bătrân ține prelegeri care-i fac pe studenți să-și dea ochii peste cap. Gata, rant over.

Ce am făcut eu? am dat un search pe YT și am găsit un băiat care în 5 minute mi-a zis cum instalez Python și PyCharm (că cică am nevoie de un IDE) și mi-a zis că primul program pe care-l fac e ăla cu „Hello world!”. Poate pare un lucru mărunt, dar e un mare pas înainte pentru că ești deja într-un IDE și poți rula deja niște comenzi. Întregul clip avea circa 4 ore și trecea prin operații simple, șiruri și numere, inclusiv scrierea sau citirea dintr-un fișier.

Acum, sunt convins că dacă te-ai apuca să scrii din nou aceeași serie ar ieși mult mai bine. Dacă am ajuns pe un blog la „cum să înveți programare” înseamnă că am un PC, un sistem de operare și o oarecare dispobilitate. Nu mi-ai dat nici un exemplu de ce aș putea să fac cu programarea – de exemplu să-mi automatizez un proces, să-mi fac un backup automat etc., ceva care să mă facă să vreau mai mult.

Indiferent cum îți sună ce zic aici, apreciez că ți-ai alocat timp pentru a posta seria asta și că e fără bulshit-ul cursurilor pe bani mulți care da, n-o să te facă programator pur și simplu.

Ionuț Staicu a scris

@dam167: Salut, bine ai venit pe blog! Și mulțumesc pentru critică.

Ce faci tu, cu ajutorul băiatului de pe YT, este să înveți python, nu neapărat programare. Vei înțelege cum să faci anumite operațiuni, dar nu vei înțelege de ce-urile din spatele acelor operațiuni (decât dacă îți aloci timp suplimentar și pentru aia; majoritatea nu o fac).

De ce zic asta? Că ai început cu un IDE pentru că ți s-a spus așa. Când ești la început nu ai nevoie de un IDE, ai nevoie de un editor de text (autocomplete și navigarea prin cod va îngreuna înțelegerea execuției).

Mulțumesc încă o dată pentru critică. O să revin asupra articolelor în viitor și voi aduce adăugiri dacă voi considera că e cazul.

dam167 a scris

Am văzut pledoaria unui tip pentru a nu folosi un IDE la început și i s-a spus în comentarii că e ca și cum ți se spunea la școală să calculezi cu creionul că nu tot timpul vei avea un calculator. Dacă aveam 18 ani mi se pare normal să încep cum spui tu, dar tipul ăla care-mi spune ceva concret mă ajută să-mi rezolv problemele, iar apoi să aprofundez unde e cazul. Abia după ce am folosit un IDE am înțeles ce face și ce aș putea folosi în locul lui (fie un alt IDE fie un editor de text).

Ca să fac o analogie cu fotografia, că acolo pricep mai multe, e ca și cum am cumpărat un DSLR, îl scot din cutie și încep să studiez optica și schema de bază a unui SLR. Or nu, primul lucru e să-l pornesc, să fac 2-3 poze pe modul auto și apoi să încep să văd ce fac toate reglajele alea pe care le are. Ce îmi spui tu mai sus are acum sens pentru mine, dar acum 2 luni n-ar fi avut. Inclusiv că am nevoie de niște cărți peste un anumit nivel, exact cum spui tu, ca să înțeleg ce e în spatele acelor operațiuni. Eu nu sunt învățat să gândesc ca un programator, eu văd complet altfel algoritmii pe care încerc să-i implementez și mi-am dat seama de asta urmărind acele probleme pentru programatori care apar pe site-uri (gen ce poți primi la un interviu de angajare).

În fine, nu zic că așa cum încerc eu au trebui să facă toată lumea, dar ar fi interesant să continui dacă mai ai aplecare spre a învăța oamenii câte ceva.

Adaugă un comentariurăspuns pentru

Poți adăuga bucăți de cod folosind [code]codul tău aici[/code], [js][/js], [php][/php] etc.

Link-urile în context sunt binevenite. Comentariile fără nume/email valid sunt șterse.
PS: Comentariul NU este editabil.

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Site-ul blog.iamntz.com utilizează cookie-uri. Continuarea navigării presupune acceptarea lor. Mai multe informații.

windows apple dropbox facebook twitter