Blog infoarena

Interviu cu Radu Berinde - partea a doua

Cosmin
Cosmin Negruseri
08 ianuarie 2008

Postez a doua parte a interviului cu Radu Berinde. In aceasta parte el ne povesteste despre concursuri, despre MIT, despre Google si despre cat impinge la piept, de asemenea va aparea si putin context legat de poza cu masina din prima parte a interviului. Enjoy! 

Dupa terminarea liceului ai fost fost in comisii la cateva concursuri, cum e participarea pe cealalta parte a baricadei?

Pe de-o parte, esti mult mai relaxat si distantat de ce se intampla in concurs; pe de alta parte, trebuie sa te gandesti foarte bine la ce faci, pentru ca deciziile tale afecteaza multi oameni. In rest nu prea vad ce comparatie sa fac intre cele doua activitati, sunt foarte diferite..

Cum se compune o problema pentru concurs?

Mi se pare destul de greu (si frustrant) sa scoti o problema buna; e ceva la care trebuie sa te gandesti in timp, si apoi sa te decizi unde/cand sa o propui. Sunt mai multe variante de compunere a unei probleme: una e sa te gandesti (probabil pornind de la o problema pe care o cunosti) la o cerinta noua, apoi sa te gandesti cum s-ar putea rezolva. Astfel e destul de greu sa nimeresti o cerinta buna, insa in gasirea rezolvarii pot sa apara idei noi.

Alta varianta e sa te gandesti la o idee pe care vrei sa se bazeze solutia, si apoi sa te gandesti la ce ar trebui sa ceara o problema care se rezolva in modul respectiv. Astfel e mai usor sa scoti problema, dar idei noi de rezolvare par mai greu (din moment ce solutia e oarecum deja fixata).

Pentru cei ce participa la concursuri pe infoarena, esti cunoscut prin "jmenurile de implementare" pe care le invata din sursele tale. Poti sa ne povestesti de unul dintre aceste "jmenuri"?

Regula de baza cand incerci sa optimizezi un program (in afara de a imbunatati algoritmul) e sa fii atent numai la partile din program care folosesc majoritatea timpului de executie. Mi se intoarce stomacul pe dos cand vad oameni care "optimizeaza" inlocuind in orice loc posibil inmultirile cu operatii pe biti, sau alte chestii asemanatoare (de parca nu le-ar optimiza oricum compilatorul). Codul trebuie sa fie cat mai usor de citit si inteles - asa e cel mai probabil sa iasa corect (si degeaba merge repede daca e gresit). Cand vrei sa optimizezi, te concentrezi pe ceea ce conteaza. De obicei este vorba de cateva linii de cod si e inutil sa optimizezi orice altceva in afara de aceste linii. Era o vorba care suna ceva de genul: in majoritatea cazurilor, 99% din timpul de rulare este petrecut in 1% din liniile de cod.

Ca sa stii sa optimizezi, trebuie sa intelegi cat de cat ce se intampla mai jos de compilator; in majoritatea situatiilor, trebuie sa ai idee de cum functioneaza calculatorul, sa stii cum sa te folosesti de cache-ul de memorie, sau sa stii care operatii sunt mai costisitoare.

Pot sa va povestesc despre o problema la un lot (Petrol din 2003); era despre un graf cu N noduri si M muchii si avea o solutie evidenta care folosea N BF-uri (timp N*M). Solutia care se cerea era in M*log N daca imi amintesc bine, iar solutia in N*M ar fi trebuit sa ia in jur de 30-40 de puncte. Eu am reusit sa iau 90 de puncte cu aceasta solutie. Cum? O singura linie conta - cea care definea bucla de expandare a vecinilor unui nod. Trebuia sa optimizez cat mai mult enumerarea vecinilor unui nod. Ideea a fost sa citesc mai intai intrarea doar pentru a numara vecinii fiecarui nod, sa aloc cate un vector exact de marimea necesara pentru fiecare nod, apoi sa citesc din nou intrarea si sa completez vectorii. Astfel, efortul de a enumera toti vecinii in unui nod in parcurgere este minim; vecinii sunt unul langa altul in memorie si cache-ul este folosit foarte bine. Mai era o singura decizie de luat - cum sa stii cand sa te opresti in enumerarea vecinilor; am testat in timpul concursului tot felu de metode si cea mai rapida a fost sa adaug un numar special (0) la sfarsitul fiecarui vector. Sigur, ar fi fost mai bine sa fiu mai destept si sa ma prind de solutia corecta, dar care ar mai fi fost spectacolul? :)

Stiu ca pentru un an erai inscris la Universitatea Bucuresti si la Universitatea Politehnica, iar apoi ai plecat la MIT. Poti sa ne povestesti mai mult? Ce te-a facut sa alegi MIT?

Eram deja decis sa aplic la MIT inainte sa incep facultatea in Romania. Motivul in principal a fost ca in facultatile din Romania nu prea se invata mare lucru (la informatica). In nici un caz nu cat se invata la una ca MIT. Simteam ca am totusi un talent deosebit si ca trebuie sa il folosesc/extind in continuare (ceea ce clar nu se intampla la facultate in Romania). Nu eram chitit sa plec din tara; faptul ca trebuia sa plec era un dezavantaj. Am aplicat doar la MIT, in ideea ca daca plec din tara, macar sa merite. Plus ca aici aveam si cele mai mari sanse sa fiu acceptat, pentru ca aici conteaza (sau contau..) cel mai mult medaliile.

Care sunt cursurile ce ti-au placut mai mult in facultate (si de ce)?

Mi-au placut materia la multe cursuri. La unele mi-au displacut lucruri legate de cerinte, proiecte finale, etc. insa materia mi-a placut la majoritatea cursurilor de informatica.

Cursul de sisteme de operare a fost foarte interesant; pe de-o parte, am studiat in detaliu un sistem foarte mic de la care a plecat UNIX, pe de alta parte am implementat un sistem bazat pe cu totul alte idei.
La sfarsit am avut si un proiect in care puteam sa facem cam orice in sistemul nostru de operare; a fost foarte interesant - unii au portat stackuri TCP/IP si web-servere, altii sisteme de fisiere distribuite, si multe alte chestii. Eu am portat un compilator, vi, si quake1 :)

Alt curs interesant a fost unul de sisteme distribuite, in care am invatat despre multe sisteme si tehnici care au avut succes, si am si implementat un sistem la sfarsit. Alt curs a fost unul de grafica, la care am implementat multe chestii misto.

Din cele teoretice, mi-au placut teoria complexitatii, geometrie computationala, algoritmi avansati; la toate am invatat lucruri foarte interesante. Am luat si un algoritm mai avansat care mi-a placut foarte mult; se chema "sketching, streaming, and sub-linear space algorithms". A fost despre tehnici si algoritmi cu care sa aproximezi (probabilistic) ceva folosind mult mai putin spatiu decat ar lua "ceva"-ul respectiv (care de obicei era un vector intr-un spatiu de
dimensiune foarte mare).

Cum e viata de stundent la MIT? Cum se imbina munca cu distractia?

De multe ori nu prea frumoasa; sunt cam exagerati in volumul de materie, teme, cerinte si uneori trebuie sa depui eforturi foarte mari sa tii pasul. In unele perioade esti mai relaxat, si poti sa te bucuri de mai mult timp liber. Nu e la fel de distractiv in Romania, unde sunt majoritatea prietenilor mei mai apropiati. Insa sunt locuri, oameni, si lucruri frumoase si acolo; si ai si avantajul de a trai intr-o tara mult mai dezvoltata si mai civilizata.

Cand ai inceput cu concursurile pe topcoder ai ajuns foarte repede intre cei mai buni de pe sait, e usor pentru tine sa participi la concursuri la un nivel inalt dupa ce ai facut o pauza?

Mi se pare ca in timp se clarifica ideile si cunostiintele. Cred ca acum as fi mai bun decat eram in liceu daca m-as duce din nou la olimpiadele din liceu (dupa ce m-as mai antrena un pic).

Cum se compara concursurile pe topcoder cu celelalte la care ai participat?

La Topcoder e foarte important sa scrii codul repede. La olimpiade, niciodata nu ma grabeam sa scriu codul, preferam sa ma concentrez sa fiu sigur ca e corect; ba mai mult, de multe ori scriam si generatoare de teste, si variante mai incete de rezolvare cand se putea, ca sa verific programele. La topcoder nu poti sa faci asta si mai pierzi cateodata din greseli mici; antrenamentul conteaza foarte mult. In rest, problemele nu mi s-au parut cu mult diferite fata de ce eram obisnuit.

