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.