Valentin Gheorghiță, absolvent Universitatea Politehnica București, student doctorant Universitatea Tehnică din Eindhoven

Acum, dupa 8 ani, privesc in urma si incerc sa-mi dau seama la ce m-au ajutat olimpiadele. In primul rand, m-au facut sa vad lumea cu alti ochi. Am calatorit, am cunoscut oameni interesanti cu care am legat prietenii durabile. Si, mai mult ca orice, olimpiadele au constituit primii mei pasi in cariera de inginer informatician.

In primii ani de facultate ma intrebam la ce ma vor ajuta cunostintele acumulate. Faptul ca am participat la olimpiade stiam ca m-ar putea propulsa intr-o universitate americana, dar nu-mi doream acest lucru. Pe de alta parte, privind in Romania, toate firmele cereau C, C++, baze de date. Apoi s-a dezvoltat internetul si din ce in ce mai mult se cereau Java, applet-uri, php, jsp-uri, asp-uri, si multe altele. Nicaieri, in ofertele de joburi, nu apareau algoritmii.

In anii petrecuti in industrie am realizat cu ce am ramas de fapt de la aceste olimpiade – am invatat sa gandesc sistematic, ca un adevarat inginer. Aici nu a trebuit sa rezolv probleme mici in cateva ore, ci sa dezvolt, impreuna cu o echipa, aplicatii complicate in cateva luni. Dar principiul aplicat ramanea acelasi: design si implementare.

Designul contine modul de rezolvare, structurile de date, algoritmii de rezolvare. Aceasta e cea mai importanta si interesanta parte a unui proiect – greselile care apar aici sunt greu de reparat. Implementarea se poate face in diferite limbaje, depinzand de cerintele clientului, de echipa de programatori. Totusi, cea mai mare parte a designul ramane neschimbata.

Dupa anii petrecuti in industrie am revenit temporar in universitate, dar de data aceasta pentru a obtine titlul de doctor. Aici, cel mai important e cum gandesti. E important sa fii pe picioarele tale, pentru ca nu exista un sef care sa-ti spuna cum si ce sa faci. Partea tehnica a cercetarii e cam acelasi lucru cu cele trei ore petrecute in fata calculatorului in timpul probelor de la olimpiade.

In final, pentru mine olimpiadele au reprezentat dezvoltare profesionala si creare de networking.

Si as vrea sa inchei prin a spune ca, la fel ca intotdeauna, e important mediul in care lucrezi, sunt importanti oamenii pe care ii ai in jur. Si mai mult, pentru ca olimpiadele sunt in timpul liceului si acela e unul din momentele decisive in alegerea drumului in viata, e important sa existe oameni care sa-ti insufle dragostea si daruirea lor pentru ceea ce fac.

Radu Berinde, student MIT

ONI și în general olimpiadele de informatică au fost în centrul a tot ce am făcut de-a lungul liceului. Erau întotdeauna direcția în care mergeam, iar în viață e bine să ai o direcție. Mă uit acum în urmă și îmi amintesc cât de fericit m-au făcut toate olimpiadele la care am participat, toate lucrurile pe care le-am învățat și mai ales toți prietenii pe care mi i-am făcut. Mulțumită olimpiadelor, acum sunt studet la MIT, în SUA și am toate motivele să cred că mă așteaptă un viitor fericit.

Cătălin Frâncu, absolvent MIT, software engineer Google

Olimpiadele au fost rampa mea de lansare in plan profesional. Fara prima mea olimpiada pe sector din clasa a IX-a (unde era cat pe ce sa nu ma calific), probabil n-as fi ajuns nici la IOI, nici la MIT, nici la Google.

Mai pe larg, olimpiadele mi-au imbogatit enorm viata profesionala si personala, atat in liceu cat si dupa. Am cunoscut profesori devotati cu care am ajuns sa colaborez si mi-am facut prieteni buni cu care tin mereu legatura, desi ne vedem poate o data pe an. Jumatate din CV-ul meu contine impliniri legate de lumea olimpiadelor.

Sigur, n-am mai fost la o olimpiada de noua ani, si lucrul asta se vede. De atunci, am invatat C++, Java, PHP, MySQL, Matlab, Lisp, Prolog, appleti, servleti si o droaie de acronime. Dar in ansamblu ma simt mai ruginit decat acum noua ani, pentru ca foarte rar am parte de o problema care sa ma provoace. Am tone de unelte, dar putin de rezolvat.

Scaparea este in micile probleme de care ma izbesc in munca mea de zi cu zi. Stiu sa parcurg un arbore? Stiu sa manipulez niste liste simplu inlantuite? Stiu sa interclasez n vectori ordonati? Stiu, pentru ca olimpiada a facut din lucrurile astea niste exercitii banale, indiferent in ce limbaj trebuie sa le implementez. Uneori ma izbesc chiar de probleme mai grele (de exemplu, a trebuit sa implementez propriul meu diff), care sunt adevarate cirese pe tort.