De ce nu ai participat la ACM ICPC?

N-am ajuns nicaieri, dar asta nu inseamna ca n-am participat. Am participat o data pentru Politehnica cu Marius Andrei si Mugurel Andreica; am fost primii care nu ne-am calificat. Am avut ghinion la o problema simpla care nu iesea deloc si la alta care avea o greseala in enunt si am pierdut mult timp rezolvand practic alta problema. "Ghinion" poate insemna si ca totusi nu ne antrenasem foarte mult (nu cat ar fi trebuit).

Am participat si o data pentru MIT insa am fost pus exact inainte de concurs intr-o echipa cu doi americani pe care nu-i cunosteam deloc (al treilea membru al echipei lor pleca in finala topcoder si nu putea participa). Evident ca am fost dat la o parte, din moment ce ei nu stiau nimic despre mine. Am participat la faza regionala, unde toate problemele in afara de una erau foarte simple; le-au facut ei doi pe toate foarte repede. La cea grea ma gandisem deja dar nu m-au lasat sa o scriu eu, si tot unul din ei s-a apucat; m-am enervat ca stateam langa el si ii ziceam ca nu face ceva bine si nu ma asculta chiar daca aveam dreptate. Ma enerva ca se si complica, si scria un Dijkstra cu heapuri in STL cand putea sa il faca in N^2 si sa fie mult mai usor si clar. N-a iesit din prima, si a durat pana am rezolvat-o; intre timp, cealalta echipa de la MIT le facuse deja. Celelalte echipe n-au reusit sa faca nici macar toate problemele simple, deci oricum echipele de la MIT au iesit distantat pe primele locuri. Din pacate, chiar daca erau mai multe locuri de calificare, nu se putea califica decat o singura echipa de la fiecare facultate (nu mi-e clar de ce). In echipele de la MIT aproape toti fusesera in primii 10 la un IOI, deci nu e de mirare ca ne-am luptat intre noi.

Dupa aceea n-am mai participat. Motivul principal a fost ca imi manca destul de mult timp - cateva saptamani din semestru, cel putin o zi din weekend o pierdeam cu concursuri/antrenamente pt. ACM. Cum temele si alte chestii iau si ele destul timp mult, era prea mult. In plus, in fiecare an vin tipi proaspat dupa IOI, si cred ca e destul de greu sa tii pasul. Si oricum e foarte greu sa iti gasesti colegi cu care sa mearga bine lucrul in echipa.

Ai fost de doua ori la internship pe vara la Google, cu ce impresii ai ramas?

Nu cred ca mi-ar placea sa lucrez full-time la Google. Cred ca depinde destul de mult de proiect, insa pare ca pana la urma ce faci tu nu conteaza asa de mult. Probabil ca asa e peste tot.. In comparatie cu majoritatea companiilor, probabil ca e foarte bine la Google; imi displace totusi stilul asta american (sau poate nu e doar american?) de a sta toata ziua la servici. Eu prefer sa lucrez in continuu si sa plec cat mai repede acasa, ca am lucruri mai bune/placute de facut.
Majoritatea par ca stau la servici 10-11 ore din care 2-3 freaca menta. Ma rog, probabil ca nu mi-ar placea sa lucrez full-time nicaieri si de-aici vine problema :)

Poti sa ne zici un proiect software misto la care ai lucrat?

Nu am mai lucrat demult la un proiect; pe la inceputul liceului eram pasionat de grafica 3d, si am facut un engine 3d care citea harti de quake1 si apoi quake3 si te puteai plimba prin ele.

Care sunt programele de pe calculator care le folosesti cel mai des, pt programare si in rest?

Lucrez in Windows XP dar am mai tot timpul un Slackware deschis intr-un VMware (si folosesc X-Win32 in loc de X). Documentele/temele le scriu in linux, cu vim si latex (si xdvi). In Windows nu folosesc mult Total Commander (fostul Windows Commander). Programe mici le scriu in linux, folosesc vim si gcc. Mai lucrez in Eclipse si in Visual Studio din cand in cand.

Care sunt siteurile tale preferate?

infoarena :p
howstuffworks
wikipedia
mininova
theonion

Ai ceva carti de programare preferate?

Introduction to Computational Geometry, de Shamos si Preparata.
Theory of Computation, de Sipser.

Dar carti ce nu au legatura cu programarea?

Maximum Boost de Corky Bell :)

Cat timp petreci in fata calculatorului?

Mult prea mult.

Alte pasiuni inafara de programare?

Acum sunt pasionat de mesterit la masini, lucrez la masina cand am timp si cand nu e prea frig afara. Am schimbat sau imbunatatit pana acum tot felu de chestii - componente de suspensie, etriere, discuri de frana, arbore cu came, chestii de la esapament, tot felu de relee si circuite - si inca merge :) Cred ca daca as avea timp si bani, un timp destul de mare as face numai asta.

Cat impingi la piept?

Haha, cel mai mult am impins 120kg la declinat, dar asta s-a intamplat cu (prea) mult timp in urma..

Te mai intorci in Romania sau ramai in State?

In viitorul apropiat probabil ca voi ramane in State. Mai departe e greu de spus, cred ca depinde de prea multe lucruri pe care nu pot sa le prevad. In orice caz, am pastrat contactul cu prietenii din Romania, si il voi pastra in continuare indiferent de ce se va intampla - deci intotdeauna voi avea motive sa ma intorc.

Ce faci dupa ce termini facultatea?

Nu stiu inca. Cred ca voi mai face un an pentru master, apoi probabil voi lucra in State, cel putin pentru un timp.

Multumesc pentru interviu!

 Comentarii (5)

Categorii: interviu

Interviu cu Radu Berinde - partea intai

Cosmin
Cosmin Negruseri
19 decembrie 2007

Radu Berinde este unul din putinii romani cu doua medalii de aur la olimpiada internationala de informatica. Acum studiaza la MIT, iar vara trecuta a facut un internship la Google pentru a doua oara. Am avut ocazia sa lucrez cu el pe acelasi proiect si m-a impresionat prin o gramada de idei bune si viteza cu care scrie cod elegant si util. In aceasta prima parte a interviului ne povesteste ceva din experienta lui legata de olimpiade.

(Radu cu tiburonul sau).

Cum ai inceput cu informatica? Dar cu concursurile?

Eram prin clasa a patra cand sora mea a adus acasa un 286. Se intamplase ca imi rupsesem picioru (intr-un mic accident de masina) si stateam acasa toata ziua. Dupa ce m-am plictisit de ce jocuri se gaseau, am inceput sa ma uit din ce in ce mai interesat la ce facea sora mea, care isi scriea proiectu pt facultate in Pascal. Am invatat incet incet, pana am rescris de la capat tot proiectul (initial proiectul folosea programarea pe obiecte, eu l-am rescris fara obiecte). Asa a inceput pasiunea pentru programare; am tot continuat sa invat de prin carti si sa fac diverse programe. Prin clasa a 5-a sau a 6-a am inceput sa merg la Palatul Copiilor; acolo au vazut ca stiu deja destul de multe si am intrat direct in grupele unde se pregateau cei care mergeau la concursuri nationale de informatica. Am fost pregatiti foarte bine de Dna. Rodica Pintea. In clasa a 6-a am fost la primul meu concurs de informatica (la Lugoj), unde am luat punctaj maxim. Nu mai e nevoie sa spun ca de-atunci problemele de concurs au ramas pasiunea mea.

Ai participat si la alte olimpiade? Ai avut alte subiecte care ti-au placut in scoala?

Dintre subiectele de la scoala, cel mai mult imi placea matematica (surpriza..); participam la olimpiade si faceam destul de bine la proba de sector, dar la municipiu eram depasit total :) Am fost si la fizica o data sau de doua ori, dar spre sfarsitul gimnaziului nu prea mi-a mai placut. In liceu m-am concentrat destul de mult pe concursurile de informatica; nu pot sa zic ca m-am implicat prea mult in ce se facea la scoala.

Cum te antrenai pentru olimpiade?

In primul rand, lucram foarte multe probleme, de oriunde se putea: olimpiade din romania, internationale, din alte tari, USACO, ACM, orice. Incercam sa gasesc si teste ca sa pot verifica solutia mea. Pana prin clasele 9-10 mai participam si la pregatiri, la Palatul Copiilor, sau la liceu, organizate de Dna. Pintea sau alti profesori si studenti.

Ai avut pe cineva care te-a ajutat in lumea olimpiadelor, sau ai invatat totul singur?

