
Dorința de a programa
iunie 18, 2019
Alegerea unui computer
iunie 2, 2020Am întrebat prin împrejur și am înțeles că pentru a fi un bun programator, am nevoie de câteva lucruri care la unii sunt înnăscute, iar alţii le dobândesc în timp.
Am nevoie de răbdare, căci, chiar dacă un computer execută fix ce i se spune şi nu ar trebui să comenteze la ce i se spune să facă, trebuie să am în vedere că nu eu sunt cel care scrie primul program pe care trebuie să îl execute componentele hardware şi nu eu sunt cel care a făcut aceste componente.
Componentele hardware sunt concepute de electronişti, care le-au învăţat să ştie să facă anumite lucruri şi sunt comandate de drivere, care sunt programe scrise de alţi programatori. Driverele sunt comandate la rândul lor de sistemul de operare, care este un program scris de alţi programatori şi eu ar trebui să programez folosind un limbaj de programare, care rulează pe sistemul de operare și care este scris de alţi programatori. Astfel, este foarte posibil, ca de multe ori când îi cer ceva unui computer acesta să zică că nu poate să facă ceea ce îi cer, pentru că nu i-am cerut ceva în concordanţă cu ce au fost învăţate să facă componentele electronice, driverele, sistemul de operare şi limbajul de programare în care încerc să îi spun ce vrea să facă.
Aşa că am nevoie de răbdare până reuşesc să îl fac să facă ce vreau eu. Implicit am nevoie de perseverenţă pentru că dacă nu voi reuşi să îl fac să facă ce vreau eu după încercări repetate nu e bine să renunţ, ci să încerc până când va face exact ceea ce vreu eu să facă. Iar asta poate dura. Am înţeles că este bine să am o gândire tranşantă, adică să pot spune clar că ceva este ori alb ori negru, fără să spun că este o combinaţie de mai mult sau mai puţin dintre cele două culori, pentru că un computer este format din componente electronice care alternează două stări clare.
Niciodată răspunsul unui computer nu va fi gri, ci ori alb ori negru, nici măcar la computerul cuantic nu se întâmplă asta, pentru că deşi acolo calculele intermediare implica stări ambigue în concordanţă cu principiul superpoziţiei cuantice, răspunsul final va fi tot o singură stare, pentru că intervine fenomenul de colaps cuantic.
Am mai înţeles că am nevoie de o gândire logică. Adică să pot desluşi implicaţiile care rezultă în urma unei acţiuni. De exemplu dacă eu arunc cu piatra în geam implicaţia acestei acţiuni este că geamul se va sparge.
Am nevoie de o astfel de gândire pentru că pe acest principiu gândeşte şi un computer şi este bine să gândesc la fel dacă vreau să ne înţelegem. Un computer gândeşte executând operaţii logice la fiecare pas. Gândirea logică este baza unui alt tip de gândire pe care trebuie să o am şi anume gândirea raţională. Gândirea raţională implică construirea de raţionamente logice prin care plecând de la o idee pot ajunge la o altă idee.
De exemplu dacă ştiu că Alina are mere şi că Alina este mama mea, atunci pe baza acestor afirmaţii pot să construiesc raţionamentul prin care eu o să mănânc mere. Am ajuns la acesta idee prin faptul că dacă Alina este mama mea, îmi va da şi mie ce are ea, dacă îi voi cere, fiindcă sunt copilul ei şi nu vrea să mă lase nemâncat. Şi cum Alina are mere înseamnă că eu voi mânca mere.
Un alta deprindere pe care am înţeles că e bine să o am este să pot crea raţionamente logice în perspectivă, adică pe termen lung, în care să pot prezice cât mai multe din situaţiile logice care pot apărea în timp. Cu alte cuvinte să fiu un şahist bun, care îşi construieşte strategia de joc gândind cum va putea muta adversarul dacă el face o mutare sau alta. A înţeles că programatorii buni sunt şi buni şahişti asta dacă ştiu să joace şah.
Prevederea situaţiilor ce pot apărea ulterior am înțeles că ține şi de experiența acumulată şi poate şi de un anumit grad de intuiţie. Până la urma prevederile sunt o combinaţie de istorie, analiză a prezentului şi intuiţie. Am înţeles că este necesară şi capacitatea de abstractizare adică să pot crea un model pe care să se poată mula cât mai multe lucruri concrete. De exemplu să pot crea un model de maşină pe care să se poată construi orice mașină, modelul de bază permiţând asta fără ajustări.
Atunci când implementez un lucru el trebuie să iasă cât mai bine și asta am înțeles că presupune să fiu atent la detalii, pentru că din lucrurile mici bine făcute ies lucruri mari care funcționează bine si un computer nu știe să facă nimic dacă nu îi spun eu, așa că trebuie să fiu atent să îi dau și cele mai mici detalii.
E clar că trebuie să îmi placă foarte mult ceea ce fac şi chiar să fiu îndrăgostit, pentru că am înţeles că este nevoie de o capacitate de învăţare continuă, întrucât tehnologia evoluează cu paşi repezi şi datele problemei se schimbă foarte repede.
Datorită evoluţiei tehnologiei un singur om nu poate să facă o aplicație complexă cap coadă şi este nevoie şi de abilităţi de comunicare şi flexibilitate, pentru a putea să mă încadreze în echipă. Am înțeles că mai important decât cum îi spune unui PC să facă ceva, este ce îi spune să facă. Adică important e algoritmul nu limbajul.
