fara sa folosesti o multime de aplicatii software. Sisteme de operare, drivere, playere audio si video, browsere, si asa mai departe. Iar daca faci o munca de birou este aproape cert ca folosesti zilnic editoare de text, programe de calcul tabelar sau diverse aplicatii specifice domeniului tau de lucru. Fie ca vorbim de calculator, tableta sau telefon, programele software sunt o prezenta ubicua in viata noastra. E greu, asadar, de gasit o alta activitate umana care sa egaleze ca impact asupra vietii noastre de astazi programarea. (O voi numi in continuare programarea calculatoarelor, caci toate dispozitivele a caror functionare se bazeaza pe software sunt in esenta niste calculatoare.) Nu e de mirare, deci, numarul mare de oameni care fie isi doresc in mod deschis, fie viseaza in secret sa aiba abilitatile unui programator. Isi doresc sa-si poata crea singuri o aplicatie care le e necesara (si care poate fie nu exista, fie este prea scumpa), sau isi doresc sa transpuna in realitate o idee de joc ce le-a incoltit in minte. Isi doresc, cu alte cuvinte, sa-si poata transpune gandurile intr-un sir de comenzi care rulate de un calculator sa dea rezultatele asteptate. Poate ca si tu iti doresti aceste lucruri. Ba poate chiar te-ai si apucat, dar ti s-a parut prea dificil si ai lasat-o balta. Am o veste pentru tine: Nu exista nicio stiinta dificila pe lumea asta, atata timp cat este explicata pe intelesul tau. In aceste conditii, mai trebuie doar sa iti doresti s-o intelegi si sa fii dispus sa depui si ceva efort. Din start iti spun: Cu efort zero obtii rezultat zero. E valabil in orice domeniu, nu doar in invatarea programarii calculatoarelor. Fie ca vrei sa iti imbunatatesti stilul de viata, fie ca vrei sa arati mai bine, fie ca vrei sa cunosti oameni interesanti, fie ca vrei sa inveti sa dansezi sau sa desenezi, trebuie sa fii dispus sa depui ceva efort. Fata de alte activitati, insa, programarea calculatoarelor ofera avantajul unei recompense foarte rapide pentru efortul depus. Vei vedea cum cu un minim de cunostinte deprinse vei putea deja sa iti exersezi creierul creand lucruri foarte simpatice si fascinante (chiar daca destul de simple, la inceput).
Hai sa ne apucam de treaba! Mai intai, ce iti trebuie pentru a incepe sa inveti sa programezi un calculator? Probabil deja te gandesti ca un prim lucru absolut necesar este calculatorul. Ei bine, nu! Consider ca primele lectii pe care ar trebui sa le invete un viitor programator nu au nicio trebuinta de calculator. Adevarata creatie nu se intampla acolo. Ci adevarata creatie rezulta dintr-o reorganizare a mintii, dintr-o antrenare a creierului in directia dobandirii unei noi abilitati, a unui nou mod de a vedea lumea. (Poate ultima afirmatie ti se pare un pic exagerata. Poate ca iti doresti doar sa inveti sa faci programe de calculator, si nu sa iti schimbi modul de a vedea lumea. In cazul acesta, te rog sa nu mai citesti restul articolului si nici articolele ulterioare pe aceasta tema, fiindca n- or sa te ajute. Eu nu vreau sa te invat sa devii zugrav, ci pictor.)
O foaie de hartie si un pix. Atat iti trebuie pentru a invata cea mai importanta lectie din programarea calculatoarelor. Si in ce consta aceasta lectie? Consta in a intelege faptul ca un calculator poate sa execute doar un set foarte limitat de instructiuni. Si ca orice lucru pe care ne dorim ca un calculator sa-l faca trebuie sa-l putem sparge intr- un sir format din aceste intructiuni pe care calculatorul le cunoaste si le poate executa. (La fel ca in jocul Tetris avem doar cateva tipuri de piese si trebuie sa ne descurcam cu ce avem pentru a construi linii.) Sa luam un exemplu simplu. Sa zicem ca avem un calculator care stie doar sa aprinda si sa stinga un punct situat la coordonate oarecare pe un ecran de 1010 astfel de puncte. Te rog sa desenezi pe foaia de hartie o schita a acestui ecran. Ar trebui sa arate in felul urmator.
Pentru a identifica fiecare dintre cele 100 de puncte putem, de exemplu, denumi coloanele si liniile folosind numere. Astfel, punctul marcat cu rosu se gaseste pe coloana 7 si pe linia 3, deci la coordonatele (7, 3). (Punctul negru din stanga jos este situat la coordonatele (1, 1).)
Am spus ca acest calculator imaginar de care vorbim stie sa aprinda si sa stinga oricare dintre cele 100 de puncte. Altfel spus, el poate executa doar doua instructiuni: Aprinde punctul de la coordonatele (x, y). Stinge punctul de la coordonatele (x, y). Putem simplifica lucrurile simplificand denumirile acestor comenzi in Aprinde(x, y)si, respectiv Stinge(x, y). Iata, in continuare, cum am putea folosi acest calculator imaginar pentru a desena o floare.
Marcheaza-ti, te rog, pe foaia de hartie punctele care trebuie aprinse pentru a desena aceasta floare. Apoi noteaza-ti pentru fiecare dintre aceste puncte coordonatele. Tot ce mai trebuie acum pentru a instrui calculatorul nostru virtual sa deseneze aceasta floare este sa ii dam comenzile pentru aprinderea fiecarui punct. Te rog sa iti notezi pe foaie succesiunea de comenzi rezultata.
La mine programul rezultat astfel este urmatorul: Aprinde(1, 5) Aprinde(1, 6) Aprinde(2, 2) Aprinde(2, 3) Aprinde(2, 4) Aprinde(2, 7) Aprinde(2, 8) Aprinde(2, 9) Aprinde(3, 2) Aprinde(3, 4) Aprinde(3, 7) Aprinde(3, 9) Aprinde(4, 2) Aprinde(4, 3) Aprinde(4, 5) Aprinde(4, 6) Aprinde(4, 8) Aprinde(4, 9) Aprinde(5, 1) Aprinde(5, 4) Aprinde(5, 5) Aprinde(5, 6) Aprinde(5, 7) Aprinde(5, 10) Aprinde(6, 1) Aprinde(6, 4) Aprinde(6, 5) Aprinde(6, 6) Aprinde(6, 7) Aprinde(6, 10) Aprinde(7, 2) Aprinde(7, 3) Aprinde(7, 5) Aprinde(7, 6) Aprinde(7, 8) Aprinde(7, 9) Aprinde(8, 2) Aprinde(8, 4) Aprinde(8, 7) Aprinde(8, 9) Aprinde(9, 2) Aprinde(9, 3) Aprinde(9, 4) Aprinde(9, 7) Aprinde(9, 8) Aprinde(9, 9) Aprinde(10, 5) Aprinde(10, 6) Poate ca programul tau aprinde punctele intr-o alta ordine, insa ce e important e faptul ca efectul final este acelasi. Acum haide sa vedem cum am putea face ca discul din centrul florii sa dispara. Evident, va trebui sa folosim instructiunea Sterge(x, y), unde (x, y) vor fi pe rand coordonatele fiecaruia dintre punctele ce construiesc acel cerc. Noteaza-ti si acest program, dupa care te rog sa-l compari cu programul listat in continuare: Sterge(4, 5) Sterge(4, 6) Sterge(5, 4) Sterge(5, 5) Sterge(5, 6) Sterge(5, 7) Sterge(6, 4) Sterge(6, 5) Sterge(6, 6) Sterge(6, 7) Sterge(7, 5) Sterge(7, 6)
E simplu, nu? (Este ca si cum am avea un robot pe care il putem programa sa deseneze sau sa sterga un punct pe o tabla la o pozitie indicata. Dupa cum ai vazut, prin succesiuni de astfel de instructiuni simple putem realiza pe acea tabla o multime uriasa de desene. (Daca facem un mic calcul, observam ca putem construi un numar de 2^100 desene distincte. Cel mai probabil, insa, cea mai mare parte dintre aceste desene vor arata doar ca niste imprastieri aleatoare de puncte, fara nicio semnificatie.) Practic, singurul lucru care ne limiteaza este faptul ca tabla permite doar 1010 puncte si doar doua culori (stins, si aprins). Insa intr-un calculator real aceste limitari nu sunt prezente ci dispunem de peste 1000000 de puncte si peste 10000000 de culori.) Poate ca ceea ce ai facut pana aici ti s-a parut o joaca mult prea simpla, si care nu are mare legatura cu ideea de programare a calculatoarelor. Insa te asigur ca daca ai inteles acesta lectie si ai facut singur cele doua mici programe ai facut un pas urias in a intelege cum se programeaza un calculator, caci ai inteles unul dintre conceptele de baza acela de instructiune. Ce ne-am face, insa, daca ne-am propune ca dupa ce am desenat aceasta floare sa desenam altceva? Cel mai indicat ar fi ca mai intai sa stergem toate punctele, dupa care sa le aprindem pe cele care compun noul desen. In cazul in care am cunoaste desenul ce a fost afisat anterior am putea, evident, sa inlocuim in programul ce l-a generat fiecare instructiune de tip Afiseaza(x, y) cu o intructiune de tip Sterge(x, y). Insa hai sa ne gandim la o situatie mai avansata, in care dintr-un motiv sau altul nu ne ramane alta solutie decat sa stergem toate punctele de pe ecran inainte de a face noul desen. Ar trebui, asadar, sa scriem 100 de instructiuni de tip Sterge(x, y). Cam mult de munca pentru un simplu ecran de 1010 pixeli, nu? (Nici nu vreau sa ma gandesc la cazul unui ecran de 1280800.) Banuiesti deja, sunt convins, ca exista o solutie mult mai facila decat cele 100 de instructiuni de tip Sterge(x, y). Pentru a o intelege, insa, este nevoie de conceptul de variabila (care este doar o denumire data unei mici bucati dintr-o memorie in care putem scrie si din care putem citi valori). Voi diseca acest concept intr-o lectie ulterioara.
Pentru moment te-as ruga sa te gandesti cum l-ai putea schita pe Mickey Mouse folosind calculatorul virtual discutat in aceasta lectie. Si, evident, poti posta in sectiunea de comentarii programul si imaginea. De asemenea, as fi curios ce impresie ti-a lasat acest inceput de drum in ale programarii calculatoarelor. Simti ca ne miscam prea incet? Sau prea repede? Intampini dificultati in a intelege anumite lucruri? Ti-ai dori sa aprofundez unele aspecte? (Scrie-mi despre oricare dintre acestea pe florin [at] igotopia.ro, si voi incerca sa adaptez lectiile la obiectivele tale si la stilul tau de a invata.)
Dau share: Facebook19 Twitter Google Email
ANTE RI ORUL: cea mai simpla cale de a invata Go URMATORUL : cum sa il desenezi pe Mickey Mouse dintr-o apasare de buton
9 comments
Sign in or Post as Guest 5 people listening
+ Follow Share Post comment as... Newest | Oldest | Top Comments
BrokeFeb 1, 2014 Salut. Nu specifici ce limbaj de programare folosesti. Eu utilizez C++ dar la tine nu prea vad instructiuni asemanatoare. Functiile le initializezi putin diferit. E cumva Pascal? Poate ca par aiurea intrebarile, dar nu imi dau seama. FlagShare LikeReply
Florin Birleanu moderatorFeb 2, 2014 @Broke Salut! Limbajul folosit e in esenta Javascript. De fapt, este vorba de doar o mica parte din limbajul Javascript, la care am adaugat niste functii create de mine pentru a face initierea in programare cat mai putin "dureroasa" :-). FlagShare 1 LikeReply
BrokeFeb 7, 2014 @Florin Birleanu Salut. Lasa-mi te rog o adresa de mess, pentru ca vreau sa te mai intreb niste chestii legate de cartea ta. Mersi :) FlagShare LikeReply
Florin Birleanu moderatorFeb 7, 2014 @Broke Nu folosesc messenger. Dar putem vorbi pe Facebook (www.facebook.com/florinmarianb) sau pe email (florin@igotopia.ro). FlagShare LikeReply
cos88Nov 10, 2013 De ce 2^100 desene distincte? FlagShare 1 LikeReply
Florin Birleanu moderatorNov 10, 2013 @cos88 Fiindca pe ecran sunt 10x10 puncte. Adica 100 de puncte in total. Iar fiecare punct poate avea doar doua culori -- alb sau negru. Si acuma hai sa facem calculul sa vedem cate desene distincte putem construi in conditiile astea: P1: sa luam primul punct: el poate fi fie alb, fie negru: P1A: pentru cazul in care e alb: punctul al doilea poate sa fie fie alb, fie negru P1N: pentru cazul in care e negru: punctul al doilea poate sa fie fie alb, fie negru Acuma hai sa detaliem cazul P1A: P1A, P2A: adica punctul 1 alb si punctul doi alb: punctul al treilea poate sa fie fie alb, fie negru P1A, P2N: adica punctul 1 alb si punctul doi negru: punctul al treilea poate sa fie fie alb, fie negru Pentru cazul P1N avem, la fel, doua subcazuri: P1N, P2A: ... P1N, P2N:... Observam pana aici ca daca am avea doar un punct pe ecran, atunci am putea construi doar doua desene distincte. Iar 2 este egal cu doi la puterea 1, adica 2^1. De asemenea, observam ca daca am avea doar doua puncte pe ecran, atunci am putea construi patru desene distincte (corespunzatoare cazurilor P1A_P2A, P1A_P2N, P1N_P2A si P1N_P2N). Iar 2 este egal cu 2^2. Daca am mai adauga inca un punct la ecran, ajungand la trei puncte in total, atunci pentru fiecare dintre cele 4 cazuri mentionate am avea cate doua subcazuri (unul pentru situatia in care punctul al treilea e alb, si unul pentru situatia in care punctul al treilea e negru). Ceea ce inseamna ca in total am avea 4x2 = 8 cazuri. Iar 8=2^3. Pe un rationament similar ajungem la concluzia ca in cazul in care pe ecran avem 100 de puncte ce pot avea doar doua culori putem obtine un numar maxim de 2^100 desene distincte.
^-- Daca citind asta nu intelegi, iti recomand sa urmaresti explicatiile cu pixul pe o foaie de hartie. Iar daca tot mai ai nelamuriri, te rog nu ezita sa revii cu o intrebare. FlagShare LikeReply
katySep 1, 2013 Am facut tabla de sah pe dimensiunea 10x10 :) FlagShare 1 LikeReply
Florin Birleanu moderatorSep 2, 2013 Mi-ai citit gandurile. Intr-o lectie anterioara chiar cer o tabla de sah, dar desenata intr-o maniera ceva mai diferita (vei vedea acolo despre ce e vorba...) :-). FlagShare LikeReply Trackbacks 1. cum sa il desenezi pe Mickey Mouse dintr-o apasare de buton :igotopia says: 29/03/2013 at 10:03 PM [...] inceput cu articolul anterior o serie de articole ce isi propun sa te ia de la zero si sa te introduca subtil in lumea [...] 2. cum sa memorezi orice fara sa tii minte :igotopia says: 11/04/2013 at 6:02 PM [...] prima lectie de programare ai vazut ca cel mai important lucru pe care trebuie sa-l cunosti legat de programarea [...] 3. cheia programarii adevarate :igotopia says: 26/05/2013 at 8:27 PM [...] cu ceea ce ai invatat in lectiile anterioare (instructiuni (1/2, 2/2), variabile, instructiunea daca) poti construi programe destul de complexe. [...] 4. apasa butonul potrivit :igotopia says: 07/08/2013 at 8:18 PM [...] isi doreste sa devina programator trebuie sa le stapaneasca intr-un mod personal. Am vorbit despre instructiuni, despre variabile, despre instructiunea daca, despre instructiunea cat timp, despre vectori si [...] 5. secretul gandirii calculatoarelor :igotopia says: 19/08/2013 at 3:38 AM [...] sa execute o serie de instructiuni precise, una dupa alta (asa cum ai putut vedea in lectia 1 (partea 1 si partea a 2-a)). Ai vazut si experimentat pana aici instructiuni ce au un efect vizual imediat [...] 6. Cum sa inveti programare in 8 zile :igotopia says: 07/11/2013 at 5:19 PM [...] te apuci de programare este acela ca orice program este o insiruire de instructiuni foarte precise. Vezi lectia in detaliu aici (si partea a doua [...]
Partea a2a
cum sa il desenezi pe Mickey Mouse dintr-o apasare de buton Am inceput cu articolul anterior o serie de articole ce isi propun sa te ia de la zero si sa te introduca subtil in lumea programarii. Insa scopul lor principal nu este acela de a te invata programare (desi se va intampla si asta). Ci scopul lor este in primul rand sa iti delecteze creierul si sa te incante ca un joc. Si ca sa arat inca din start ca principala utilitate a calculatorului este aceea de a fi un instrument de creatie, am ales o modalitate grafica de a explica cea dintrai lectie a programarii. (Reciteste, te rog, lectia 1, pentru a o avea proaspata in minte.) Vrei sa experimentezi pe viu ceea ce ai invatat acolo? Vrei sa-l desenezi pe Mickey Mouse cat ai zice apasa? Apasa aici:
1
Simplu, nu? (A se observa ca spre deosebire de programele scrise in lectia trecuta, aici fiecare instructiune este terminata cu semnul ;. Utilizarea lui nu este, insa, obligatorie atunci cand scriem fiecare instructiune pe cate o linie diferita.)
Acum hai sa si muncim un pic. Inlocuieste-l pe Aprinde din primele 8 linii cu Stinge. Gata? Apasa butonul de executie. Ce s-a intamplat cu Mickey? (Spune-ne tuturor intr-un comentariu mai jos.)
Daca ai ajuns pana aici, nu te opri. A sosit timpul sa iti eliberezi creativitatea. Esti liber sa stergi intregul program din partea stanga si sa iti scrii propria secventa de intructiuni. (Iti reamintesc ca singurele instructiuni pe care le intelege pentru moment calculatorul nostru minimalist sunt Aprinde(x, y) si Stinge(x, y), unde x si y sunt coordonate ce incep de la 1 (din coltul stanga jos) si cresc cu o unitate cu fiecare deplasare la dreapta, respectiv in sus.) Dau share: Facebook9 Twitter Google Email
ANTE RI ORUL: invata programare de la zero (primul pas) URMATORUL : cum sa memorezi orice fara sa tii minte
18 comments
Sign in or Post as Guest 11 people listening
+ Follow Share Post comment as... Newest | Oldest | Top Comments
BostanDanielJun 30, 2014 Aprinde (5,1) Aprinde (6,2) Aprinde (5,2) Aprinde (5,3) Aprinde (6,2) Aprinde (6,4) Aprinde (5,4) Aprinde (3,3) Aprinde (4,4) Aprinde (8,3) Aprinde (4,5) Aprinde (5,5) Aprinde (6,5) Aprinde (7,5) Aprinde (4,6) Aprinde (5,6) Aprinde (6,6) Aprinde (7,6) Aprinde (4,7) Aprinde (5,7) Aprinde (6,7) Aprinde (7,7) Aprinde (4,8) Aprinde (5,8) Aprinde (6,8) Aprinde (7,8) Aprinde (5,9) Aprinde (6,9) Trebuia sa fie o sabie dar a ajuns un pumnal :-)
FlagShare LikeReply
Florin Birleanu moderatorJul 1, 2014 @BostanDaniel Spor mai departe! :-) FlagShare LikeReply
L8NoapteaDec 11, 2013 Daca scrii stinge si nu Stinge, se intampla ca nu se intampla nimic :P FlagShare 1 LikeReply
Florin Birleanu moderatorDec 12, 2013 @L8Noaptea Corect. Am uitat sa specific ca limbajul asta de programare e "case sensitive" (adica face diferenta intre literele mari si mici). Prin urmare, "stinge" este vazut ca fiind ceva cu totul diferit de "Stinge". Iar cum functia "stinge" nu am inclus-o intre functiile predefinite, nu va sti de unde sa o ia si nu va face nimic :-) . FlagShare LikeReply
Florin Birleanu moderatorMar 30, 2013 @Marius Cirstea foarte "TARE" :-) FlagShare LikeReply Trackbacks 1. cum sa memorezi orice fara sa tii minte :igotopia says: 11/04/2013 at 6:20 PM [...] avut apoi (in articolul anterior) posibilitatea de a testa cele invatate si de a-ti exersa creativitatea intr-o maniera [...] 2. cheia programarii adevarate :igotopia says: 19/08/2013 at 3:37 AM [...] cu ceea ce ai invatat in lectiile anterioare (instructiuni (1/2, 2/2), variabile, instructiunea daca) poti construi programe destul de complexe. Pentru a [...] 3. Cum sa inveti programare in 8 zile :igotopia says: 06/12/2013 at 7:03 PM [...] Primul lucru pe care trebuie sa-l inveti cand te apuci de programare este acela ca orice program este o insiruire de instructiuni foarte precise. Vezi lectia in detaliu aici (si partea a doua aici). [...] 4. Cum il desenezi pe Mickey folosind un mouse :-) :igotopia says: 30/03/2014 at 7:33 PM [] ceva vreme porneam impreuna la drum in fascinantul domeniu al programarii calculatoarelor. Am parcurs cale lunga de atunci am []