Bineinteles, probabil mai multi decat pot mentiona aici. Cred ca cea mai mare influenta a avut-o Dna. Prof. Rodica Pintea, care a fost profesoara mea de la Palatul Copiilor. Am fost pregatit si de si de Dl. Prof. Atanasiu in anumite perioade. Am invatat mult si de la prieteni olimpici mai mari ca mine: Andrei Marius, Adrian Drumea, Andrei Gheorghe, Angel Proorocu (hmm de ce incep toti cu A?). La diverse pregatiri am mai invatat lucruri si de la alti (atunci) studenti fosti olimpici, ca Bogdan Batog, Mihai Stroe, Dumitru Bogdan.

Sunt cateva probleme ce ti-au ramas in minte de la concursurile la care ai participat?

Mi-a ramas in minte problema XOR de la IOI 2002. Se dadea o matrice cu patratele albe sau negre; se putea face o singura operatie, de a alege un dreptunghi (o submatrice) si a inversa culoarea tututor patratelelor din dreptunghi. Era cu intrare data in prealabil, si se cereau solutii cu numar de operatii cat mai mic. Solutia era un algoritm foarte simplu care obtinea o 2-aproximare - cu acest hint va las sa va prindeti singuri de el :)

Care e structura ta de date preferata?

Dintre cele mai de baza, AVL.. Dintre cele de geometrie, range trees (cu Willard-Lueker refinement/fractional cascading).

Care e algoritmul preferat?

Greu de spus exact, dar voi descrie ceva ce mi-a placut intodeauna foarte mult - algoritmii in timp liniar bazati pe ideea de lista dublu sortata, in care la fiecare pas se insereaza un element nou, stergandu-se mai intain elementele din coada listei care sunt mai "proaste". De exemplu, pentru problema sirului divizat: se da un sir de numere A[1..N], se cere un M maxim astfel incat toate A[1..M-1] sunt mai mici decat A[M] si toate A[M+1..2M] sunt mai mari decat A[M]. Se poate rezolva in timp daca la fiecare pas (pentru fiecare M) putem afla minimul elementelor A[M+1..2M}. Putem rezolva problema in timp liniar daca mentinem o lista dublu sortata pentru a afla la fiecare pas minimul elementelor A[M+1..2M]: lista e sortata crescator dupa valoare si dupa pozitie. Ideea este ca daca in zona curenta de interes avem doua numere A si B, A e la stanga decat B, si A > B, nu ne va mai interesa niciodata A, deci il putem arunca. Cand inseram un numar nou X mai intai stergem repetat ultimul element al listei pana cand acesta e mai mic ca X, apoi inseram pe X la sfarsitul listei. La fiecare pas se sterge si cate un element de la inceputul listei. Minimul va fi intotdeauna ultimul element din lista. Pentru o problema mai avansata care foloseste aceasta metoda, vedeti problema Batch de la IOI 2002.

Cate probleme crezi ca ai rezolvat la viata ta?

As zice ca peste 1000, poate chiar spre 1500-2000.

Ce mai tii minte din viata de olimpic? Care erau concurentii cu care te infruntai? (ai ramas prieten cu unii?)

Multi dintre cei din Bucuresti care participau la olimpiade (si faceau bine) imi erau (si sunt) prieteni buni. Era foarte placut sa ne intalnim la o bere si sa discutam probleme si idei de rezolvare. Formam un grup destul de mare, era foarte distractiv sa mergem impreuna la olimpiade sau loturi.

Stiu ca la IOI cand erai clasa a 12-a ai bushit doua probleme si tot ai luat aur, ne poti povesti mai mult despre acel episod?

Anul acela nu a fost atat de bun pentru mine (am facut destul de prost si la CEOI), n-as putea sa spun exact din ce motive. In prima zi a fost o problema grea la care am gasit o solutie inteligenta, insa era destul de complicata si intr-un program imens am uitat sa pun un if sau doua si am pierdut 100 de puncte (care la final m-ar fi adus pe locul 1). Am mai facut alte greseli si in ziua 2, mai mult din cauza rezultatului prost din ziua 1. Dar sunt convins ca mai toti care au luat aur atunci au facut si ei tot felul de greseli stupide, deci nu cred ca am fost neaparat mai ghinionist. Nu pot spune neaparat ca meritam sa iau mai mult, dar sunt sigur ca as fi putut sa fiu in forma mai buna in care sa nu am probleme. Pot spune totusi ca am fost dezamagit de subiectele de atunci, care nu mi s-au parut deloc la fel de frumoase si inteligente ca cele din 2002. M-a intristat un pic cand am realizat ca pana la urma te pregatesti ani intregi pentru 6 probleme care se poate intampla sa "iti pice prost" in ziua respectiva.

Cum te prinzi de probleme? Ai observat vreo metoda care ajuta?

A fost o evolutie destul de clara. Am lucrat multe probleme, pana cand la un moment dat eram foarte bucuros sa primesc probleme "clasice", insa eram inca speriat de cele "de idee". In timp insa, cunoscand problemele clasice am inceput sa am idei foarte bune. Nu e ceva ce poti sa obtii printr-o metoda anume; daca intelegi foarte multe idei, vei incepe la un moment dat sa le combini in moduri noi.

 Comentarii (19)

Categorii: interviu

Avem comentarii!

Cosmin
Cosmin Negruseri
18 decembrie 2007

Cristi si Mircea au simplificat modul in care se pot face comentarii pe blog. Daca sunteti curiosi de detaliile tehnice va puteti uita la changeurile facute aici si aici . Comentariile arata acum asa:

Mai ar fi de lucru, dar e un pas mare in fata ca utilizabilitate.

 Comentarii (3)

Categorii: Features

Interviu cu Octavian Costache - partea a doua

Cosmin
Cosmin Negruseri
16 decembrie 2007

(in poza de la stanga la dreapta: The Beatles, ah pardon Mars , Vivi , Cristi si Cosmin in septembrie in San Francisco)

Continuam cu a doua parte a interviului interesant cu Octavian Costache. Puteti citi prima parte aici . In aceasta parte el ne spune despre facultate, viata de freelancing, despre blogging, despre Google si alte lucruri interesante. Cititi si cel mai important, comentati interviul.

Ai facut facultatea in Romania, si mai tarziu ai plecat la Google in New York. Nu te-ai gandit la sfarsitul liceului sa pleci din tara la o universitate in strainatate?
Am avut si gandul asta, ba chiar am dat si Toefl-ul. Cred ca am fost insa prea lenes pentru a incerca cu adevarat, probabil nici nu am fost motivat suficient, sa fac facultatea in afara nu era un vis sau un scop al meu. Un alt motiv care m-a facut sa nu aplic a fost neincrederea pe care o aveam in sansele de reusita pentru ca la olimpiade nu am avut rezultate stralucite (doar niste premii la nationala).

De ce ai ales ca facultate sectia Calculatoare, Politehnica Bucuresti?
Era singura facultate despre care stiam ca 'e buna pentru calculatoristi'. Cealalta varianta era sectia de informatica de la Universitate, dar acolo se auzea ca profesorii nu sunt la fel de buni, nu avea la fel de multa traditie si ca se facea multa mate (care mie nu imi place deloc).

Ce cursuri ti-au placut in facultate si de ce, si care nu ti-au placut?
As putea scrie un intreg eseu despre toate cursurile din facultate. :-) Mi-au placut cursurile din anii mai mari, cred ca cele mai multe au fost bine facute. Cele de sisteme de operare (thread-uri, low level stuff), retele, algoritmi. Au fost si cateva cursuri mai exotice care mi-au placut (programare functionala). Din motive pur subiective probabil cel mai mult mi-a placut cursul de sisteme multi agent, a fost un domeniu care m-a atras pentru ca mi se pare cool sa faci roboti si programe autonome. E ca si cum ti-ai construi o jucarie pe care apoi o poti studia cum merge si cum evolueaza de capul ei. Si chiar asta am ajuns sa facem cand am facut niste programe care se jucau pe doizece de capul lor, isi alegeau partenerii, incercau sa faca conversatie, sa fie inteligente. A fost foarte distractiv. Nu vreau sa imi aduc aminte de cele care nu mi-au placut, probabil primii doi ani cu totul.