Dupa parerea mea, toate limbajele si mediile de programare cunoscute nu merita mai mult de un rand in CV. Daca nu pot deveni fluent intr-un limbaj nou in cateva saptamani, atunci probabil informatica nu e pentru mine. Daca scriu cod, dar habar nu am ce complexitate are, daca mi-e totuna ca O(n^2) este mai prost decat O(n), atunci in mod sigur informatica nu este pentru mine.

Limbajele vin si se duc, dar algoritmii raman. Pascal nu mai stiu, dar schemele logice am sa mi le amintesc cat voi trai.

Bogdan Dumitru, absolvent Caltech, software engineer Cadence

Sunt 9 ani de cand n-am mai participat la Olimpiade, si nu pentru ca n-as fi vrut, doar pentru ca, prin definitie, ele se adreseaza numai elevilor de liceu. Intre timp am trecut prin facultate iar acum lucrez. Am avut destul de multe cursuri de calculatoare, am lucrat la cateva proiecte de cercetare, iar acum scriu software pentru industrie.

Dupa 6 ani si ceva experienta acumulata (cred eu), pot sa spun ca Olimpiadele „si-au facut efectul”. Target-ul olimpiadelor — algoritmi, structuri de date, optimizari, idei creative — este target-ul de baza al oricarei aplicatii din lumea reala. Orice proiect pe care l-am vazut este de fapt o scalare a unei probleme de Olimpiada bine gandita. Are nevoie de design, asa cum si problema are nevoie de etapa de gandire dinainte de cod. Design-ul se poate schimba in timp, trebuie sa fie versatil, ca si la problema de olimpiada, cand nu vrei sa rescrii tot. Are nevoie de structuri de date dedicate, asa cum si problema are nevoie de arbori sau de tipuri particulare de grafuri. Are nevoie de optimizari si algoritmi buni, asa cum si sursa de olimpiada trebuie sa ruleze intr-un timp foarte scurt. Bineinteles, orice proiect din lumea reala e mult mai mare, se scrie in luni de zile de catre o echipa de cativa oameni.

Dar problemele te care te lovesti sunt pana la urma versiuni mai mari ale problemelor de Olimpiada. Din nou citiri, validari, prelucrari, cazuri limita, algoritmi, complexitati. In timp ce scrii soft-ul, ca si la olimpiada, trebuie sa te intrebi: sa folosesc liste sau heap-uri? cat dureaza sa implementez parcurgerea asta? e mai bine sa scriu repede un N^2 sau am timp sa scriu NlogN? cat de des o sa fie apelata functia asta? sa preprocesez datele astea sau sa le calculez on the fly?

Olimpiada m-a ajutat enorm sa-mi dau seama ce inseamna de fapt CS — Computer Science. In lumea reala, apar si sistemele de operare si mediile de programare — multe distributii, multe IDE-uri, multe feature-uri. Dar toti programatorii cu care am lucrat sau discutat sunt de acord ca design-ul si algoritmii folositi sunt cea mai importanta parte a proiectului. Ce limbaj folosesti, in ce environment scrii — conteaza, sigur, dar in nici un caz atat de mult ca gandirea problemei. Tool-urile se invata repede, pe proiect. Si mai niciodata nu conteaza o optimizare la nivel de artificiu de limbaj in fata unei optimizari la nivel de algoritm. Softistii buni invata repede sa foloseasca un tool la 80% din capacitatea lui.

N-or sa stie pe dinafara mii de feature-uri, dar o sa stie ce se poate face, si unde sa caute repede ce nu stiu deja. Insa or sa aiba o idee foarte buna despre ce ar insemna un algoritm bun pentru modulul respectiv si in cat timp l-ar scrie. Iar daca va fi C++ sau Java sau un mediu visual, asta se decide in echipa. Tool-ul e exact atat, un tool, ideea poate fi scrisa cu mici modificari in orice astfel de tool.

Softistii buni gandesc in idei, apoi „gandesc in C++”. Tool-urile sunt cool, au sute si mii de chestii mici si faine scrise pentru a-ti creste productivitatea. Dar singure nu rezolva nimic, iar un algoritm rapid si scalabil valoreaza in practica cat o mie de functii si shortcut-uri specifice unui tool particular.

Eu personal consider ca Olimpiadele m-au ajutat foarte mult in formarea unei gandiri de softist/ inginer. M-au invatat sa „vad problemele”, sa impart o solutie pe nivele (asa cum imparti apoi obiectele in C++, de exemplu), sa gandesc bucatile si interfetele dintre ele. Si sa incerc sa aleg acel algoritm care ofera suficient de multa viteza, in suficient de putin timp de implementare, cu suficient de putina memorie. Adica trade-off-uri de care dai in fiecare zi ca softist.

Si inca ceva: sa lucrezi cu cineva care stie ce spune si caruia ii place sa lucreze cu elevii e mai mult decat esential. Aici, fiecaruia cum ii e norocul. Eu am avut noroc… nu stiu cate lucruri bune s-ar fi intamplat fara Dana Lica, profesoara mea din liceu si gimnaziu. Nu stiu daca m-as fi apucat de toata chestia asta cu calculatoarele de la bun inceput… Dar d-na Lica a fost acolo cand a trebuit sa fie si ii multumesc.