Una din cele mai mari provocări de care vei avea parte ca dezvoltator software începător va fi aceea de a înțelege secvențe de logică complicată.
Procesul de “programare” e, simplu spus, procesul prin care înlănțuim secvențe de instrucțiuni pentru a ajunge la un anumit rezultat plecând de la niște date de intrare.
Deși, de multe ori pare simplu, te vei întâlni cu situații în care va fi nevoie să scrii algoritmi ce vor presupune logică mai complexă pe care creierul tău nu o va putea înțelege din prima, sau cu prea mare ușurință.
Rezolvarea problemelor de algoritmică
Problemele de algoritmică nu sunt altceva decât puzzle-uri de logică ce presupun ordonarea anumitor instrucțiuni pentru obținerea unui anume rezultat și care, uneori contrar intuiției, ele se rezolvă întâi mental și ulterior se transpune soluția în cod, nu invers.
În funcție de complexitate și de experiența în rezolvarea acestui tip de probleme, e posibil ca uneori găsirea unei soluții să ni se pară floare la ureche, iar alte ori să ni se pară imposibil de rezolvat.
Deși, în timp oamenii au dezvoltat diverse tehnici ce pot fi folosite pentru a ușura procesul de rezolvare, sunt totuși genul de probleme care solicită extrem de tare capacitatea mentală.
Una dintre aceste tehnici este limbajul pseudocod.
Ce este limbajul pseudocod
Limbajul pseudocod e un mod de a transpune instrucțiunile logice în scris, pentru a le vizualiza mai bine.
Limbajul pseudocod e un “limbaj”, un fel de sintaxă, ce seamănă într-o oarecare măsură cu programarea, dar este ceva mai apropiată de limbajul uman, pentru că scopul nu e de a obține cod gata de executat, ci mai degrabă de a descifra algoritmul folosindu-ne de aceleași elemente de control al execuției ca și într-un limbaj de programare.
E o formă extrem de simplificată a unui limbaj de programare, dacă vrei.
Uite un exemplu simplu:
IF age is higher OR equal to 18
print "person is an adult"
ELSE
print "person is a child"
Uitându-te la codul de mai sus, probabil îți poți da seama foarte ușor ce se întâmplă, pentru că e scris aproape în limbaj natural, uman.
Sintaxa folosită e, să spunem, ceva mai verboasă. O altă varianta ar fi:
IF age >= 18
print "person is an adult"
ELSE
print "person is a child"
care e acum ceva mai îndepărtată de limbajul uman și mai aporpiată de sintaxa unui limbaj de programare.
Hai să mai vedem un exemplu.
FOR EACH student
IF grade is higher than 5
print "passed"
ELSE
print "failed"
IF number of failures is higher than 3
print "send to repeat class"
Ăsta e un exemplu cu o instrucțiune repetitivă, cum ar fi o buclă.
Așa cum ziceam, ne folosim de aceleași structuri de control al execuției ca într-un limbaj de programare pentru a descifra soluția problemei.
Ca idee, nu există o sintaxă standardizată pentru pseudocod, vei vedea cu siguranță mai multe variante, pentru că în general oamenii îl scriu așa cum le e mai la îndemână și mai ușor de înțeles.
Vei vedea, de exemplu, și varianta în care se marchează sfârșitul unei structuri, de genul:
IF age >= 18
print "person is an adult"
ELSE
print "person is a child"
END IF
Dar personal prefer să fie cât mai simplu.
Atâta timp cât îți formezi un fel de sintaxă pe care o respecți de fiecare dată, o înțelegi și te ajută să rezolvi mai ușor problemele, e absolut în regulă.
Diagrama UML: alternativa la pseudocod
O altă variantă, care poate fi mai greu de citit și de înțeles, sau mai ușor, depinde de fiecare persoană, e o diagramă UML.
UML e un acronim pentru Unified Modeling Language sau limbaj de modelare universal.
Într-o diagramă UML, spre deosebire de pseudocod, există anumite reguli definite pe care trebuie să le respecți pentru a defini logica.
Hai să vedem cum ar arăta prima secvență de pseudocod transpusă într-o diagramă UML.
Destul de simplă și ușor de înțeles, nu-i așa? Asta și din cauză că logica în sine e una ușor de înțeles.
Uite o diagramă și pentru a doua secvență de pseudocod.
Aici lucrurile par mai complicate puțin, dar în realitate, dacă înțelegi rolul fiecărui simbol (dreptunghi - acțiune și romb - evaluarea unei condiții) nu mai pare chiar așa complicat.
Ambele variante, atât pseudocodul cât și diagramele UML sunt extrem de utile atunci când trebuie să rezolvăm anumite probleme de logică sau algoritmică complicată.
Dar la rândul lor ambele pot deveni totuși complicate în momentul în care și logica devine complexă.
Totuși, avantajul ambelor e acela că putem să vizualizăm întreaga problemă continuu și avem posibilitatea să urmărim doar anumite secvențe de pași, fără să fie nevoie să ne “mapăm” mental de fiecare dată întreaga problemă.
Diagramele UML sunt de mai multe forme, cea pe care o vezi aici e cea pentru a evidenția șiruri de instrucțiuni logice, dar mai sunt, de exemplu, și cele pentru vizualizarea ierarhiei claselor în structura unor componente de cod.
Concluzie
Atât pseudocodul cât și diagramele UML sunt extrem de utile pentru a-ți crea o imagine de ansamblu asupra problemelor, pentru că te ajută să-ți “descarci” modelul mental pe o bucățică de hârtie, fie ea fizică sau digitală și să urmărești logica pas cu pas.
O dată cu experiența nu vei mai avea nevoie totuși să pui atât de des pe hârtie pașii unei probleme, dar te ajută foarte mult în special la început când creierul tău nu e obișnuit să rezolve astfel de probleme și se blohează extrem de rapid.
Atât pe azi, ne auzim data viitoare.