Ai fost instructor si preparator la mai multe cursuri. Cum e experienta de a fi profesor, care erau partile frumoase si cele dificile?
E mai dificil decat pare sa iti pregatesti un laborator si sa ai incredere ca nu te vei face de ras in fata unui grup de studenti, cel putin prima oara cand faci laboratorul respectiv. E greu sa fii laborant bun, e greu sa admiti cand nu stii si sa fii deschis la tot felul de oameni si tot felul de intrebari. Cel mai mult mi-a placut faptul ca puteam sa trezesc entuziasmul in studenti la materia pe care o faceam. Eu cred ca orice subiect are o parte interesanta care il face fascinant si util si principala satisfactie (si responsabilitate) a unui preparator este sa reuseasca sa arate aceasta parte interesanta studentilor si sa ii faca sa inteleaga de ce ceea ce invata e cool.

Ai recomanda unui student sa faca cursurile Cisco?
Da, primul modul este de basic networking si sunt acolo lucruri generale care te ajuta sa intelegi cum functioneaza retelele si internetul. Cred ca este un modul extrem de util pentru cultura ta generala de dezvoltator software. Celelalte module sunt utile doar pentru cei care vor sa faca din asta o cariera.

Am vazut in CV ca ti-ai facut lucrarea de diploma din Inteligenta Arfiticiala. Cum se imbina algoritmica si inteligenta artificiala cu web designul?
Well, se imbina foarte indirect. Revin la exemplul cu programele noastre care se jucau pe doizece de capul lor. Pentru ca stiam sa dezvoltam site-uri web am facut doizece si a avut succes, pentru ca stiam algoritmica am stiut sa scalam doizece pentru a putea sa reziste in fata succesului pe care l-a avut, si pentru ca stiam inteligenta artificiala am putut sa facem niste agenti care sa ne ajute sa popularizam jocurile mai putin de succes si sa ne ajute sa facem diverse experimente.

Este totusi doar un caz fericit, un exemplu ca se poate. As spune ca mult mai comuna este inrudirea dintre algoritmica si web development (design-ul intr-adevar nu se inrudeste cu asta) pentru ca trebuie sa intelegi web-ul pentru a dezvolta site-uri de succes si cel mai probabil te va ajuta foarte mult algoritmica atunci cand aceste site-uri vor avea succes. Inteligenta artificiala nu prea intra in ecuatie decat in cazuri extreme si rare, in situatii speciale si depinde foarte mult de problemele pe care incerci sa le rezolvi. De exemplu, daca vei vrea sa faci o interfata cool care intelege limbajul natural atunci vei avea nevoie de inteligenta artificiala.

Ai un blog cunoscut. In ze list apare in primele 50 de bloguri din Romania. De ce ti-ai facut blog?
Eu cred ca am o viata interesanta care poate motiva si inspira pe altii. Credeam si inca mai cred ca am multe lucruri de spus, ca exista valoare in a impartasi experientele prin care trec eu si altora. Este probabil parte si din motivul pentru care am fost preparator, imi place sa inspir si sa motivez oameni, sa explic si sa educ, sa arat altora perspective noi asupra lumii la care ei poate nu s-au gandit. Asta a fost principalul motiv pentru care am inceput sa am blog, combinat cu ideea ca facand asta, inspirand, educand, provocand oamenii la a gandi mai mult, vor afla si ca exist, ca gandesc, ca sunt destept.

Ca un efect secundar de care mi-am dat seama ceva mai tarziu, blogul mi-a fost foarte folositor si pentru nevoia de comunicare de la inceputul venirii mele in America. Eram singur, fara prieteni si fara nici un cunoscut, intr-o tara straina. Blogul m-a ajutat, la inceput fara sa imi dau seama, sa am un loc unde sa comunic cu prietenii, sa le spun ce imi trecea prin cap, sa simt ca cineva ma asculta. Psihologic m-a ajutat foarte mult, chiar daca intentia initiala a fost alta.

De ce crezi ca are succes?
As zice ca blogul meu are un succes moderat. Este citit de un public destul de restrans de oameni care ma cunosc sau oameni interesati de industria online. Cred ca succesul lui este dat de o combinatie intre pozitia din care emit pareri (pozitie care confera mai multa autoritate parerilor mele decat parerilor unui anonim), felul in care scriu (cu grija, coerent, clar, interesant) si continutul pe care il scriu (de multe ori analize coerente si argumentate, perspective interesante, sinteze sau opinii la care de obicei oamenii nu se gandesc). Este, evident, o parere foarte subiectiva. :-)

Cum ai convinge pe cineva sa isi faca blog?
Nu as vrea sa conving pe nimeni care nu simte ca are ceva de spus sa isi faca blog. Cred ca un blog este ceva care trebuie sa iti faci doar atunci cand simti ca ai ce sa comunici, ca perspectivele tale aduc valoare asupra unor subiecte, ca ai ceva de comunicat (despre lume, despre ceea ce faci tu, despre ce se intampla in interiorul unei echipe, etc).

Ce tipuri de bloguri citesti?
1. Bloguri despre industria online din Romania. Citesc cam orice blog al persoanelor care au cat de cat legatura cu online-ul de la noi. Ma intereseaza sa aflu tot ceea ce se intampla, sa imi formez o idee despre atitudinea generala a celor are au blog despre diverse evenimente, sa aflu lucruri interesante.
2. Foarte putine bloguri personale, pe care le citesc tot din motive personale.
3. Un blog despre New York in care mai aflu despre concerte interesante, restaurante, teatre sau in general ce se mai intampla cool prin oras.

Ai niste bloguri preferate care se ocupa de programare?
Nu.

Ai fost o bucata buna de vreme freelancer. Ce avantaje si dezavantaje are munca ca freelancer fata de cea a unui programator angajat la o firma?
Ca freelancer ai libertate deplina. Poti sa fii propriul tau stapan, sa faci lucrurile cum vrei tu, cand vrei tu, in ce fel vrei tu. Este ceva romantic in asta din punctul meu de vedere, esti un fel de mercenar in afara sistemului, mereu lucrand dar mereu pe drumuri, gata oricand sa isi faca bagajele si sa se duca in alta parte si sa se apuce de altceva. Exista avantaje destul de clare fata de un job normal: nu trebuie sa te duci la servici, poti sa muncesti cand vrei tu, in general nu ai un sef care sa iti spuna ce sa faci. E drept, ti se spune ce sa faci pe fiecare proiect. Dar esti liber sa iti alegi ce proiecte sa faci, daca sa mai lucrezi cu cineva sau nu.

Ca angajat ai insa o echipa cu care sa lucrezi si care sa te ajute. Ai oameni la care sa te raportezi si sa iti dai seama cat de bun esti. Lucrezi la proiecte mai mari si cu impact mai mare, dispare adrenalina si eterna intrebare "oare luna asta o sa am bani?".

Daca vrei, este diferenta intre a iesi cu tipe asa la intamplare si a avea o relatie serioasa cu o tipa. Exista avantaje si dezavantaje in amandoua. Cand ai o prietena stabila ai free sex la dispozitie, stabilitate, siguranta, daca va iubiti vedeti lumea impreuna, impartasiti bucuriile si tristetile. Cand esti single sex-ul este mai greu de gasit dar este mai divers si mai interesant, nu stii ce iti rezerva viitorul, esti liber sa te duci unde vrei cand vrei si sa faci absolut ce vrei. Amandoua au sens la anumite varste, amandoua situatiile au propriile lor avantaje si dezavantaje.

De ce Google si nu o alta firma sau propriul tau startup?
Dupa ce am fost freelancer mi-am dat seama ca mi-ar fi absolut imposibil sa ma duc la un job normal. Am aplicat la Google intamplator, a fost singura firma la care am aplicat vreodata (nici macar nu aveam un CV redactat). Nu voiam un job, voiam sa vad daca as putea obtine unul, era doar un challenge pentru mine, mai mult in joaca.

Dupa ce am trecut de interviuri mi-am dat seama ca este o ocazie pe care nu pot sa o ratez, sa lucrez la Google in New York, o oferta pe care nu o puteam refuza. De la Google am avut mult de invatat, m-am maturizat enorm ca programator. Din faptul ca traiesc in New York mi-am deschis orizonturile, am cunoscut lumea si am vazut perspective pe care nu le stiam inainte, lucru care se intampla de fiecare data cand iesi din universul care iti este familiar si te duci intr-un loc cu totul nou.

De ce nu o alta firma? Nu voiam sa devin un pion lucrand la un proiect ascuns dintr-o companie imensa, nu e ceva care sa imi doresc sau care sa ma caracterizeze. Google este singura companie pe care o stiu unde intr-adevar poti face o diferenta, poti face lucruri vizibile si poti face ce vrei tu, cat timp ai energia sa vrei.

