Drumul meu în cercetare. Anii ’70
De la intrarea în Catedra de Calculatoare la primele proiecte software, la portabilitate, la experiențele cu SISIF, BCPL, STAGE-2, Janus, LPTR și la conturarea temei de doctorat.
Această pagină este lectura cronologică și memorialistică a începuturilor mele în cercetare. Ea completează secțiunea Cercetare, care este organizată pe domenii și pe axe conceptuale. Aici accentul cade pe context: oameni, instituții, laboratoare, calculatoare, proiecte, încercări, blocaje și ideile care au început să se lege între ele.
În secțiunea de cercetare propriu-zisă, lucrările sunt prezentate pe domenii. În această pagină, același material este privit narativ, ca parte a memoriilor: cum am intrat în domeniu, ce am învățat din fiecare proiect și cum s-a format treptat direcția mea de cercetare.
Intrarea în lumea calculatoarelor
Uneori mă întreb când a început, de fapt, drumul meu în cercetare. Nu există un moment precis, o zi care să fi însemnat o alegere conștientă și definitivă. A fost mai degrabă o curgere lentă, împinsă de nevoia de a înțelege, de a structura și de a aduce ordine într-un domeniu care, la început, mi se părea mai degrabă tehnic decât intelectual.
Am ajuns la Facultatea de Energetică dintr-o alegere în mare parte pragmatică. După primul an, am fost selectat pentru noua secție de Automatică, înființată în 1962, iar această mutare a fost, privind înapoi, una dintre acele întorsături de destin care schimbă discret o viață întreagă. În ultimii ani de studii am urmat cursuri de calculatoare analogice și digitale, iar lucrarea mea de diplomă, coordonată de Ivan Sipoș, a avut ca temă proiectarea unui calculator numeric de birou.
În România anilor ’60, într-un peisaj tehnologic modest și rigid, calculatoarele aveau pentru mine farmecul unor lumi artificiale, ordonate după reguli mai clare decât realitatea imediată. Proiectul de diplomă m-a apropiat de hardware, dar nu hardware-ul avea să-mi definească drumul. După repartizarea la Fabrica de Elemente de Automatizare și după experiența detașării la Electromagnetica, am început să caut o ieșire spre un domeniu mai apropiat de preocupările mele intelectuale.
Legătura cu Ivan Sipoș a contat decisiv. El a vorbit cu profesorul Cornel Penescu, iar eu am ajuns să dau concurs pentru un post de asistent. În acel moment, Politehnica trecea prin transformări importante: secția de Automatică devenise Facultatea de Automatică, iar apoi, în contextul creșterii importanței informaticii, se contura Facultatea de Automatică și Calculatoare, cu o nouă Catedră de Calculatoare.
Catedra de Calculatoare și schimbarea de direcție
Am intrat în Catedra de Calculatoare în anul 1970, la scurt timp după înființarea ei, sub conducerea conferențiarului Mircea Petrescu. La început, viitorul meu părea să fie legat de proiectarea de calculatoare, în prelungirea lucrării de diplomă. Dar în paralel urmam cursurile Facultății de Matematică, specializarea Mașini de calcul, iar acolo accentul cădea tot mai mult pe programare, limbaje și fundamente.
Această a doua formare a fost decisivă. Ea mi-a arătat că software-ul nu este doar o anexă a mașinii, ci un domeniu în sine, cu propriile lui concepte, modele și probleme. Când în Catedra de Calculatoare s-a pus problema demarării unor proiecte software, am aderat cu entuziasm și am abandonat fără regrete direcția inițială a proiectării hardware.
De aici începe, de fapt, primul meu fir coerent de cercetare: încercarea de a înțelege cum poate fi eliberat programul de dependența excesivă față de mașina concretă și cum pot fi construite instrumente care să facă programarea mai riguroasă, mai portabilă și mai accesibilă.
Descătușarea software-ului
Privind înapoi, prima mea mare bătălie în informatică a fost bătălia pentru descătușarea software-ului din dependența față de hardware. În anii ’70, lumea calculatoarelor era împărțită în fortărețe izolate: fiecare sistem de calcul își avea limbajele, convențiile, reprezentările și limitele lui. Un program scris pentru o mașină era, de cele mai multe ori, prizonierul acelei mașini.
Limbajele de nivel înalt — FORTRAN, COBOL, LISP, ALGOL 60 și altele — deschiseseră deja o punte peste această fragmentare. Ele permiteau formularea algoritmilor într-o formă mai apropiată de gândirea umană și mai puțin dependentă de codul de asamblare. Dar portabilitatea reală era încă departe. Recompilarea, diferențele de sistem de operare, reprezentările interne și lipsa unor standarde stabile mențineau programul legat de platforma pentru care fusese născut.
Pentru mine, problema portabilității nu era doar tehnică. Ea avea o semnificație metodologică: dacă un program exprimă o idee, atunci acea idee ar trebui să poată traversa mașinile, generațiile tehnologice și circumstanțele concrete ale implementării. Această intuiție va reveni mereu în activitatea mea ulterioară.
O pasiune pentru sisteme formale
La Facultatea de Matematică a Universității din București, cursurile de limbaje de programare și contactul cu teoria limbajelor formale m-au atras decisiv. ALGOL 60, BNF, gramaticile Chomsky și semantica limbajelor au schimbat felul în care priveam programarea. Nu mai era vorba doar de a scrie programe care funcționează, ci de a înțelege limbajele ca obiecte formale și ca instrumente de construcție intelectuală.
În 1972, am început să frecventez cursurile serale de Teoria automatelor ținute de profesorul Grigore Moisil. Am păstrat amintirea drumurilor de după curs, când îl conduceam încet pe bulevard, discutând despre o mulțime de subiecte. Era una dintre acele întâlniri rare în care ideile nu rămân în sala de curs, ci continuă pe stradă, în mers, în conversație.
Moisil m-a îndemnat să scriu primul meu articol, plecând de la lucrarea mea de diplomă la Matematică, dedicată semanticii limbajelor de programare prin Metoda Viena. Articolul nu a ajuns la publicare. O critică matematică dură, legată de o definiție circulară, m-a descurajat atunci. Privind înapoi, înțeleg că acel eșec a fost și el formativ: m-a învățat că intuiția nu este suficientă, că forma trebuie dusă până la capăt, iar rigoarea nu iartă entuziasmul incomplet.
Programul PNUD–UNESCO și infrastructura de calcul
Între 1969 și 1973, catedra noastră a beneficiat de un program PNUD–UNESCO destinat specializării personalului didactic în domeniul tehnicii de calcul. Sprijinul Universității Tehnice din Darmstadt a fost esențial. Am primit calculatoare IBM 1130 și IBM 1401, precum și un minicalculator HP 2116 B. Pentru noi, acestea nu erau simple echipamente, ci intrări concrete într-o lume tehnologică pe care România abia începea să o construiască.
În paralel, Centrul de Calcul al Universității București, creat în jurul profesorului Moisil și dotat cu un IBM 360/30, devenise un focar de cultură informatică. Acolo s-au format mulți dintre cei care aveau să conteze în primele decenii ale informaticii românești. La Politehnică, primirea calculatorului FELIX C-256 a permis trecerea la o activitate didactică și practică mai consistentă.
În 1973, împreună cu Petre Dimo și cu sprijinul altor colegi, am început să predăm Programarea calculatoarelor în FORTRAN. Numărul programelor trimise la Centrul de Calcul a crescut rapid, iar ciclul cartele perforate – execuție – eroare – corectare devenise anevoios. Din această nevoie practică s-a născut proiectul SISIF.
SISIF și programarea conversațională
SISIF a fost conceput ca un sistem conversațional orientat FORTRAN, cu acces multiplu, destinat verificării și corectării programelor înainte de perforarea lor pe cartele. În loc ca studentul să descopere erorile abia după un ciclu lung de prelucrare, ideea era ca programul să fie introdus și verificat interactiv, linie cu linie, de la consolă.
În cadrul proiectului, m-am ocupat împreună cu Florica Moldoveanu de analizorul sintactic FORTRAN. Din păcate, lipsa unei descrieri formale a sintaxei FORTRAN m-a împiedicat să folosesc pe deplin instrumentele teoriei limbajelor formale, deși tocmai acestea mă atrăgeau cel mai mult. A fost prima mea confruntare concretă cu distanța dintre eleganța formală și realitatea tehnică a unui limbaj utilizat efectiv.
SISIF a fost important nu numai ca proiect didactic, ci și ca deschidere spre probleme de time-sharing, procese paralele, sincronizare și interacțiune om-calculator. Dintr-o nevoie foarte practică — economisirea cartelelor și reducerea ciclurilor de corectare — se năștea un câmp de întrebări teoretice.
Intrarea la doctorat
În 1973 am intrat la doctorat sub îndrumarea lui Mircea Petrescu. Titlul stabilit pentru teză a fost „Implementarea unui limbaj pentru un sistem interactiv de prelucrare a datelor”. Inspirația venea din preocupările profesorului Louis Bolliet de la Universitatea din Grenoble, expert în cadrul programului PNUD, și din interesul pentru interacțiunea om-calculator.
Având în vedere formația mea matematică, direcția cercetării părea firească: teoria limbajelor formale, compilatoare, sintaxă, semantică și sisteme interactive. În realitate, teza avea să fie împinsă adesea în plan secund de cursuri, contracte, proiecte și obligații instituționale. Dar tocmai această presiune a realității a făcut ca tema să se maturizeze în contact cu probleme concrete.
ALGOL 60 și ideea compilatorului conversațional
ALGOL 60 era un limbaj apărut înaintea timpului său. Blocurile, domeniile de valabilitate, recursivitatea, funcțiile îmbricate și definirea sintaxei prin BNF îl transformaseră într-un reper teoretic major. Nu era un limbaj comod pentru aplicațiile comerciale ale epocii, dar era un limbaj prin care informatica învăța să se gândească pe sine.
Un compilator conversațional pentru ALGOL 60 presupunea destructurarea procesului clasic de compilare. Analizorul sintactic trebuia să poată lucra incremental, să memoreze contextul fiecărei sesiuni, să gestioneze mai mulți utilizatori și să ofere mesaje de eroare suficient de precise pentru corectarea online a programelor. Pentru o singură persoană, era un proiect prea ambițios.
Chiar dacă nu am ajuns la implementarea completă a unui astfel de compilator, tema a fost fertilă. Ea m-a obligat să mă gândesc la relația dintre limbaj, mediu de programare, utilizator și procesul de dezvoltare. În această tensiune dintre ideal și realizabil s-au format multe dintre întrebările care vor reveni mai târziu în cercetările mele de inginerie software.
Portabilitatea programelor
Pe fundalul experiențelor cu SISIF s-a construit primul fir coerent al cercetării mele: portabilitatea programelor. Într-un context dominat de incompatibilități între mașini, portabilitatea era încercarea de a acorda software-ului un statut mai liber, capabil să migreze de la o arhitectură la alta fără rescriere integrală.
În jurul acestei idei s-a format treptat un mic colectiv de colegi și studenți. Problemele de laborator, aparent concrete și limitate, au început să se transforme în articole. Am încercat să definim ce înseamnă portabilitatea, ce obstacole tehnice o limitează și ce metode pot fi folosite pentru a o obține: cod intermediar, mașini abstracte, interpretoare, bootstrap, macroprocesare.
- I. Athanasiu, M. Necula, L. D. Șerbănați, „Program Portability”, 1975.
- L. D. Șerbănați, M. Cosma, C. Popescu, M. Necula, „BCPL – a Language for Program Writing”, 1976.
- L. D. Șerbănați, „Metode și tehnici de asigurare a portabilității programelor”, 1977.
- I. Athanasiu, M. Necula, L. D. Șerbănați, M. Cosma, C. Popescu, „Comparative Study of some BCPL Compilers”, 1978.
BCPL, INTCODE și prima școală de portabilitate
BCPL, limbajul creat de Martin Richards la Cambridge, a fost pentru noi o revelație. Conceput ca limbaj procedural, structurat și ușor de implementat, BCPL avea o importanță care depășea utilizarea lui imediată: anticipa, prin simplitate și prin mecanismele de implementare, o întreagă cultură a portabilității. Din el se va naște, prin limbajul B, limbajul C.
În 1974, Mariana Necula a adus din Anglia, pe bandă perforată, sursa compilatorului BCPL într-o formă destinată portării. Ideea centrală era folosirea unui cod intermediar — INTCODE — și a unui interpretor mic, scris pentru mașina-țintă. Prin această procedură de half-bootstrap, compilatorul putea fi adus rapid pe o platformă nouă, înainte de existența unui generator de cod nativ.
Pentru calculatorul FELIX a trebuit să implementăm interpretorul INTCODE. Această sarcină, aparent modestă, a avut pentru mine o importanță conceptuală majoră: un program scris într-un limbaj abstract putea prinde viață într-un mediu tehnic complet diferit, dacă exista stratul minim capabil să-i interpreteze forma intermediară. Portabilitatea nu mai era un slogan, ci o tehnică efectivă.
În jurul BCPL-ului s-a format un mic atelier de lucru. Studenți și colegi au participat la implementare, testare, comparații între compilatoare și redactarea de articole. Din această experiență s-a născut o cultură de laborator în care construcția de software, analiza formală și publicarea rezultatelor se alimentau reciproc.
Privind în urmă, BCPL și INTCODE au reprezentat prima mea întâlnire serioasă cu ideea de mașină abstractă ca instrument de eliberare a programului de mașina fizică. Această idee va reveni, într-o formă mult mai matură, în lucrările mele ulterioare despre proiectarea sistematică a produselor software.
STAGE-2 și macroprocesarea
În aceeași perioadă am intrat în contact cu STAGE-2, macroprocesorul universal dezvoltat de W. Waite. Dacă BCPL și INTCODE reprezentau direcția codului intermediar și a mașinii abstracte, STAGE-2 aducea în prim-plan macroprocesarea ca instrument general de transformare a textelor și de construire a uneltelor software.
Un macroprocesor copiază un flux de intrare și produce un flux de ieșire, aplicând reguli de înlocuire, rescriere și generare. STAGE-2 ducea această idee la un nivel remarcabil de generalitate. Era independent de limbajul sursă și, în mare măsură, de platformă. Putea fi folosit pentru extensii de limbaj, generare de cod, configurare de programe și construcția de translatoare.
Am primit de la Waite o versiune universală și documentația necesară, iar împreună cu studenți foarte buni am realizat pe FELIX procedura de half-bootstrap. Din nou, portabilitatea apărea nu ca proprietate pasivă, ci ca proces activ: un nucleu minimal genera, prin transformări controlate, o versiune completă a instrumentului.
L. D. Șerbănați, R. D. Bercaru, D. F. Mânduțianu, „Specialized Macroprocessor for Software Development”, Automatics, Metrology, Computers, Vol. 27, pp. 103–115, 1978.
STAGE-2 a fost pentru mine o punte între portabilitate și viitoarele preocupări de inginerie software. Ideea de a transforma sistematic descrieri, forme intermediare și fragmente de program anticipa, într-un mod încă neformulat, interesul meu ulterior pentru procesul de proiectare ca succesiune de transformări controlate.
Janus și ideea limbajului intermediar
O experiență suplimentară cu portabilitatea mi-a fost oferită de Janus, un alt instrument propus de Waite. Janus era gândit ca limbaj simbolic pentru informațiile transmise de la faza de analiză a unui compilator către generatoarele de cod. În timp ce STAGE-2 era un macroprocesor general, Janus se apropia de ideea unui limbaj intermediar independent de limbajul sursă și de arhitectura țintă.
Tema implementării Janus i-am propus-o lui Dan Mânduțianu pentru lucrarea de diplomă. Implementarea a fost dusă la bun sfârșit, dar cercetarea nu a continuat pe măsura potențialului ei, deoarece alte proiecte au devenit urgente. Chiar și așa, Janus a consolidat în mintea mea importanța formelor intermediare și a infrastructurilor capabile să transporte sensul unui program dintr-un context tehnic în altul.
LPTR și maturizarea tehnică
În a doua parte a deceniului, preocupările pentru portabilitate și pentru teză au fost întrerupte parțial de contractul cu ICI pentru realizarea compilatorului LPTR — Limbaj Pentru Timp Real — pentru minicalculatorul românesc Independent, compatibil cu familia DEC PDP-11. LPTR era o variantă simplificată a limbajului RTL/2, destinat aplicațiilor în timp real.
Contractul prevedea realizarea unui compilator care urma să fie inclus în Biblioteca Națională de Programe. Colectivul de la Politehnică, condus de mine, a proiectat și implementat compilatorul. După modificări ale sintaxei, am adus limbajul la o gramatică LL(1), ceea ce a permis analiza sintactică descendentă. Gramatica a fost atributată pentru analiza semantică, iar generarea de cod s-a făcut în MACRO, limbajul de asamblare al minicalculatorului Independent. Compilatorul a fost scris în C.
Pentru mine, LPTR a însemnat o maturizare tehnică și managerială. Nu mai era vorba doar de un experiment de laborator sau de un instrument didactic, ci de conducerea unei echipe, de un produs care trebuia validat, livrat și integrat într-un circuit instituțional. Această experiență m-a pregătit, poate fără să-mi dau seama, pentru preocupările de mai târziu privind metodologia dezvoltării software și managementul proiectelor.
Bilanțul anilor ’70
Anii ’70 au fost fundamentali pentru identitatea mea de cercetător și profesor. Am trecut de la fascinația inițială pentru calculatoare la înțelegerea software-ului ca domeniu autonom, apoi la portabilitate, limbaje formale, compilatoare, macroprocesoare, sisteme conversaționale și proiecte tehnice cu finalitate concretă.
Privite separat, SISIF, BCPL, STAGE-2, Janus și LPTR par proiecte diferite. Privite împreună, ele alcătuiesc o singură direcție: căutarea unor forme prin care programul să devină mai liber, mai explicit, mai bine structurat și mai puțin dependent de circumstanțele hardware ale momentului. Acesta a fost nucleul primei mele perioade de cercetare.
În același timp, acești ani mi-au arătat limitele muncii individuale. Proiectele importante se fac cu oameni: colegi, studenți, mentori, tehnicieni, parteneri instituționali. Am început să înțeleg că cercetarea nu este numai o aventură intelectuală, ci și o formă de construcție colectivă.
În anii ’80, această experiență se va transforma treptat într-o preocupare mai largă pentru proiectarea sistematică a produselor software, pentru metode de dezvoltare, interformă, mașină abstractă și integrarea uneltelor. Dar rădăcina acestor preocupări se află aici, în anii ’70: în lupta cu cartelele perforate, cu calculatoarele incompatibile, cu limbajele greu de formalizat și cu dorința de a da software-ului o libertate mai mare decât îi permitea tehnologia momentului.
Vezi și: Fundamente ale informaticii • Limbaje formale • Compilatoare
Această pagină prezintă firul narativ al cercetării. Pentru organizarea pe domenii, articole și proiecte, vezi Cercetarea științifică.
← Înapoi la Memorii: 1970–1979 • Înapoi la Drumul meu în cercetare





