LIMBAJE DE PROGRAMARE



Ma laud ca sunt un fel de arheologie, acum vie, in zonalimbajelor de programare. Am inceput cu codul masina si acum, iata inchei cu C#. Am traversat cam tot ce putea traversa in materie de hardware, adica de la calculatorul pe lampi, la cel pe tranzistori si acum am deja o tableta originala Mac si ma laud ca pe ea este inscriptionat numele meu.
Programarea in cod masina a reprezentat trecerea de la lucrul cu fisele de pe tabloul unui tabulator spre banda de hartie pergorata, citita optic, asa cum era pe CIFA 102 Economist. Era ceva special sa vezi cum un dulap cat o pianina, la care se aprindeau tot felul de beculete este in stare sa rezolve un sistem de ecuatii lineare de 30x30 si sa declanseze tiparirea a nenumarate siruri de cifre. Mai mult, sa-l vezi pe gagarin sau harta Romaniei scoasa la calculator sau sa vezi cum se minuneaza insusi Ceausescu cand la o vizita de lucru i se tiparea la imprimanta chipul sau proprietate personala, era deja interesant.
Instructiunile elementare (adunare, scadere, inmultire, impartire, salturi conditionale, salturile care permiteau reluari aveau coduri care se memorau fara probleme daca lucrai intens. Variabilele aveau adrese pe care programatorul le gestiona si utilizarea de deplasari facea posibila referirea campurilor ce interveneau in evaluarea de expresii. Operanzii aveau lungime fixa si desenand harta dispunerii de variabile, riscul referirii altor operanzi scadea vizibil. revista Studii si cercetari de Calcul Economic si Cibernetica Economica, la inceputurile ei a publicat articole privind programarea in cod masina si numerosi programatori din centrul de calcul erau maestrii in asa ceva. In plus, la IFa unde se proiducea calculatorul romanesc, erau adevaratii parinti si designeri ai limbajului cod masina. Era o placere sa vezi cum se manipulau cutiutele cu benzi perforate pentru a incarca programe care sa rezolve tot felul de probleme, foarte complicate atunci, extrem de banbale, acum.

Programarea in limbaj de asamblare reprezinta apoteoza pentru orice programator adevarat, care numai daca stie ASSEMBLER intelege orice se intampla in aplicatiile sale, fara a folosi expresii jignitoare precum calculatorul greseste, galuatorul gandeste sau sa-si dea cu parerea spunand enormitati. Programatorul in assembler stie:
- structura instructiunilor
- moduri de adresare
- cum se calculeaza ciclurile masina
- pozitionarea indicatorilor de conditie
- ca se executa exact ceea ce se programeaza
- sa lucreze la nivel de bit
- sa acceseze continutul fiercarui bit al memoriei
- sa interpreteze functie de context acelasi sir de biti referit
- ce inseamna pointeri, intr-o alta acceptiune decat cea folclorica.
Cand in 1974, Editura Tehnica a publicat masivul volum scris de TEODORESCU, CATONA si POPESCU, s-a produs o mare schimbare in gandirea programatorilor, pentru ca pentru prima data erau abordate la nivel de detaliu fin atat calculatorul, resursele acestuia, cat si limbajul de asamblare, nelasand loc de intors in nicio directie. Adica este si filosof dar este si un practician rational, eficient si mai ales intelept. Limbajele de asamblare se invata din aproape in aproape, iar cartile destinate lor nu sunt scris ede amatori, ci de tipi care au trudit din greu si le stapanesc bine. Numai Paganini avea darul de a canta pe o coarda a viorii. Tot asa si programatorii in assembler. Numai cei foarte buni reusesc in meserie. De-a lungul timpului au fost scrise carti de programare in limbaj de asamblare pentru calculatoarele IBM, FELIX C 512, PC-urile moderne de azi, dar trecerea la limbaje evoluat au restrans aria celor care mai stapanesc programarea in assembler, spre scaderea performantei lor, bineinteles.
In 1975, matematicianul Gabriel DIACONESCU si foarte tanarul informatician Ion LUNGU, ambii lucrand in Centrul de Calcul al catedrei de Cibernetica Economica in calitate de cadre didactice asociate, au elaborat si publicat lucrarea Limbajul de programare ASSEMBLER structurata in trei parti. In prima parte, autorii prezinta conceptele de baza legate de calculator dar privite in raport cu obiectivul urmarit: invatarea programarii in limbajul ASSEMBLER. De aceea se dau detalii privind reprezentaruile in memorie a formatului binar, a numerelor in zecimal impachetat si in zecimal despachetat. Se detaliaza reprezentarile pe baiti, la nivel de cuvant, de dublu cuvant si la nivel dezona de memorie de lungime oarecare. Se insista asupra necesitatii de a construi scheme logice extrem de detaliate, intrucat limbajul ASSEMBLER foloseste instructiuni asociate operatiilor elementare. Sunt prezentate instructiunile cod masina, modurile de adresare (directa, relativa, indexata, indirecta) care cu mici modificari se intalnesc la toate limbajele de asamblare. Se insista asupra modurilor de structurare a instructiunilor (RR, RX, RS, SS, SI) Lucrarea se incheie cu un tabel recapitulativ al instructiunilor artimeticilor binara si, respectiv, zecimala, unde se arata despre ce operatie este vorba (adunare, scadere inmultire, impartire, comparare, incarcare, memorare, memorare, deplasare la nivel de biti, conversii, transfer conditionat si testare. Urmatoarea coloana este destinata pentru codul operatiei, unde sunt prezentate mnemonicele. Limbajul assembler are structirarea informatiei diferita functie de modul in care sunt stocati operanzii. daca operandul este dr tip registru, notat R, cand operandul se afla inclus in instructiune notat I sau daca operandul este de tip zona de memorie, notat S, instructiunile sunt clasificate ca fiind de tip R-R, R-S, S-S, S-I. Dupa ce sunt descrise resursele limbalului (alfabet, mecanisme de construire vocabular, macroinstructiuni, cuvant de stare program - PSW, se trece la detalierea instructiunilor. Autorii fac prezentari tehnice aratand exact ce se intampla cu continutul zonelor de memorie sau cu continutul registrilor. Detaliere merge pana la a arata cum se reprezinta in cod hexazecimal instructiunea scrisa in ASSEMBLER in memorie si cum se pozitioneaza indicatorii de conditie. Programatorul are o imagine clara asupra tuturor prelucrarilor efectuate de o instructiune. Se arata si care sunt registri sau zonele de memorie carora nu li se modifica continutul. Sunt date numeroase secvente sugestive de programe, pornind de la prezentarea de probleme ce trebuie rezolvate. La paginile 209 - 213este dat algoritmul de calcul adrese operanzi pentru inmultirea a doua matrice si schema logica aferenta. La paginile 214 -215 este dat algoritmul si schema logica pentru conversia unui numar in virgula mobila la sir de caractere in vederea afisarii. In carte zona de memorie care stocheaza operandul este notata cu S prescurtare de la STORAGE care inseamna memorie. A patra coloana este destinata formatului simbolic al instructiunii, asa cum trebuie scrisa de programator. Ultima coloana este destinata unor comentarii care reprezinta ghidul de urmat de catre programator pentru a intelege semnificatia la nivel fizic a ceea ce executa fiecare instructiune.. Sunt date reprezentari grafice sugestine si se fac precizari tehnice privind pozitionari ale indicatorilor deconditie si a rezultatului final. La instructiunile care implementeaza operatii logice se dau tabele de valori cu operanzii si rezultatul final. Prin 1992, autorii Dan SOMEA si Vladut TEODOR au publicat o carte interesanta de programare in limbaj de asamblare.
In anul 1997, Laur IVAN, a publicat in cadrul unui proiect TEMPUS o culegere de probleme pentru disciplina Limbaje de asamblare care se preda studentilor sectiei de Informatica Economica de la facultatea de Cibernetica din ASE.
Ceva mai tarziu, un colectiv larg de cadre didactice si specialisti in programare, a dezvoltat un demers, concretizat prin aparitia unei lucrari intitulataPractica dezvoltarii aplicatiilor software in limbaje de asamblare aparuta in seria Informatica, a Editurii Economice.
Cand se ajunge la un nivel elevat de programare in limbaj de asamblare este necesara reutilizarea de macrodefinitii, de subprograme si folosirea rafinata a intreruperilor, ceea ce presupune parcurgerea pas cu pas a unei altfel de literaturi.
Pornind de la faptul ca programatorul assembler este cel care trebuie sa stie cu exactitate tot ce se intampla la nivel de bit la executia unui program, cartea ofera acele elemente ce permit intrarea in profunzine, de la reprezentarea datelor in memorie pe tipuri de date distincte, reprezentari ale instructiunilor la nivel de cod masina, pentru a face depanare eficienta. Sunt date operatiile de prelucrare elementare in toata complexitatea lor, cu pozitionare flaguri si stabilire exacta a efectelor. Prezentarea modurilor de adresare si a amplasarii in segmente de date si segmente stiva a continutului, permite explicarea alocarii dinamice, a prezentarii mecanismelor de recursivitate si a modurilor de adresare cu calcule de cicluri masina. Anexele contin codul ASCII extins (anexa 2), instructiunile in ordine alfabetica (pg. 373 - 420) si prezentarea registrilor DS, SS, CS si ES, separat de registrii utilizati in managementul deplasarilor de operanzi BX, SI si DI.

Programarea in limbalul ALGOL a fost in principal o programare de birou sau la tabla, intrucat niciodata nu am avut ocazia sa rulez un program, neavand compilator pentru acest limbaj. Ca in toate cazurile in care imaginatia o ia inaintea realitatii, limbajul ALGOL a fst gandit ca o constructie perfecta, folosind cuceririle din zona limbajelor formale si definirile lui BNF (Backus Naur Form). Din aproape in aproape au fost fundamentate conceptele alfabet, identificator, intreg, operator, expresie, mergand pana la program si culminand cu recursivitatea. Au fost realizate constructii perfecte care au permis acele generalizari atat de necesare in constructia compilatoarelor moderne de azi. Limbajul ALGOL a cunoscut stadiile ALGOL 60 si ALGOL 68. Intrucat nu au existat abordari in plan practic de realizare a compilatoarelor care sa implementeze toate facilitatile definite si pe deasupra au fost identificate modalitati tot perfecte dar mai simple de a exprima aceleasi lucruri, limbajul ALGOL a cazut in desuietitudine, nemaifiind decat un element de istorie in peisajul informaticii de azi. Imi amintesc cu mare placere cum profesorul Dragos VAIDA picta pe tabla la cursurile de programare solutii excelente, frumoase pana la sublim pentru a arata cum se calculeaza factorialul cu functii recursive, cum se genereaza termenii sirului Fibonacci tot asa si cum se implementeaza nu mai stiu ce folosind dubla recursivitate. Superb, dar doar atat. Nu-mi amintesc sa fi tinut in mana o carte de ALGOL scrisa de un autor roman. Profesorul Dragos VAIDA s-a preocupat de probleme teoretice legate de construirea compilatoarelor.

Programarea in FORTRAN a prins in mediile universitare si stiintifice pentru ca:
- este un limbaj cu design usor de asimilat
- existau compilatoare FORTRAN la toate calculatoarele aflate in centre de calcul
- circula o vasta literatura despre acest limbaj
- exemplele cele mai frecvente de solutionare a problemelor cu mare impact la utilizatori erau date in limbajul FORTRAN
- cei care se instruisera in tara sau in strainatate aveau certificari privind abilitati de a lucra in acest limbaj.
Au elaborat lucrari despre programarea in acest limbaj numerosi autori.
Petre DIMO, profesor in Politehnica din Bucuresti a conceput o lucrare in care a prezentat conceptele generale despre calculatoare si despre programare. Dupa aceea a trecut la descrierea limbajului FORTRAN, parcurgand linia clasica, cu trecerea in revista a tipurilor de date si de variabile, instyructiuni de intrare/iesire, instructiuni de atribuire, instructiuni de saltneconditionat si instructiuni de salt conditionat, instructiuni deciclare, dezvoltarea de subprograme, precum si prezentarea altor facilitati care duceau la cresterea calitatii programelor. Cartea era astfel gandita incat cititorul sa treaca rapid la scrierea de programe proprii, pe care sa le depaneze si mai apoi sa le ruleze in vederea rezolvarii de probleme concrete. Exemplificarile in carte sunt insotite de enunturi, de indicatii si consideratii de programare, iar programele FORTRAN vin ca o prelungire fireasca a fiecarui demers practic. Trecerea de la enunt la formule si de la formule la scheme de descriere si mai apoi la program fac abordarea extrem de interesanta si usor de urmarit si mai ales creste eficienta procesului de invatare a programarii in limbajul FORTRAN.
Aparuta la Editura Albatros, lucrarea PROGRAMARE IN LIMBAJUL FORTRAN scrisa de Horia GEORGESCU si Octavian BASCA, a reprezentat un real succes prin: - continutul extrem de bine structurat
- exemplele sugestive
- accesibilitate prin cost
- modul de a transmite cunostinte.
Daca in primele40 pagini sunt abordate cele mai importante aspecte care il familiarizeaza pe cititor cu programarea, , de la pagina 40 la pagina 258 sunt oferite enunturi, iar de la pagina 259 pana la pagina 327 sunt date solutiile.
Pentru fiecare problema la care obiectivul este scrierea de program, se da enuntul, se prezinta aspectele care permit intelegerea modului desolutionare, este data schema logica. In cazul in care se urmareste modificarea unui program, se prezinta problema initiala si programul aferent si se cer noi elemente care aduc schimbari in textul sursa. Lucrarea a avut o foarte larga raspandire pentru ca a avut un tiraj 32.300 exemplare.
Cartea Programe FORTRAN comentate in automatica, avandu-i autori pe M. HANGANUT, I. DANCEA, O. NEGRU, este organizata pe zece teme. Sunt prezentate probleme de trasare si interpretare diagrame, locuri de radacini, de stabilitate sisteme liniare, analiza raspunsului si de optimizare parametrica a sistemelor.
Firma IBM a dezvoltat un pachet de subrutine pentru calcule stiintifice - SSP, care au fost publicate intr-o carte. Volumul s-a constituit intr-un model de stil de programare dar si intr-o veritabila sursa de inspiratie, pentru ca subprogramele erau:
- scrise folosind aceleasi reguli
- documentarea era completa si perfecta
- cu un nivel de generalitate maxim
- testate total ceea ce insemna corectitudine garantata
- optimizate prin aplicarea de reguli stricte
- explicite in ceea ce priveste alte subrutine utilizate
- grupate pe tipuri de probleme: matrice, polinoame, statistica, generari numere pseudoaleatoare, ecuatii diferentiale, sisteme liniare
- omogene in raport cu codurile de eroare furnizate.
Volumul SCIENTIFIC SUBROUTINES PACKAGE - SSP si azi ar fi un exemplu de bune practici in ale programarii, pentru ca asemeni poetilor care nu au cum sa scrie versuri de calitate daca nu citesc poezii scrise de altii, tot asa si programatorii nu au cum sa crie programe de calitate speciala daca nu analizeaza texte sursa scrise de alti programatori. In plus, nimeni nu publica programe stupide, asa ca cititorul de programe FORTRAN avea de unde invata lucruri bune. Multi programatori incorporau in programele lor texte sursa preluate din volumul SSP, iar indicarea sursei in acele vremuri era o chestiune de pedanterie.
Cu trecerea timpului cei care se ocupau de standardele limbajului FORTRAN au cautat sa includa facilitati noi, rezultate din intreaga evolutie a limbajelor de programare, datorata salkturilor spectaculoase de la nivelul hardware in care viteza de calcul si capacitatea memoriilor externe, cresteau cu viteze ametitoare. Asa a aparut acel limbaj FORTRAN77, care insa nu s-a impus chiar daca limbajul de baza era cum ar zice un cantaret de doine, pe buzele tuturor.
In anii 1984 si 1986, un colectiv puternic de specialisti de la ITC Cluj-Napoca, format din Teodor VUSCAN, Sanda CHERATA, Smaranda DERVESTEANU, Andrei ENYEDI, Ioan VESA si Lidia MOLDOVAN, au elaborat un Manual de programare (169pg) si un Manual de operare (146pg) pentru a permite implementarea resurselor limbajului FORTRAN 77, sub sistemul de operare MIX instalat pe miniocalculatoarele romanesti din seria Independent, I-100. Sunt luate cuvintele cheie ale limbajuljui si sunt date explicatii exact cum se face la o documentatie tehnica, incluzand si exemple acolo unde este cazul. Sunt date o serie de detalii tehnice absolut necesare definirii proceselor de alocare a resurselor si depanarii eficiente a programelor. Folosind tabele si reprezentari grafice se obtine un mod precis de specificare a modului in care se realizeaza la nivel fizic toate reprezentarile si alocarile.
Urmarind literatura legata de limbaje de programare, am vazut ca exista loc si pentru tratarea aspectelor de design pentru limbaje de programare. Am analizat limbajul de programare din punct de vedere al designului. Rezultatele la care am ajuns am gasit de cuvinta sa le trimit la cei ce se ocupau de standardul acestui limbaj. De aceea am scris o scrisoare in care cautam sa aduc niste modificari legate de instructiunea DO.
Introduceam forma in care aparea si o a doua eticheta, ceea ce permite scrierea secventei repetitive in alt loc din program. Daca limbajul accepta numai structura:
DO e1 var=vi,vf[,r]
..................
e1 CONTINUE
propunerea mea de atunci era:
DO e1 [-e2] var=vi,vf[,r]
..............
e1 instructiune
..................
e2 instructiune
Am primit si raspuns la scrisoare dar nu mai stiu unde este acesta. Stiu numai ca ei au fost foarte civilizati, chiar daca stiau ca ceea ce scriam eu acolo nu era ceea ce asteptau ei. Nu am nicio scuza, dar in monotonia in care traiam, incercarile mele erau chesii izolate, exact cum vedeam eu, fara sa fac parte dintr-o echipa de elita asa cum aveau matematicienii. Am fost eu cu mine unsumi si atat. Am facut ceea ce credeam sau mai pe romaneste, ceea ce ma taia capul.


Programarea in COBOL a insemnat un altfel de a programa, intrucat rigiditatea limbajului impunea o ordine in intreaga activitate, mai ales ca lucrul cu fisier insemna mult in acele vremuri. A pierde date insemna o mare catastrofa, cartelele perforate, banda magnetica si mai ales discul erau insotite de riscuri in utilizare. Aparitia cartii scrisa de Margareta DRAGHICI a insemnat o revolutie pe piata, in primul rand ca lumea nu stia despre acest limbaj multe lucruri iar constructorii de compilatoare COBOL erau foarte zgarciti in a dezlega mistere. Ceva mai tarziu, cand si invatamantul superior s-a aliniat utilizarii limbajului a aparut o avalansa de lucrari, dar editurile s-au dovedit reticente, tirajele la cursuri universitare nedepasind 300 - 400 de exemplare.
Colectivul de la Cluj, format din Vasile PETEANU, Sabin GORON, Geza VENCZEL si Ioan MOLDOVAN, a realizat in 1976 o culegere de probleme de COBOL, extrem de bine construita. Autorii au prezentat mai intai filosofia de programare in limbajul COBOL care presupune rigoare, gestiune de date si mai ales constructii complete, diviziuni, extiuni si secvente de instructiuni. Sunt descrise instructiunile limbajului, in ordine alfabetica, dupa care se trece la detalierea lucrului cu fisiere. Un capitol distinct este destinat lucrului cu programele utilitare ce au menirea de a creste complexitatea prelucrarilor pentru aplicatii dezvoltate in acest limbaj. Cei trei, excelenti practicieni au venit in paginile acestei carti cu numeroase secvente sugestive de program, astfel incat cu mici adaptari, programatorii care doresc sa dezvolte propriile lor aplicatii sa scrie programe performante din start.
Sunt date enunturi de probleme, fiecare problema fiind codificata, iar de la codul problemei rezulta codul asociat programului. Pentru fiecare problema este dat un enunt, sunt descrise variabilele utilizate, se prezinta algoritmul ce se va implementa, este prezentata schema logica si textul sursa asa cum este tiparit de omprimanta calculatorului. De asemenea, autorii arata separat ce rezultate se imprima dupa rularea programului. In tottal sunt oferite cititorului 31 de probleme cu solutii cu tot. La final sunt date solutii unor probleme, astfel incat prin analiza schemelor logice date si textelor sursa asa cum apar ele de la imprimanta calculatorului Felic C-256, programatorii incepatori au toate elementele de a exploata si isiere indexate (pg 323 - 339)
In 1993, cand inca acest limbaj era inca in voga, a fost publicata o lucrare ce presupunea cunoasterea notiunilor de baza ale limbajului COBOL intrucat incepea cu utilizarea de subprograme, aborda problematica formnatarii ecranelor, lucru cu fisiere secventiale, fisiere indexate si fisiere relative. Se continua cu tratarea erorilor, editarea de rapoarte, dezvoltarea de programe COBOL trecand prin compilare, editare de legaturi si executie. Sunt date si anexe ce permit manipularea corecta a optiunilor implementare in mediul de programare destinat lucrului in COBOL profesional.
A existat si ideia de instruire individuala, adica de a invata de unul singul programare. In acest sens a fost conceputa lucrarea de invatare a limbajului COBOL fara profesor. Cartea este conceputa astfel incat cititorul:
- sa lucreze singur
- sa scrie rapid un prtogram
- sa deprinda facilitatile limbajului in mod progresiv
- sa aiba numeroase exemple sugestive
- sa utilizeze textele sursa existente, pe care sa le adapteze pentru a-si rezolva propriile probleme
- sa parcurga etapele ciclului de edzvoltare programe COBOL din aproape in aproape, de la simplu, spre complex.
Cartea este dovada experientei indelungate a autorilor in practica scrierii de programe COBOL in scopul de a rezolva problemele concrete pentru diferiti beneficiari din industrie. Tine seama de particularitatile proceselor de autoinstruire. Acum, in conditiile produselor multimedia, analistii acestei carti vor vedea ca efortul de a realiza o aplicatie de instruire asistata transpunand cartea, necesita un minimum de efort.
Cu timpul, cei care s-au ocupat de acest limbaj au cautat sa-l modernizeze, pana la a introduce clase si deci a dezvolta tehnici de programare orientata obiect si in COLOL Desi e la mare cautare in vest, limbajul COBOL este considerat pe plaiurile noastre cele mioritice ca fiind un limbaj vestust si scot gologani zdraveni niste firme care instruiest programatori in asa ceva, iar mediul academic vorbeste in varful limbii C# si Java si OOP si cate si mai catenoutati. E proverbul ca daca n-ai batrani sa-i cumperi ceea ce aici s-ar traduce ca daca nu te uiti si inapoi un pic, pierzi mult.

Programarea in Pl/1 nu a prea prins in Romania, in principal pentru faptul ca nu existau nenumarate compilatoare, iar software de baza al calculatorului FELIX C 256, nu-mi amintesc sa fi avut un asemenea compilator. Mai mult, limbajul, elegant in felul lui, care deschidea portile spre programarea structurata, avea elemente greoaie in ceea ce priveste lucrul cu fisierele, iar programatorii COBOL nu aveau cum sa depuna eforturi sa implementeze ceva pentru care cu greu gaseau corespondente in sintaxa acestui limbaj. De moft, am realizat si eu cateva programe in Pl/1 insa am abandonat, spre rusinea mea, din rutina care ma coplesise in a scrie cu viteza programe FORTRAN, reutilizand la greu subprogramele din bibliotecile proprii, construite in timp. Chiar daca programele scrise in Pl/1 erau superbe, egoismul practicii m-a departat iremediabil de a-l utiliza. Nu fac aprecieri legate de ceea ce au facut ceilalti programatori, dar in Centrul de Calcul unde imi desfasuram activitatea de cercetare, in discutiile cu colegii programatori, nu am auzit frecvent lumea sa se laude ca frecventeaza resursele acestui limbaj. Despre literatura scrisa aici nu-mi amintesc, de asemenea, sa fi avut in biblioteca vreo carte scrisa de un autor roman serios pe asa ceva.

Programarea in Pascal s-a impus la noi dupa Revolutie din 1989. Exista un compilator parca pentru I 100 de Pascal dar lumea tot ceea ce stia utiliza, adica limbajul COBOL si limbajul FORTRAN, chiar si in variantele conversationale. Cartea lui Niklaus Wirth pe care am avut-o intr-o copie xeroxata Algorithms + Data Structures = Programs, arata un limbaj frumos construit, care desi avea cate ceva din limbajul ALGOL, era altceva pentru ca:
- avea o simplitate a lui
- existau niste biblioteci de subprograme, foarte bogate
- functiile de citire/scriere erau frumoase
- permitea implementarea lejera a programarii structurate
- se defineau structuri de tip articol
- accepta expresii complexe cu diferite tipuri de operatori
- se lucra cu pointeri
- autoreferirea era operationala
- permitea recursivitate pe mai multe niveluri
- avea o sintaxa perfecta
- cartile aveau numeroase exemple pe toata aria de aplicatii
- lucru cu fisiere nu era o povara
- compilatoarele erau complete, acoperind tot ceea ce se zicea in prezentarea limbajului.
Inca din 1987 Robert Jourdain a elaborat o carte de PASCAL. Lucrarea e conceputa pe capitole ce abordeaza probleme precum:
- utilizarea bibliotecii de subprograme
- elemente de hardware
- gestiunea memoriei interne
- manipularea sirurilor ce privesc timpul si data calendaristica
-lucru cu caractere
- operatii cu siruri de caractere si cautare
- introducere date, afisare si formate
- lucru cu fisiere.
Au fost identificate cuvinte cheie utilizate curent in activitatea de programare si acestea sunt utilizate in descrierea secventelor din carte, astfel incat daca cititorul doreste sa vada o solutie la o problema, identifica mai intai unde se afla respectiva problema, apoi folosind un sistem usor de cautare identifica paragraful si pagina unde se afla exact ceea ce cauta. Asa ca acest limbaj a avut un grad de cuprindere foarte ridicat, in industrie, in mediul academic dar si in liceele de informatica. Materialele aparute aratau ca pe calculatoarele personale, din anii '90 se programa numai in Pascal, ceva mai tarziu s-a insistat pe limbajul C. Mai mult, odata cu implementarea facilitatilor de programare orientata obiect in limbajul Pascal, parca mai mult lumea programatorilor a persistat in a dezvolta aplicatii, folosindu-l cu insistenta.
Cartea de structuri de date si culegerea de probleme realizate de mine impreuna cu colegul Romica ADAM a inclus toate aplicatiile in limbajul PASCAl, ceea ce a determinat includerea in titlu a denumirii limbajului.
Un colectiv larg de autori din Departamentul de Informatica Economica, a publicat in anul 2003, o lucrare interesanta in care au fost prezentate modalitati de implementare a structurilor dinamice (liste, grafuri, arbori) si a recursivitatii, folosind resursele limbajului PASCAL, inclusiv a fisierelor si pentru a dezvolta aplicatii complexe, prin reutilizare accelerata, ultimul capitol este edstinat implementarii obiectelor.
In 1993 a fost scrisa o lucrare ce contine exact ceea ce are nevoie cineva ce doreste sa inceapa sa scrie programe in limbajul PASCAL, cat mai repede posibil. Textul este:
- clar
- contine imagini sugestive
- enunturile sunt pentru probleme clasice, cunoascute
- subnt date rezolvari
- se comenteaza solutiile
- instructiunile sunt prezentate folosind diagrame de descriere cu care se genereaza constructii si se verifica daca sunt corecte scrierea BNF
- se implementeaza programarea structurata
- sunt darte capturi de ecran
-se prezinta texte, scheme logice structurate, se comenteaza si se analizeaza instructiunile folosite
- anexa da elemente de algebra Boole si de codifidcare date .
De asemenea, este realizata o abordare noua a resurselor limbajului PASCAL, dupa trecerea in revista a tipurilor de date si expresii, a implementarii structurilor fundamentale de control. Sunt prezentate modalitati de a lucra cu variabile pointer, cu fisiere si cu subprograme. Este important ca sunt definite capitole in care autorii dezvolta modalitati de lucru cu structuri dinamice, liste, stive si arbori. Exista capitole destinate abordarii visuale a lucrului in PASCAL dar si de lucru cu obiecte. Autorii rezerva ultimul capitol al cartii tehnicilor de reacoperire, a ltratarii intreruperilor dar si de depanare a programelor complexe.
A fost scrisa si o lucrare care trateaza prelucrarea fisierelor in PASCAL este structurata in asa fel incat sa cuprinda probleme precum:
- organizarea externa a datelor, lucru cu care programatorii sunt obisnuiti de la limbajul COBOL in principal
- structura de data de tip articol, organizata pe niveluri
-definirea conceptelor de fisier logic si fisier fizic
- lucru cu fisiere text
- lucru cu fisiere stocate pe discuri
- operatii de creare, validare, prelucrare a fisierelor.
Experienta practica a autorilor in programare, proveniti din lucrul in limbajul COBOL a condus la o abordare completa a problemei. Tipurile de probleme enuntate si solutiile date sub forma de texte sursa si explicatii, au aratat ca limbajul PASCAL permite dezvoltarea de aplicatii complexe in care organizarea si mai ales regasirea articolelor dupa chei se realizeaza intr-o maniera eleganta.


Programarea in C a luat o amploare speciala mai ales dupa '90, cand s-a deschis piata de achizitii masive de tehnica de calcul adevarata si dupa ce au aparut calculatoarele personale compatibile IBM in tara noastra si compilatoarele Turbo C si-au dovedit performanta, desi Brian W. Kernighan si Dennis M. Ritchie, scrisesera cartea lor C Programming Language inca din 1978. Si pe calculatorul I 100 existent in ASE se rulau programe scrise in limbajul C, numai ca modul in care se facea introducerea de texte sursa, creea o serie de dificultati, greu de invins.
Acest limbaj s-a impus prin in lumea practicienilor:
- existenta de medii de dezvoltare extrem de performante
- facilitatile oferite
- nivelul de generalitate admis pentru constructii
- capacitatea de a construi expresii agregate
- bibliotecile de programe extrem de bogate
- acceptarea de noi facilitati in mod natural
- usurinta de a invata regulile limbajului
- implementarea naturala a programarii structurate
- utilizarea cu ususrinta a blocurilor delimitate prin { si }
- vocabular restrans de cuvinte cheie
- existenta a numeroase carti ce contin exemple de larga utilizare
- flexibilitatea in abordare
- acceseul la cuvant, bait si bit
- considearea operatorilor de definire si referire, ca oricare alti operatori
- posibilitatea de a face orice tipologie de constructii prin agregare de operatori
- includerea si asimilarea naturala a tot ce se poate gandi despre clase si operatii cu acestea
- realizarea cu usurinta a programelor modulare
- asigurarea reutilizarii prin includere
- gandirea programului principal tot ca o componenta
- orice isi doreste programatorul, gaseste in limbajul C.
Au aparut nenumarate carti de programare in limbajul C.
Colectivul de baze ale programarii calculatoarelor din Catedra de Informatica Economica a realizat si publicat in 2006 o lucrare destinata studentilor din primii ani ai sectiei de Informatica Economica din Facultatea de Cibernetica, Statistica si Informatica Economica. Dupa ce face o trecere in revista a elementelor legate de calculatoare, de organizarea datelor si de prezentarea algoritmilor, autorii evidentiaza: - etapele dezvoltarii unei aplicatii - tipuri de adte in limbajul C - expresii, pornind de la operatorii existenti - functii destinate asigurarii citirii si scrierii/ afisarii adtelor - structuri de control (if(), for(), while(), do - while, switch() subprograme si functii. Ultimul capitol 187 - 250 este destinatprezentarii unor tipuri de exercitii foarte des intalnite in care apar expresii aritmetice, structuri de adate omogene cu alocare statica in memorie precum vectorii si matricele. Modul in care este constrita cartea arata ca autorii au derulat mai multe cicluri de instruire a studentilor folosind resursele limbajului C, astfel incat toate afirmatiile sust sustinute de secvente concrete si reprezentative de program.

Programarea in C++ O varianta este constituita de limbajul Turbo C++, datorata implementarii printr-un mediu de programare care spargea o serie de bariere,legate de iterativitate, alocari dinamice, biblioteci de functii si recursivitate.
In anul 1995 profesorii Ion SMEUREANU, Marian DARDALA si Ion IVAN au editat o culegere de probleme de programare in limbajele C si C++, care reflecta preocuparile acestora de a indruma studentii spre aprofundarea domeniului. Toate programele au fost testate in prealabil, lucru destul de rar intalnit, intrucat autori cu staif au publicat texte sursa cu probleme de-a lungul timului... Cartea a fost o sursa buna de inspiratie pentru numerosi autori de carti de C++, fara a fi citata in bibliografia lucrarilor acestora.
Au aparut nenumarate carti de programare in limbajul C.
Pe aceeasi linie se inscrie lucrarea destinata celor care doresc sa utilizeze eficient resursele limbajului C++, cu luarea in considerare a pointerilor, a structurilor dinamice destinate lucrului cu liste, arbori si grafuri in conditii de dezvoltare de clase. Sunt date numeroase functii care implementeaza operatii pe structuri de date dinamice, in forme concentrate, in care recursivitatea este un lucru natural si obisnuit.
Cartea din 2007 de C/C++< abordeaza:
- abordeaza lucrurile pornind de la concepte de baza
- e bazata pe experienta autorilor
- permitescrierea rapida a unui program
- abunda de texte sursa
- problemele sunt sugestive
- se comenteaza alegerea instructiunilor
- contine programe complete
- are un capitol de intrebari
- are un capitol cu raspunsuri
Anexa cu indexul arata cuvantul si pagina unde se gaseste ( cuvinte cheie, instructiuni, operatori, concepte, definitii, functii de biblioteca):
- la fiecare capitol arata care sunt problemele ce se trateaza
- abordarea este omogena
- presupune cunostinte de programare
- facilitatile sunt prezentate clar
- arata cum se face cu adevarat programare orientata obiect.

Programarea in C# eswte la mare cautare pentru ca:
- a preluat intreaga experienta data de programarea in C++
- permite realizarea de programe extrem de complicate prin reutilizare
- nivelul de complexitate este definit de programator
- daca programatorul n-a depasit stadiul de a scrie secvente C limbajul le accepta
- programele sunt mult mai compacte
- diversitatea bibliotecilor acopera cam tot ceea ce e necesar ca operatii de baza
- programatorii agreaza lucrul in mod procedural
- calitatea programelor este asigurata daca totul este joc de transmitere si preluare parametri
- performanta programului consta in a alege functii, nu in a scrie cod primar
- viteza de programare este cu totul alta, complexitatea programului fiind disproportionat mai mica decat complexitatea algoritmului
- constructiile sunt preponderent structuri liniare, concentrate.
Pentru ca este in trend, cartile de C# abunda, autorii intrecandeu-se in a scoate carti care sa valorifice nivelul de cerere al pietii. Este important ca acele acrti sa exprime si nivelul de experienta acumulat de autori, adica sa nu fie realizate doar pentru a umple un gol pe piata. daca acele carti depasesc stadiul stupidului program cu hello John! netradus in salut, ba, Ioane! tot e bine. Altfel, cu siguranta ca numai conditionarea de o promovare la un examen numai a celor care au cartea pe pupitru, va face sa se si vanda respectivele tomuri maculaturizate.
O carte extrem de interesanta contine:
- exemple de programe
- capturi de ecrane
- proceduri complete
- enunturi de probleme reprezentative
- solutii complete la problemele propuse
- texte sursa complete care arata ca autorii au rezolvat complet acele probleme si daca citorul le introduce si le ruleaza are garantia ca obtine ceea ce se specifica in enunturi
- comentarii si indicatii astfel incat sa se dezvolte noi aplicatii
- succesiuni de print screanuri specifice lucrului in programqarera visuala
- la fiecare capitol se prezinta ceea ce se face si ce resurse sunt necesare astfel incat cititorul selecteaza exact ceea ce are nevoie
- e bazata pe experienta autorilor
- abordarea este gradata si de la inceput cititorul are tot ceea ce trebuie ca sa scrie un program simplu
- citiorul trebuie sa cunoasca suficiente elemente de programare avansata, pentru ca lucrarea de la inceput intra in programare cu folosirea resurselor limbajului C# in cunostinta de OOP si C++.
C# este ceea ce programatorii buni iubesc cel mai mult.!


Programarea in JAVA eswte acel prilej absolut minunat de a scrie secvente de cod care sa fie integrate in aplicatii web, daca programatorul vrea acest lucru sau sa fie utilizate aiurea, de asemenei daca programatorul vrea sa dezvolte aplicatii pentru sine insusi sau pentru sine insasi.
Cine stie sa lucreze in limbajele C sau C++ va depune un efort extrem de scazut sa scrie secvente de cod in JAVA. Efortul vine din faptul ca acolo sunt definite nenumarate structuri de tip articol, fiecare variabila de acel tip derivat fiind utilizata pentru a face o prelucrare extrem de elaborata, in proceduri care printr-o simpla apelare ofera ceva la care un programator experimentat ar fi lucrat mult si bine. Totusi, pentru a fi eficienti, programatorii JAVA trebuie sa aiba in fata un tabel complet cu acele functii de biblioteca, grupate inteligent in raport cu un criteriu specificat si sa vada ce i se potriveste. Nu este suficient. Pentru a face ca totul sa mearga ca pe roate, programatoprul trebuie sa citeasca atent despre procedura, sa vada ce parametri are, sa vada cum se obtine rezultatu prelucrarii si sa defineasca variabile ca atare. Altfel se va chinui si ca spune ca altcineva este vinovatul, iar el nu va rezolva nimic. Un sfat este acela ca inainte de a scrie ceva, trebuie vazut daca nu exista cumva intr-o carte sau pe Internet secventa care executa ceea ce doreste respectivul programator sau ceva asemanator. daca exiswta, ea trebuie preluata si adaptata. Marii pictori nu stau sa prepare ei vopselele. le ciumpara din magazin. Ei le combina numai. ceea ce este extraordinar si asa ies marile opere de arta.


Programarea in PhP eswte o binefacere, intrucat sunt preluate elemente de la toate limbajele de programare. Cu mare usurinta un programator C++ va trece sa scrie secvente PhP pe care sa le integreze in aplicatiile lui web. Chestiunea este ca neexersand scrierea in PhP d componente, la o reluare peste timp, programatorul simte nevoia sa consulte carti pentru a relua rapid scrierea de instructiuni asa cum ii cere problema de rezolvant. dar nu mai mult de atat, daca aplicatiile web nu-l solicita in plus. Cert este ca pentru orice chestiune, va gasi fie in carti, fie pe Internet exact ceea ce are nevoie, programatorul trebuind numai sa adapteze, la nevoile lui, ceea ce exista, fara a fi extrem de creativ. Cu singura condeitie: ca secventa preluata sa fi fost publicata cu onestitate, fara a fi gresita.
Ceea ce este placut in programarea folosind PhP este strict legat de faptul ca se construiesc secvente elegante si alternarea cu ceea ce ofera HTML este simpla, numai prin delimitatori de final de PhP si, respectiv, de start pentru a marca intrarea in secvente PhP. Restul e parfum.


Programarea in HTML a cunoscut o mare dezvoltare datorita usurintei cu care se invata limbajele de dezvoltat aplicatii web dar mai ales datorita disproportiei dintre cerere si oferta, aceasta din urma fiind foarte mica, ceea ce a condus la oferte de preturi foarte mari pentru aplicatii modeste in ceea ce priveste complexitatea.
Profesorul Bogdan ONETE a elaborat o lucrare extrem de interesanta in zona designului de aplicatii web.
Au aparut foarte multe nenumarate carti de programare in HTML.
Insa multe carti sunt parca elaborate dupa un sablon. De aceea sunt utile lucraruile gen Biblie a HTML pentru ca includ cam totul despre mediul de dezvoltare a aplicatiilor web. daca se ia problema construirii de tabele se va vedea ca toate cartile au numai forma simpla de tabel. In realitate, exista tebele structurate, cu grupari de coloane, cu grupari de linii, cu schimarari de numar de coloane si de linii, exact asa cum cer aplicatiile din mediul real, iar ROWSPAN si COLSPAN rezolva elegant situatiile, numai ca. Tot asa se pune problema realizarii introducerii si extragerii d date din fisiere. Aplicatiile exemplificative din carti sunt ambigue si rareori spun exact ceea ce trebuie pentru a prelua parametri dati de client. Trist dar foarte adevarat. sa plangem, dara...


                                                                                                                                *

                                                                                                            *                                            *
Am tinut in mana masiva carte Programming Languages: History and Fundamentals scrisa de Jean E. Sammet si publicata in 1969 in editura Prentice-Hall, avand ISBN 0-13-729988-5. Cartea fusese donata Bibliotecii Centrului de Calcul al ASE de catre editura cand a avut o expozitie gratie eforturilor lui Manea Manescu, profesor care stia foarte bine care este directia de mers in zona informaticii, adica lucrul cu cei foarte mari si foarte buni din domeniu.
M-a impresionat ce se gasea in zona limbajelor de programare dar se vedea ca tehnica, adica dispozitivele de memorare si chiar unitatea centrala trebuie sa evolueze mult mai mult pentru a tine pasul cu ceea ce se gandea in plan teoretic in zona proiectarii de limbaje. Pana a se dezvolta tehnicile de compilare si mai ales pana a se obtine acele tehnici de programare care sa permita scrierea de programe de peste 40.000 linii sursa dar si fara cusur, a trebuitg sa mai treaca ani buni. Iata ca ceea ce era numai pe hartie, acum este realitate. Sunt asteptate ideile revolutionare in zona limbajelor si cat ai clipi, ele vor fi puse in opera. Asa este viata. cand nu te astepti, ramai de caruta.
Viata le impune programatorilor sa lucreze in diferite limbaje de programare in aceeasi perioada de timp sau la intervale de timp. Tehnica invatarii limbajelor de programare prin comparatie a inspirat pe multi autori sa scrie carti cu prezentarea limbajelor folosind un sablon, sun forma unui tabel unde pe linii apar caracteristicile limbajelor (alfabet, reguli construire identificatori, tipuri de variabile, reguli de sintaxa, comentariile, vocabularul cuvintelor cheie, operatorii, expresiile, instructiunile de control pentru implementarea structurilor fundamentale, subprograme, fisiere, instructiuni de intrare/iesire, alocare dinamica, recursivitate si cate si mai cate. Cine gaseste o astfel de carte serios construita, clar ca va stapani cu rapiditate limbajul dorit si va sti unde sa caute cand are o mare nevoie de a scrie o anumita secventa eficienta de program.
Autorii, WILSON si CLARK, pornesc de la faptul ca in cazul tuturor limbajelor trebuie specificate:
- tipurile de date, tipurile de variabile si reprezentarile lor
- tipuri de date derivate
- specificarea modului de construire identificatori
- definirea listei de operatori si prioritatile acestora
- construirea de expresii
- parametrii si mecanisme de transmitere
- strtucturi de subprograme
- structuri de date
- concurenta si recursivitatea
- operatii de intrare / iesire
- limbaje de programare functionale
- limbaje de programarelogice
- viitorul limbajelior de programare.
Tratarea aceasta permite familiarizarea programatorilor cu modul dea invata noi limbaje prin cunoasterea diferentelor fata de limbajele de programare existente.