Ce lucruri importante ai invatat de cand lucrezi la Google?
Probabil cel mai important a fost contactul cu alti oameni destepti. Am invatat sa fiu mai matur si ceva mai analitic. Am invatat cateva principii pe care, desi cred ca le urmaream oarecum inainte mai mult instictual acum stiu si care sunt argumentele din spatele lor (the user comes first, speed matters, release early and often).

Calitatea codului pe care il scriu a crescut. Desi in ultimii cinci ani (la google sunt doar de 2) am crezut cam in fiecare an ca mi-am atins maturitatea ca programator, in fiecare an mi-am dat seama ca am evoluat fata de anul trecut, ca scriu cod mai clar, mai curat, mai argumentat, ca stiu sa evaluez mai bine ce e usor de citit si de inteles, ce e bine sa fie facut si ce nu.

Ce iti place la viata din state?
O sa iti spun ce imi place la viata in New York, pentru ca eu acolo locuiesc si este un loc destul de diferit de restul Americii.

Imi place mult de tot orasul in sine. Imi place ca exista mii de restaurante, baruri, concerte, evenimente. Imi place ca atunci cand vrei poti sa gasesti cam orice dristactie la care te poti gandi. Imi place ca totul este extrem de comod de la cumparaturi si plati de facturi online pana la doing laundry.

Este totusi un raspuns foarte personal si sper ca toti cei care citesc asta sa nu sara la concluzii stereotipice despre America. Trebuie sa iti dai seama ca astfel de raspunsuri variaza mult de la persoana la persoana si depind mult de contextul fiecaruia.

Crezi ca o sa te mai intorci in Romania?
Este o optiune la care ma gandesc uneori ca fiind o optiune posibila.

Ce pasiuni mai ai inafara de blogging si programare?
Imi place sa zbor. Am facut parasutism si mai apoi parapanta si incerc sa zbor atunci cand pot. Mi-ar placea sa traiesc undeva unde sa pot face asta mai mult si mai usor dar pana acum nu a fost cazul.

In ultima vreme filmul. Am inceput sa vad multe filme si nu doar la cinema, sa urmaresc curente cinematografice si sa incerc sa inteleg mai bine regizorii, influentele lor, mesajele pe care vor sa le transmita. Am inceput sa privesc filmul ca pe o arta si sa incep, cred eu, sa o inteleg ceva mai bine din perspectiva asta.

Fotografia uneori. Imi place mult sa incerc sa spun povesti prin fotografie si sa incerc sa devin mai bun la a face asta.

Ce sfaturi ai da cuiva care e la inceput cu programarea?
Stau de cinci minute sa ma gandesc ce sa raspund la intrebarea asta si sunt atat de multe perspective si puncte de vedere in care se pot da sfaturi incat imi este foarte greu sa raspund. Am incercat sa editez un raspuns de cateva ori dar mi-e foarte greu asa ca am renuntat.

Probabil le-as spune sa se tina de programare si sa traga tare, traim intr-o vreme cand a venit randul programatorilor sa schimbe lumea in care traim. Suntem abia la inceputurile unei ere de glorie a tehnologiei si a comunicatiilor, internetul este doar la inceput si inca nu s-a maturizat, sunt vremuri entuziasmante si extrem de interesante pentru oricine care lucreaza in aceasta industrie si urmeaza vremuri si mai interesante. Este mai usor ca niciodata pentru grupuri din ce in ce mai mici de oameni sa inceapa sa schimbe lumea in feluri semnificative.

Daca cineva are intrebari mai concrete, va rog, nu ezitati. :-)

Multumim Vivi.

 Comentarii (4)

Categorii: interviu

Interviu cu Octavian Costache - partea intai

Cosmin
Cosmin Negruseri
14 decembrie 2007

Daca dai un Google search dupa romani ce lucreaza la Google probabil o sa il gasesti pe Octavian Costache, cunoscut de prieteni si de cei de prin blogosfera romaneasca ca Vivi. Prima data cand am vorbit cu el a fost parca in 2005 dupa un ONI by Net cand eram foarte curios de rezultate, si apoi l-am mai intalnit cand era in vizita la GooglePlex. Apropo de asta e interesant cum atat de multi olimpici internationali au ajuns sa lucreze la google, pe langa lista de angajati full time de aici , cel putin alti 8-9 olimpici au facut internshipuri pe vara. Vivi are un CV variat si cu realizari cum ar fi premii la olimpiadele de informatica, premii la concursul internetics de webdesign, premiant si apoi participant in comisie la concursul infoeducatie, realizarea impreuna cu Irina Dumitrascu a siteului doizece.ro , cel mai mare site de jocuri online din Romania, pe care l-a vandut inainte de a se angaja la google companiei neogen, are un blog ce e intre primele 50 de bloguri din Romania, a fost asistent la cursuri de algoritmica si instructor la cursuri Cisco. Tot Vivi a initiat ONI by Net , partea online a olimpiadei natinale de informatica. Astfel am fost sigur ca un interviu cu el ar fi foarte interesant. Acum postez doar prima parte a interviului.

Cum ai inceput cu informatica?
In clasa a 5-a am vazut primul PC XT la mama la serviciu. Pe vremea aia doar ma jucam, ne-am cumparat un HC90 pe care incarcam jocuri de pe caseta. Probabil primul meu program a fost un program in Basic cu care puteam sa desenez. Am desenat o masina si am salvat-o pe o caseta. :-) In clasa a 7-a am inceput sa fac informatica la scoala si mi-am dat seama ca sunt bun la rezolvat probleme si algoritmi. Intr-a 9-a am dat la clasa de informatica pentru ca era considerata cea mai buna clasa din liceu. Am inceput sa merg la olimpiade si cam de aici a inceput totul.

Scriai in pagina personala ca ai fost si la concursuri la fizica cand erai tanar? De ce nu ai continuat pe calea respectiva?
La fizica era prea multa teorie de studiat iar eu sunt lenes din fire. Concursurile de informatica aveau mai putine teoreme si teorii in spate. In timp ce la fizica provocarea era sa faci conexiuni intre teorii si demonstratii si trebuia sa memorezi multa informatie, la informatica provocarile erau mult mai aproape de rezolvarea pura de probleme unde nu este nevoie de un fond teoretic atat de mare. La informatica puteai rezolva probleme si fara sa le demonstrezi sau fara sa ai fondul teoretic, deci puteam sa fiu mai lenes pe partea de pregatire. :-)

Ce ti-a ramas din viata competitionala?
Algoritmii. Fundatia mult prea solida de structuri de date si algoritmi este, cred eu, lucrul care pana acum mi-a folosit cel mai mult. Inclinatia catre rezolvare de probleme si modalitatea de a le aborda, deprinse dupa ani buni de competitie, au devenit, cred eu, parte din personalitatea mea datorita olimpiadelor si acum imi influenteaza viata (mai ales cea profesionala).

Prietenii pe care mi i-am facut la concursuri sunt un alt lucru care mi-a ramas, atat dintre elevi cat si dintre profesori. Cu multi dintre ei m-am intalnit over and over again, i-am intalnit in facultate, i-am intalnit la Google si probabil ne vom mai intalni pe unde o sa ne mai ducem.

Mai tii minte vreo problema frumoasa?
Probabil cea mai placuta amintire este o problema de la ONI in clasa a 9-a pentru ca am fost singurul care am rezolvat-o corect. :-) Nu mai tin minte problema exacta, era ceva despre oameni catre trebuiau grupati in niste lifturi.

Ai avut pe parcursul vietii oameni de la care ai invatat mult sau consideri ca ai invatat totul singur?
Oamenii de la care am invatat au fost foarte importanti. Nu neaparat pentru ceea ce stiau, ci pentru ca mi-au folosit drept modele, motivandu-ma sa fiu mai bun, sa fac mai mult, sa vreau sa invat si sa vreau sa ma autodepasesc. Cea mai puternica motivatie, pentru mine, este atunci cand admir pe cineva si vreau sa fiu si eu ca respectivul.

Nu au fost foarte multi, poate trei sau patru oameni pe care i-am admirat din anumite puncte de vedere, insa pentru mine au fost foarte importanti.

Cum ai inceput cu crearea de siteuri?
Intr-o tabara la Galaciuc Marius Deak a tinut un curs de HTML unde am facut primul 'site' cu Netscape 2.0, Notpad si Photoshop 3.5. :-) Apoi daca tot stiam HTML, am facut site-ul Divertis. Fratele meu era fan si voia neaparat sa ajunga sa vorbeasca cu cei din grup. M-a convins si pe mine ca a le face un site oficial pe degeaba este o modalitate buna de a ajunge sa ii cunoastem si pentru mine un lucru bun in a imi exersa noul dobandit skill de a face pagini web.

