Timp estimat de citire: 8-10 minute
„Programatorii in limbaj de asamblare (Assembler) erau o categorie aparte... Se vorbea despre ei cu un amestec de respect și teamă, ca despre niște lunetisti ai informaticii: nu trăgeau des, dar când o făceau, totul era precis.”
Am lăsat materialele despre limbajele de programare la sfârșit. Nu pentru că nu erau importante, ci pentru că erau... greu de uitat.
Am învățat Assembler, un limbaj în care scriai cu respirația reținută. Știai că fiecare bit conta. Programatorii in limbaj de asamblare (Assembler) erau o categorie aparte. Nu numai că scriau cod, dar știau și ce se întâmpla în spatele fiecărui bit. Se vorbea despre ei cu un amestec de respect și teamă, ca despre lunetiștii informaticii: nu trăgeau des, dar când o făceau, totul era precis. Puteau face minuni cu un computer care altora le dădea doar erori. Și aveau mereu acel aer de oameni obosiți. Aveau privirea cuiva care nu pierde timpul.
Știau să citească dump-urile – acele liste misterioase de urme hexazecimale și registre înghețate – și să vadă unde așa-numitele programe de nivel înalt scăpaseră de sub control, iar apoi adăugau calm câteva zerouri. Nu erau surprinși, nu erau alarmați. Pur și simplu ridicau o sprânceană, scoteau creionul și rescriau secțiunea de cod defectuoasă... la fel cum un chirurg ar opera fără să clipească.
Apoi, ALGOL (Algorithmic Language) – elegant, curat, dar prea teoretic pentru sarcina pe care trebuia să o îndeplinim. Puțini oameni realizează că ALGOL nu a fost inițial destinat „programării practice” ca FORTRAN sau COBOL, ci pentru a defini standardul de exprimare a algoritmilor. ALGOL a fost creat în comun, ca un efort internațional, academic și formal. A fost adoptat ca limbaj publicat pentru unele articole științifice în informatică timp de decenii. ALGOL, definit pentru prima dată în 1958 și apoi în 1960, a lăsat o amprentă profundă asupra limbajelor de programare până în prezent:
Când scrieți astăzi if x > y then ... else ..., urmați pașii limbajului ALGOL, care a acordat prioritate clarității în detrimentul salturilor și artei în detrimentul haosului cu etichete. ALGOL a fost primul limbaj care a introdus condiționale expresive, logice, cu ramificații clare, previzibile, fără „salturi sălbatice”. Această structură if ... then ... else a fost apoi adoptată direct în: PASCAL, Java, Python, JavaScript și aproape toate limbajele moderne. ALGOL a introdus o separare clară între instrucțiuni și expresii - un principiu valoros care s-a pierdut în timp.
Ce înseamnă acest lucru? În ALGOL, instrucțiunile (comenzi care afectează execuția programului) și expresiile (care calculează o valoare) erau tratate în mod clar separat și nu erau amestecate.
Y := X + 1;
if Y > 10 then
Y := 0;
// expresie de atribuire
// instrucțiune de control
// instrucțiune de atribuire
if ... then ... este o instrucțiune de control
X + 1 este o expresie (evaluează o valoare)
Y := X + 1 este o instrucțiune (atribuie valoarea)
Și aceeași filosofie – claritate, separarea între ceea ce calculezi și ceea ce faci cu rezultatul, o sintaxă care previne confuzia – a fost adoptată de Python, unul dintre cele mai populare limbaje de programare din prezent. Python este similar cu ALGOL în principiu, dar este la fel de practic ca Pascal: nu vă permite să scrieți cod ambiguu, vă obligă să gândiți clar, iar indentarea – spațiile care structurează codul – nu este opțională, ci face parte din limbaj.
Y := X + 1 este o instrucțiune (atribuie valoarea)
Când m-am întors la programare după mai bine de douăzeci de ani de pauza, am lucrat scurtă perioadă in VISIUAL BASIC FOR APPLICATION (VBA) – un limbaj foarte puternic, dar cu limitări serioase în ceea ce privește lucrul în cloud. Pana la urma am ales Python. Nu din nostalgie dupa ALGOL, ci din rațiuni practice: simplitate, rigoare și puterea comunității. Python îți oferă ceea ce promitea ALGOL: claritate și eleganță. Dar, spre deosebire de ALGOL, Python funcționează. Desigur, Python are ropriile sale provocări. "Jungla" de versiuni ale bibliotecilor poate fi foarte copleșitoare – ceea ce funcționa ieri s-ar putea să nu funcționeze astăzi, iar dependențele chiar pot deveni o junglă. Dar de aceea există mediile virtuale – un concept minunat de elegant: fiecare proiect trăiește în propria bulă, cu propriile versiuni de biblioteci, fără a interfera unul cu celălalt. Este ca și cum ai avea mai multe birouri separate în aceeași clădire, fiecare cu propriile instrumente, fără ca acestea să se contamineze reciproc.
if ... then ... este o instrucțiune de control
FORTRAN (Formula Translation) era prietenul tuturor: robust, cu sintaxă permisivă și comportamente intuitive, care uneori erau prea lezate în favoarea programatorului. De exemplu, dacă nu declarați un tip de variabilă, FORTRAN presupune automat că orice nume de variabilă care începe cu I, J, K, L, M sau N este de tip INTEGER, iar celelalte sunt considerate de tip REAL.
Nu puteți avea blocuri indentate care amestecă logica cu evaluarea pe aceeași linie. Cu alte cuvinte, ALGOL spune: „Mai întâi calculează, apoi decide ce să faci cu rezultatul.” Fără „trucuri”. Această idee a fost dusă mai departe cu Pascal – un descendent direct al ALGOL. Pascal a preluat esența ALGOL și a simplificat-o pentru lumea reală. El a eliminat complexitatea academică și a creat un limbaj care funcționa eficient în probleme din lumea reală. De aceea Pascal a avut succes acolo unde ALGOL a rămas doar un ideal teoretic.
Astfel, X = 5 nu producea o eroare, ci îți oferea în liniște o variabilă reală dacă X nu începea cu una dintre literele „corecte”.
Un detaliu care putea provoca o mare durere de cap.
Un alt exemplu era bucla DO, unde un punct greșit plasat schimba sensul întregii instrucțiuni:
DO 10 I = 1.10
Ceea ce ar fi trebuit să fie o buclă DO 10 I = 1, 10, compilatorul a interpretat-o ca instrucțiune de atribuire
DO10I = 1.10, fără avertisment.
Programul a rulat, dar a făcut altceva decât ceea ce te-ai fi așteptat.
Pentru noi, cei care învățam, FORTRAN era iertător. Dar tocmai în această indulgență se ascundea uneori o pedeapsă tăcută: codul funcționa, dar nu era ceea ce credeai că ai scris.