ganduri despre programare
Calculatoarele nu sunt inteligente. Nu stiu sa gandeasca si nici sa faca operatii matematice. Ele nu sunt altceva in esenta decat o imbinare de circuite care au proprietatea ca la anumite intrari produc anumite iesiri.
Intreaga lor capacitate de calcul se bazeaza pe o viziune in alb si negru (fara nuante de gri) a lumii. Singurele valori pe care le intelege un calculator sunt alb si negru, aprins si stins, inchis si deschis, pornit si oprit, adevarat si fals, unu si zero. La nivel elementar, un calculator nu stie sa faca altceva decat ar sti un robot capabil sa aprinda si sa stinga becuri apasand pe intrerupatoare.
Cum e posibil, atunci, ca un calculator care nu intelege mai mult de doua numere (zero si unu) sa poata face operatii matematice complicate cu numere foarte mari?
Raspunsul il gasim revenind la matematica. Mai precis, la bazele de numeratie. La fel de bine cum reprezentam un numar in baza zece (asa cum o facem in mod uzual, atat de uzual incat poate ca multi dintre noi nici macar nu realizeaza ca se mai poate si altfel), il putem reprezenta si in baza doi. Daca in baza zece foloseam zece cifre pentru a reprezenta orice numar, oricat de mare, in baza doi ne sunt suficiente doua cifre. Zero (0) si unu (1).
Astfel, folosind doar aceste doua cifre putem reprezenta orice numar dorim, oricat ar fi el de mare. Evident, in aceasta reprezentare binara vom avea in general nevoie de mai multe cifre decat ar fi fost necesare in baza zece. Aceasta complicatie e compensata de faptul ca operatiile de calcul se simplifica.
De exemplu, pentru a efectua adunarea a oricaror doua numere trebuie doar sa stim ca 0+0=0, 1+0=0+1=1, iar 1+1=10. Aceste cunostinte ne sunt suficiente, impreuna cu binecunoscutele reguli de calcul al adunarii dintre doua numere formate din mai multe cifre.
Ce e si mai interesant de atat e faptul ca folosindu-se jonglerii matematice simple, intr-un calculator singura operatie aritmetica ce se executa de fapt este aceea de adunare. Cu ajutorul ei se calculeaza si scaderea, dar si inmultirea si impartirea. (Iar cu ajutorul acestor operatii se pot aproxima operatii mai complicate, cum ar fi calculul logaritmilor sau al functiilor trigonometrice.)
Prin urmare, secretul abilitatilor extraordinare pe care le au calculatoarele nu consta atat in structura lor interna, cat in capacitatea programatorilor de a transforma operatii complicate in algoritmi, adica succesiuni de operatii foarte simple, elementare.
Un algoritm e constituit din date si instructiuni ce opereaza asupra acestor date. La modul general, un algoritm este o succesiune de operatii prin care pe baza datelor de intrare se obtin datele de iesire.
Cu datele se opereaza prin intermediul variabilelor. Iar variabila nu e altceva decat un nume ce se da unei anumite zone de memorie. Prin intermediul variabilei acea zona de memorie poate fi citita sau scrisa. Adica putem afla ce este memorat acolo, sau putem memora o noua valoare.
Strans legat de notiunea de variabila este aceea de tip de data (care specifica informatii referitoare la domeniul de valori posibile pentru acea variabila, precum si eventuale constrangeri impuse in operarea cu ea). Totusi, tipul de data nu face parte din miezul esential al ideii de programare. Ci este doar un detaliu ulterior, introdus pentru a simplifica munca programatorilor. Esential este faptul ca variabila este o valoare modificabila, stocata in memorie la o anumita adresa si codata pe un anumit numar de biti (adica cifre binare, 0 sau 1).
Dispunem, asadar, de o serie de variabile pe care avem libertatea de a le defini cum dorim. Putem oricand citi valorile memorate in aceste variable, la fel cum putem si memora noi valori in ele (valorile vechi, evident, stergandu-se). Se pune acum problema cum putem efectua calcule astfel incat pornind de la anumite valori de intrare date sa obtinem anumite valori de iesire dorite?
Raspansul este dat de cea de-a doua componenta a algoritmilor, si anume instructiunile. Un calculator, asa cum am spus deja, nu stie sa execute prea multe instructiuni. Cunoaste, insa, cateva instructiuni de baza, cu ajutorul carora se pot efectua calcule oricat de complicate:
- Instructiuni de citire a valorilor variabilelor.
- Instructiuni de efectuare a unor operatii matematice de baza (cum ar fi: adunarea, scaderea, inmultirea, impartirea, dar si operatii logice ca: si, sau, negare, si altele).
- Instructiuni de atribuire de valori variabilelor.
- Instructiuni de executare conditionata a altor instructiuni. (In functie de indeplinirea sau nu a unei conditii se poate executa unul sau altul dintre doua grupuri de instructiuni.)
- Instructiuni de repetare conditionata a altor instructiuni. (In functie de indeplinirea sau nu a unei conditii se poate sau nu repeta executia unui anumit grup de instructiuni.)
Pe langa aceste tipuri de instructiuni de baza exista si unele variatiuni neesentiale. Si mai exista si posibilitatea modularizarii algoritmilor, prin apelarea in cadrul unui algoritm a altor algoritmi implementati anterior.
Da, asta e tot. Asta e secretul care sta atat in spatele browserului web pe care il folosesti, cat si al jocurilor pe care le joci pe calculator sau pe telefon. Nu e nimic magic si nici nu e vreo stiinta extrem de complicata. E doar arta de a imbina eficient si creativ aceste caramizi elementare de care am vorbit.
Tu stii sa programezi? 🙂
daca (NU) {
ai vrea sa inveti? crezi ca e greu?
} altfel {
la ce proiecte interesante ai lucrat pana acum?
}