Intamplator a iesit bine, a ajutat foarte mult si renumele Divertis, iar cu nou castigata incredere am descoperit ca pot face niste bani de buzunar din chestia asta asa ca am continuat sa fiu freelancer.

Apoi pentru o vreme, cel putin parte din motivatia de a face noi site-uri era si nevoia de a avea un proiect cu care sa merg la Galaciuc si sa (incerc sa) castig ceva. Ma amuz uneori cand ma gandesc ce motive copilaresti m-au indemnat sa fac lucruri care mai apoi au avut o influenta fundamentala in viata mea.

La infoeducatie ai fost atat participant cat si in comisie, cum se compara cele doua roluri?
Sunt satisfactii in ambele. Ca participant este adrenalina concursului, dorinta de a castiga, dorinta de a dovedi ca tu esti cel mai bun si evident satisfactia atunci cand castigi. :-) Ca si membru al juriului sau al comisiei satisfactiile sunt mai putin intense dar intr-un fel mai... mature. Ai ocazia sa influentezi felul in care se intampla unele lucruri, sa le faci mai bine, sa ai grija ca toate lucruri sa mearga cum trebuie. Ai satisfactia de a insemna ceva pentru participanti, fie ca ei sunt constienti de asta sau nu.

Cred ca fiecare rol isi are varsta lui. Ca adolescenti ne dorim sa dovedim, sa aratam lumii ce putem si ce stim. Dupa ce dovedim (mai ales noua insine) de ce suntem in stare vine momentul in care ne dorim sa ne lasam amprenta asupra lumii, sa influentam vieti si schimbam lumea, nu doar pe noi insine. Nevoia de a dovedi ceva se schimba intr-o nevoie de a face bine umanitatii.

Ce proiecte pe care le-ai vazut la infoeducatie ti-au ramas in minte?
Ironic, multele proiecte facute pentru lectii la Istorie si la fel de multele 'site-uri ale liceului'. Ambele scopuri nobile care aproape niciodata nu au fost facute pentru elevi ci intotdeauna pentru a lua o nota la Istorie sau la Informatica. Fiecare dintre ele ar fi putut probabil fi site-uri excelente care sa castige premii daca ar fi stiut sa fie mai putin stereotipice si daca ar fi fost facute pentru a fi utile, nu pentru note.

Cate au continuat sa existe si sa fie de succes dupa concurs?
Vrei sa laud InfoArena, sau de ce ma intrebi asta? :-) Cred ca au existat cateva: divertis, e-scoala, todom.ro, site-urile liceelor de care vorbeam la intrebarea anterioara. Nu am urmarit istoria recenta a concursului, probabil ar fi o statistica interesanta de realizat.

Cum se compara concursuri ca Infoeducatie cu Olimpiadele de Informatica?
Cred ca au scopuri foarte diferite si cel mai probabil se complementeaza. Olimpiadele ofera o motivatie pentru pregatirea teoretica, structuri de date si algoritmi absolut necesare unui programator bun. Infoeducatia ofera pregatirea practica, motiveaza spiritul antreprenorial din fiecare dintre noi, dorinta de a face si realiza un proiect al nostru. Daca vrei, olimpiada de informatica te moviteaza sa inveti CUM sa faci, in timp ce Infoeducatia te motiveaza sa inveti CE sa faci.

Care sunt caracteristicile unui website reusit?
Considerand ca nu te referi la site-urile de prezentare sau la cele experimentale, as spune ca un website reusit este un site care acopera cel mai bine o anumita nevoie a utilizatorilor sai. Felul in care este facut, culorile, realizarea tehnica, grafica, tehnologia din spate, sunt importante doar ca si mijloace pentru a atinge singurul si cel mai important scop: de a fi cea mai buna unealta in mana utilizatorului caruia i se adreseaza.

Suna un pic abstract, dar tot ce vreau sa spun este: atunci cand faceti un site, judecati-l din punct de vedere pragmatic si utilitar.

Ce l-ai sfatui pe cineva care vrea sa se apuce de creearea de siteuri web ca metoda de abordare generala, tehnologii, tooluri, concepte de design samd?
Vezi intrebarea anterioara. :-) Toate cele pe care le insiri tu conteaza doar in contextul in care servesc cel mai bine utilizatorul. Tehnologia este importanta doar pentru a fi sigur ca site-ul tau scaleaza si functioneaza corect. Tool-urile sunt importante doar in contextul in care te ajuta sa faci lucrurile mai repede. Conceptele de design doar in contextul in care stiu sa transmita mesajul in cel mai usor mod cu putinta. Insa in the end, ele sunt doar mijloacele si nici una din ele nu te va ajuta sa transformi intr-un succes un site care nu este facut pentru utilizatori.

Este ca si cum m-ai intreba ce masina este cea mai potrivita pentru a ajunge undeva. Daca iti este clar unde vrei sa ajungi si cat de repede, poti sa iti alegi masina cea mai potrivita pentru asta. Insa degeaba ai o super masina daca nu ai o destinatie si un scop. O sa poti sa te plimbi cu ea prin cartier sa te dai mare ca stii Ruby on Rails, dar dupa doua ture o sa o bagi in garaj si o sa te intorci de unde ai plecat.

De exemplu, doizece.ro era facut cu php+mysql in partea web a site-ului, flash pentru jocuri si java pentru serverul din spate. Puteam la fel de bine sa fie facut in ruby on rails pentru partea web si in C++ pentru server, insa am ales tehnologiile astea pentru ca eram confortabili cu ele, erau usor de folosit si faceau lucrurile de care noi aveam nevoie. Desi am folosit php in aproape toate site-urile pe care le-am facut in Romania nici pana acum nu stiu php decat la un nivel intermediar pentru ca asta era tot ce aveam nevoie.

Deci, ca sa iti raspund totusi la intrebare, invatati ce va este cel mai usor pentru a putea realiza ceva. Php, mySql, Java sunt exemple excelente. Nu uitati insa ca sunt doar tool-uri si nu le acordati importanta decat in masura in care merita. Razboaiele despre care limbaj este cel mai tare sunt de cele mai multe ori inutile.

Povesteste-ne despre un proiect de-al tau ce ti-a placut in mod deosebit in afara de doizece.ro :).
Didactic.ro este un proiect mai putin 'cool' dar care a schimbat foarte mult viata profesorilor ajutandu-i sa comunice si sa impartaseasca teste, lectii, reviste scolare si mult alt continut generat de utilizatori. Timp de doi ani l-am dezvoltat impreuna cu Emil Onea si s-a impus recent ca unul din cele mai vizitate site-uri dedicate educatiei din Romania (http://www.trafic.ro/top/educatie-invatamant/), in contextul in care celelalte site-uri populare sunt in principal site-uri de referate. Cred ca putini oameni stiu ca eu am fost singurul dezvoltator al site-ului asta inainte sa plec din Romania si ca acum este in mare parte neschimbat.

Povestea cu el este interesanta pentru ca este un site pe care l-am dezvoltat pentru Softwin desi ma plateau pentru asta mai putin decat credeam eu ca merit. Cu toate astea l-am facut pentru ca voiam sa fac ceva interesant, credeam in idee, stiam ca trebuie facut si am zis ca mai bine lucrez la ceva si sunt platit mai putin decat sa stau degeaba (si sa nu castig nimic :-) ).

Povesteste-ne despre OniByNet.
In 2000 am facut, pentru prima data la noi, CEOI by NET. Cred ca am ajuns sa il fac eu pentru ca ma ocupam in general de site-ul editiei respective. Cand mi-am dat seama ca se poate, am inceput sa il bat la cap pe Emil sa convinga comisia ca un astfel de concurs pentru ONI poate fi foarte important pentru cei care raman acasa, pentru pregatirea lor, pentru a nu isi pierde exercitiul.

Am insistat mult si am reusit, la inceput destul de timid. In timp am insistat sa facem ONIbyNET din ce in ce mai important si am reusit ca in cativa ani sa aducem castigatorii la baraj cu drepturi egale cu cei de la olimpiada normala. Pentru mine este un fel de victorie personala, dovada ca am schimbat un sistem si ca datorita mie acum viata catorva sute de elevi pasionati este schimbata, chiar si daca foarte putin, in bine.

Partea a doua a interviului va aparea in curand.

 Comentarii (4)

Categorii: interviu

Vivi despre olimpici

Cosmin
Cosmin Negruseri
11 decembrie 2007

Vivi a scris pe blogul lui un post misto despre utilitatea olimpicilor intr-o firma de programare. Il gasiti aici .

E interesant atat postul cat si comentariile legate de el. Voi ce parere aveti?

 Comentarii (11)

Categorii:

Olimpicul de la Facebook

Cosmin
Cosmin Negruseri
10 decembrie 2007

In filmul despre Here comes another bubble ce l-am pus recent pe blog, am vazut o fata cunoscuta de pe topcoder. E vorba de Adam D'Angelo , el este acum Chief Technical Officer al Facebook (reteaua sociala hot a momentului). I-am gasit destul de repede profilul pe linkdedin.com care arata cam asa:

Facebook:
Built the initial ad serving infrastructure, optimized product code and databases for scalability as traffic increased, built the logging infrastructure for feed, and analyzed data. Created an rpc layer that led to increased development speed, easier maintainability, and language independence for most new services we later developed. Set up the engineering hiring process.

Honors and awards:
Finalist, Topcoder Collegiate Challenge, 2005
2nd in North America (team of 3), ACM International Computer Programming Contest, 2004
1st in North America (team of 3), ACM International Computer Programming Contest, 2003
Silver Medal, International Olympiad in Informatics, 2002

Il consider pe Adam un exemplu pentru cei care spun ca algoritmica/olimpiadele nu au importanta in programare. Probabil ca nu au importanta cand faci o aplicatie simpla de baze de date, dar cand apar sisteme mari si nevoia de eficienta, cativa olimpici pot fi foarte utili. (Prin olimpici eu inteleg elevi sau studenti care au avut rezultate la un concurs international, nu unii care au fost la olimpiada pe scoala sau pe judet.)

Mi s-a parut interesant ca pagina lor de joburi contine puzzleuri ce imi aduc aminte de problemele de la concursurile topcoder. Probabil e mana lui Adam acolo :).

 Comentarii (1)

Categorii:

Romanii la DisneyWorld - partea a treia

Cosmin
Cosmin Negruseri
05 decembrie 2007

In aceasta serie de interviuri povestim despre concursurile de pe TopCoder cu cei trei romani care au participat la finala concursului TopCoder Collegiate Chalenge din aceasta toamna. Puteti citi celelalte doua interviuri aici si aici . Pe Mircea probabil il stiti deja si nu cred ca mai are nevoie de prezentare. In acest interviu el ne povesteste despre formatul competitiilor de algoritmica. Cred ca va fi interesant sa cititi opinia romanului cu cel mai mare rating la algoritmica despre aceste concursuri.

Mircea Pasoi

Povesteste-ne putin despre formatul concursului de algoritmica.
Formatul general Topcoder este urmatorul: ai 75 de minute sa faci 3 probleme, una usoara de 250 de puncte, una medie de 500 de puncte si una grea de 1000 de puncte. Cand trimti o problema punctajul pe care il primesti depinde de cat de repede ai rezolvat-o. Dupa cele 75 de minute ai inca 15 minute de "challenge", moment in care te uiti in sursele celorlati concurenti si incerci sa gasesti greseli. La sfarsit se evalueaza probleme si primesti puncte pentru o problema doar daca ai trecut toate testele.
Deaorece la o finala problemele sunt mult mai grele decat la un SRM obisnuit, faza de "coding" este de 85 de minute.

E a doua oara cand te califici la faza finala a concursului TopCoder Collegiate Challenge. Se simte vreo diferenta fata de anul trecut?
Cred ca rating-ul si rezultatul de anul asta dovedesc ca fost am mult mai bine pregatit ca anul trecut, si stiam si la ce sa ma astept de data asta. Chiar si asa, mai am mult de lucrat pana cand sa ma pot pune cu cei mai buni.

Cum se compara acest concurs cu celelalte concursuri internationale la care ai participat? Ca timp, stres, tipuri de probleme, strategie in concurs, concurenti sau locatie?

Topcoder este foarte diferit de concursurile de liceu. In primul rand cand treci de la concursuri de 5 ore la concursuri de 75 de minute diferenta e dramatica , si iti ia ceva sa te acomodezi. Un lucru foarte important la Topcoder este sa scrii cod corect, scurt si fara bug-uri. Poate pentru multa lume suna trivial, dar este mult mai greu decat pare! Concursurile de liceu nu te ajuta prea multe la chestiile astea, fiindca daca ai 5 ore iti permiti sa scrii incet, sa faci debug si mult testing. Plus ca uneori nu conteaza daca ai bug-uri ca tot iei puncte. Asa ceva nu merge la Topcoder. Eu unul am fost de mult ori surprins de solutiile altora care erau mult mai scurte si mai clare decat ceea ce faceam eu. Asta m-a ajutat mult sa-mi imbunatatesc implementarile. E surprinzator cate de usor e sa te complici sau sa faci chestii redundate cand scrii o sursa. Cred ca asta e si diferenta dintre cei din varf si restul lumii. Nu sunt mai buni pentru ca stiu sa scrie cod mai repede si mai mult, sunt mai buni pentru ca gandesc mai eficient si stiu sa scrie cod cat mai simplu.
Experienta de asemenea conteaza foarte mult. Cand ai 4-5 ore iti permiti sa incerci sa explorezi mai multe idei de rezolvare, lucru care rareori se intampla la Topcoder. Stai intre 5 si 15 minute sa te gandesti si apoi te apuci sa implementezi. Daca n-ai plecat pe ideea buna, de obicei nu mai sanse sa rectifici greseala. Mai bine treci la alta problema. Citeam pe undeva ca marii maestri la sah sunt mai buni decat restul nu pentru ca pot analiza mai multe posiblitati decat majoritatea lumii, ci pentru ca stiu sa analizeze cele mai bune posibilitati. Ceva de genul asta e valabil si la Topcoder.
O alta chestie destul de diferita sunt problemele, care de obicei sunt ceva mai simple decat cele pe la concursurile de liceu (ma refer in principal la 250 si 500, deoarece 1000le de obicei e comparabil cu problemele grele de liceu). Mindset-ul pe care trebuie sa-l ai cand rezolvi la Topcoder este destul de diferit de cel din liceu unde trebuie sa stai ceva timp sa te prinzi de solutia cea mai eficienta, de obicei trecand prin mai multe solutii din ce in ce mai eficiente. Aici trebuie sa te gandesti din prima care e solutia pe care o pot implementa cel mai repede si care se incadreaza in timp! Eu la inceput mereu aveam tendinta sa ma complic in rezolvari, sa optimizez unde nu era cazul sau sa ma gandesc direct la idei mai complicate decat era nevoie.
Per total, eu consider Topcoder ceva mai distractiv decat concursurile de liceu si o provocare mult mai mare in acelasi timp. Un lucru foarte important este ca oamenii cu care concurezi chiar sunt cei mai buni din lume, nu cei mai buni elevi de liceu (diferenta e ceva de genul ONI vs. IOI).

Cum te-ai pregatit pentru concurs?
Din pacate nu m-am mai pregatit deloc in ultimul an in mod special pentru Topcoder. Prin asta ma refer sa intru in arena si sa fac SRM-uri vechi. In schimb m-am pregatit pe infoarena si pentru ACM si se pare ca a fost destul de folositor pana acum.

Este greu sa te calfici in finala?
Da, este destul de greu. Cum am zis concurezi cu cei mai buni din lume pentru 48 de locuri. Poate parea mult, dar pe masura ce Topcoder devine din ce in ce mai popular e din ce in ce mai greu sa te califici Acum 2-3 ani nu erau mai deloc rusi la finale deoarece nu stiau de Topcoder, iar acum sunt in jur de 15 oameni din Rusia in mod constant. Cu China e aceeasi poveste si mai sunt si alte tari. Din fericire incepand cu TCO 2008 vor fi 72 de locuri. Oricum, oricat de bun ai fi, fara un pic de noroc n-ai cum sa te califici :)

Ce abilitati trebuie sa aiba un concurent puternic la algoritmica?
In mare parte ar fi ce am mentionat si mai sus:

  • sa gandesti repede si sa stii ce idei de rezolvare sa incerci (experienta ajuta mult in cazul asta)
  • sa scrii cod scurt si fara bug-uri intr-un ritm decent (nu trebuie sa-ti zboare degetele pe tastatura)
    O chestie deseori neglijata este cat de bine iti controlezi emotiile. Este foarte important sa fii cat mai relaxat la astfel de concursuri, si mai ales la TC unde stresul este ceva mai mare din cauza timpului putin.

Care a fost problema ta favorita din concurs?
Problema de 1000 din Room 3 pe care am facut-o doar eu si inca o persoana si cu ajutorul careia m-am calificat in cei 8 din finala.

Ce ti-a placut la DisneyLand?
Parcurile Disney :) Ar fi fost si mai tare daca ne lasau 2 zile in loc de 1 sa vedem toate parcurile. Daca cineva vrea sa vada poze pe care le-am facut la Disney si la TCCC poate sa intre aici .

Ce iti place la TopCopder?
Cam tot ce am explicat mai sus :) Trebuia sa te ascult si sa ma fi ocupat inca din liceu serios de Topcoder. :P

Cu acest post am terminat seria de interviuri despre concursurile topcoder. Sper ca acestea v-au motivat sa incercati competitiile care sunt foarte misto si pe toate gusturile. Ca liceean sau ca student este o modalitate foarte buna sa inveti ceva nou, sa cunosti oameni foarte buni, sa faci un ban in timpul liber si sa intrii in contact cu recruiteri pentru companii puternice ca Google, Microsoft, NVidia, Yahoo, AMD, Intel, City Group, UBS si altele. Paul a anuntat deja pe forum , dar vreau sa reamintesc si eu elevilor de liceu ca se apropie turneul TopCoder pentru liceeni. Anul trecut s-au calificat doua echipe din Romania. Una de la Colegiul national "Liviu Rebreanu" - Bistrita (liceul meu :) ) si alta de la ICHB, a doua echipa nu a putut sa participe pentru ca turneul era in conflict cu alt concurs. Sper ca anul asta sa se califice si mai multe echipe din Romania. Bafta!

 Comentarii (4)

Categorii: interviu

Bubble bubble

Cosmin
Cosmin Negruseri
05 decembrie 2007

via Mircea

 Comentarii (5)

Categorii: video

Romanii la DisneyWorld - partea a doua

Cosmin
Cosmin Negruseri
04 decembrie 2007

Continuam seria de interviuri cu romanii ce au participat la finala concursului TopCoder Collegiate Challenge din toamna asta. Puteti citi prima parte aici . In aceasta parte Lucian Codrut Lazar ne va povesti despre concursurile de componente software si in special despre concursul de design software la care el s-a calificat in finala. Lucian are multa experienta cu aceste concursuri, a participat la 49 de competitii, a fost reviewer (membu al comisiei de corectori) la mai mult de 50 de componente, si a fost de doua ori reviewer la faza finala a concursului. In toamna asta a participat ca si concurent.

Lazar Codrut Lucian

Poti sa ne spui cate ceva despre concursul de software design? In ce consta el? Care sunt criteriile de notare, si care e partea dificila la un asemenea concurs?
In fiecare saptamana (de obicei joi) sunt puse mai multe componente (Java sau C#) pentru care trebuie facut design (sau development) intr-o saptamana. La design se da un document cu cerinte si trebuie facuta diagrama de clase, o diagrama de use case si diagrame de secventa pentru metodele mai complexe. Diagrama de clase contine toate clasele de care e nevoie pentru a implementa cerintele, cu toate metodele si campurile folosite. Toti pasii si toate constrangerile trebuie documentate (documentatia e orientata spre developeri). Mai trebuie un document Word, cu diverse discutii: thread-safety, algoritmi, demo, ... Design-urile sunt corectate de 3 review-eri. Sunt sectiuni pentru abordarea folosita (sabloane folosite, componente reutilizate, class scope, easy-to-use) - asta e partea faina dintr-un design; sectiuni pentru documentatie - aici e mai multa munca patriotica; si sectiuni pentru modul de prezentare. Sa gandesti strucura componentei poate fi mai greu la inceput, dar asta e partea faina a concursului. Apoi intervine partea de documentatie, care ia mult timp si devine enervanta, fiindca stii ce vrei sa faca fiecare entitate sau ce sa scrii in documentul Word, doar ca trebuie sa explici complet si asta ia mult timp.
La development sunt implementate design-urile de pe locul 1. Se face unit testing si se scrie documentatie orientata utilizator.

De ce software design si nu oricare dintre celelalte sectiuni (algoritmica, software development, marathon ...)?
Imi erau familiare sabloanele de proiectare si lucram la un framework pentru desenare de diagrame UML, deci stiam destul de bine UML. Sa incep la development mi-ar fi fost mai greu fiindca trebuia sa invat JUnit (sau NUnit) si parca nici nu prea am spor la implementare. La algoritmica am cam renuntat de cand am intrat la facultate, si oricum eram mult in urma ca nivel de cunostinte (plus ca tastez incet).

Cum ai recomanda cuiva sa inceapa sa participe la aceste competitii?
Sa citeasca GoF (cateva sabloane trebuie stiute: Strategy, Template Method, Abstract Factory, Observer, Adapter, Facade, Decorator). Trebuie intelese diagramele UML de care am zis mai sus. Un tutorial cred ca ajunge. Apoi intervine practica. In plus mai sunt forumuri publice, sau private pentru fiecare componenta. E bine sa intrebi orice nu e clar (despre sistem, despre componenta, despre diagrame, ...), fara frica de a parea penibil. In principiu, daca intrebi ceva cat de cat rezonabil, iti raspunde cineva repede si treci peste neclaritati.

Cum se ajunge la nivelul la care te poti califica la o faza finala pentru un asemenea concurs? Citesti carti? Proiecte facute de altii? Care e metoda de invatare?
Inceputul e mai greu - asta poate e valabil la orice tip de competitie. Pe masura ce faci mai multe componente devii mai sigur pe tine, plus ca inveti pe parcurs si din greseli. E bine sa te uiti pe componentele facute de altii. Cel mai bine e sa alegi componente facute de cei cu rating mare, ca sa nu dai peste abordari dubioase, care mai mult te baga in ceata. In cateva luni ajungi aproape de potentialu propriu, si poti incerca oricand sa te califici la turnee. Doar ca trebuie mai multa munca.

Ce programe software se folosesc in software design in general si la topcoder in particular?
Se lucra in Poseidon, dar acum se trece pe TC UML Tool - utilitar UML facut de TopCoder special pentru concursurile lor. Si un editor de documente in format .rtf.

Care a fost proiectul facut la TopCoder care ti-a placut cel mai mult?
TC UML Tool ;-)
Daca e vorba de componente, nu stiu ce sa zic. Mai recent - Graph Framework de la TCCC a fost interesanta, fiindca am avut libertate. Componentele in care sunt constrangeri de interfete sunt urate, fiindca nu prea e loc de o alta abordare si se rezuma doar la munca pentru documentatie.

De cate ore crezi ca ai nevoie pentru a face un design bun pentru o asemenea competitie?
16-20 ore efectiv. Plus mult timp petrecut citind cerintele, intreband pe forumuri si gandindu-te la componenta in timp ce mergi pe strada sau stai la o cafea.

Stiu ca in primavara ai fost in comisia ce evalua proiectele concurentilor la sectiunea software design pentru concursul TopCoder Open in Las Vegas. Cum e sa fi de partea cealalta a baricadei?
E aproape ca si cum ai face munca acasa, doar ca mergi acolo. Proiectele sunt mult mai de calitate (cel putin cele din top) decat ce vezi de obicei. Si iti ia mult mai mult timp sa la corectezi. Plus ca exista presiunea de a nu face vreo pozna sa dai scor prea mare sau prea mic si sa influentezi rezultatele. Asa ca trebuie sa insisti mai mult sa fii sigur ca ce au facut bine e intr-adevar bine si ce greseli ai gasit sunt intr-adevar greseli. Mie mi-a fost mai mult frica sa nu dau scor prea mare, fiindca la appeal-uri nu poti micsora scorul. Pe review-eri ne-au izolat de concurenti, intr-o camera. Ne-a dat cafea si ceva de rontait. Deci a fost bine.

Ce caracteristici crezi ca trebuie sa aiba un designer bun?
Mi-e cam greu sa raspund la intrebarea asta. Sa poata sa transforme cerinte textuale intr-o structura de clase care lucreaza impreuna pentru a atinge un scop. Nu stiu cum se numeste abilitatea asta. Trebuie sa ai o viziune de ansamblu, sa intelegi cum comunica mai multe componente, sa poti depista ce anume introduce limitari intr-o componenta, la fel cum ai depista unde se produce dead-lock intr-o aplicatie multi-threaded, doar ca lucrezi numai cu diagrame si nu cu cod, deci nu poti scrie teste.

Mersi Luci ca ti-ai facut timp sa raspunzi la intrebari. Maine voi pune online interviul cu Mircea Pasoi.

 Comentarii (1)

Categorii: interviu
Vezi pagina: 12345... 242526272829 3031323334353637383940 (394 rezultate)