Blog infoarena

SQL query - rezolvare

Cosmin
Cosmin Negruseri
07 iunie 2011

Asa cum ati vazut si in comentarii problema admite o rezolvare simpla si eleganta cunoscuta sub numele de nested set model

Facem o parcurgere dfs a structurii ierarhice si asociem fiecarui nod v doua numere start[v] si end[v] care ne spun la ce moment a intrat parcurgerea in nodul v respectiv la ce moment parcurgerea a terminat cu toti fii nodului v si iese din acest nod.

Astfel pentru a vedea ca nodul v e subordonat unui nod u e suficient sa testam daca start[u] < start[v] si end[v] < end[u].

Voi ce probleme interesante de interviu stiti?

 Comentarii (9)

Categorii: interviu

SQL query

Cosmin
Cosmin Negruseri
25 mai 2011

Un coleg de facultate mi-a zis recent o problema interesanta ce a primit-o la un interviu:

Stocati o structura ierarhica de conducere a unei firme in o baza de date MySQL. Scopul este sa se poata raspunde rapid si usor la intrebari de genul este angajatul X subordonat(direct sau indirect) al angajatului Y?

Have fun. Daca stiti ideea solutiei dinainte va rog nu o scrieti in comentarii.

 Comentarii (9)

Categorii: interviu

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

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

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

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

Interviu cu Catalin Francu - partea a doua

Cosmin
Cosmin Negruseri
31 octombrie 2007

In aceasta a doua parte a interviului, Catalin ne povesteste despre MIT, dexOnline, Nilatac, Google si alte lucruri foarte interesante. Daca ati ratat prima parte a interviului, citi-o aici .

De ce MIT si nu alte scoli din state sau din Romania?

Pentru ca MIT-ul a fost singura universitate care m-a acceptat (privind in urma, am avut un noroc fenomenal). La Politehnica din Bucuresti am facut trei ani de zile si au fost cursuri dupa care m-am dat in vant (de exemplu, cel de Structuri de Date si Algoritmi sau cel de Limbaje Formale si Translatoare). Totusi, erau mult prea multe alte cursuri care nu aveau ce cauta in programa obligatorie si pur si simplu am zis ca nu mai vreau sa invat lucruri inutile.

Care au fost cursurile tale preferate in facultate? Ne poti face si o descriere pe scurt?

De la MIT, mi-a placut in mod deosebit cursul de Securitatea Calculatoarelor si Retelelor, care a trecut prin subiecte ca one-way functions, chei publice/private, cookie-uri, spyware, virusi, semnaturi digitale, certificate si multe altele.

Ce cursuri ti-au fost folositoare in viata de programator?

Eu sunt de parere ca practica intr-o companie este foarte deosebita de teoria invatata in scoala. Am luat cursuri de criptografie, algoritmi de aproximare, procese stocastice, probabilitati, limbaje formale si niciunul nu mi-a folosit in mod direct. Mi-ar fi folosit daca as fi scris un client de ssh sau un sistem de modelare financiara, dar nu am avut ocazia sa aplic atat de direct lucrurile invatate la un curs. Indirect, insa, toate mi-au fost folositoare pentru ca m-au invatat concepte noi si, cand m-am izbit de o problema noua, a fost mai usor sa o reduc la ceva cunoscut. De exemplu, nu-mi mai amintesc toti algoritmii studiati la cursul de criptografie, dar mi-au ramas notiuni fundamentale de algebra modulara si teoria numerelor, de care m-am tot izbit in practica.

De cati ani esti in USA?

Din 1999.

Te simti ca acasa aici?

Cred ca oriunde traiesti mai mult de o luna - doua devine acasa.

De ce ti se face dor?

In primii ani petrecuti in America, mi-era dor de Romania. Acum, pe langa asta, cand sunt in Romania mi-e dor de locurile si de prietenii de aici. Cu alte cuvinte, din cauza ca am trait si sunt legat de doua locuri, oriunde m-as duce mi-e dor de ceva. :)

Te vei mai intoarce vreodata in Romania?

Categoric! Ne-am straduit foarte mult sa ne intretinem relatiile personale din Romania.

Ce e dexOnline?

Pentru oameni, este un dictionar explicativ roman online. Pentru mine, este cea mai mare realizare profesionala a mea.

Cum ai inceput cu acest proiect?

In vara lui 2001, am adus cu mine din Romania un dictionar explicativ (DEX). Pe de alta parte, foloseam intens Webster, dictionarul explicativ englez online. M-am gandit ca ar fi cazul sa existe si o pagina similara pentru limba romana.

La acea vreme, eu nu aveam practic nici una din cunostintele necesare. Stiam putin HTML si aveam o idee despre ce inseamna o pagina dinamica, dar cam atat. Restul, PHP, Apache HTTP, MySQL, CSS, template-uri Smarty si altele le-am invatat cu timpul.

Cat timp crezi ca ai petrecut scriind cod pentru proiect?

Mi-e greu sa fac o estimare. Lucrez de sase ani si am avut saptamani in care n-am facut nimic, saptamani in care am scris cod 30-40 de ore pe saptamana si saptamani in care m-am ocupat de treburi care tin de DEX online, dar nu de programare (de exemplu, introducerea sau moderarea de definitii). Nici numarul de linii de cod nu este o masura buna, pentru ca am aruncat mai mult decat am folosit (de exemplu, prima versiune a serverului era scrisa in Perl).

Care este cel mai frumos moment legat de dexOnline pe care l-ai trait?

Cred ca a fost in 2004, cand echipa a terminat de introdus DEX-ul. Era doar un inceput (20% din numarul de definitii si mult mai putine functii pentru cautare decat azi), dar am simtit cu totii o satisfactie enorma pentru ca am muncit mult si pentru ca toata lumea ne credea nebuni. Astazi avem mult mai multe definitii, DEX online stie sa flexioneze cuvinte, de curand am adaugat si cautarea full-text si realizarile astea pot umbri putin acel prim pas. Dar fara el n-am fi ajuns unde suntem azi.

Spune-ne alt proiect interesant la care ai lucrat.

Am scris un motor de anti-sah pe care l-am botezat "Nilatac" (nu prea creativ, dar e prea tarziu sa-l mai redenumesc). Anti-sahul este o varianta de sah in care captura este obligatorie, iar scopul este sa iti pierzi toate piesele (inclusiv regele, care nu are un statut special). Voiam sa scriu un program de sah care sa stea conectat la FICS (http://freechess.org) si mi-am ales varianta asta, anti-sah, pentru ca era mai simplu de implementat: nu exista sah, nu exista rocada, iar regele poate fi capturat. Spre surprinderea mea, am descoperit ca varianta nu este lipsita de complexitate si frumusete. Jucatorii de varf spun chiar ca anti-sahul se poate masura cu sahul in complexitate.

Am lucrat la Nilatac din 2001 pana prin 2005 si la inceput singurul algoritm pe care il stiam era alpha-beta. Am scris un program cu acest algoritm, l-am conectat la FICS foarte sigur pe mine si... surpriza: multi jucatori umani il bateau frecvent, iar calculatoarele nici nu discutau cu el. Asa am fost silit sa invat multe alte tehnici, de la carti de deschideri pana la tabele de finaluri si de la o reprezentare mai eficienta a tablei de joc (rotated bitboards) pana la un algoritm complet nou de cautare a arborelui de joc, (Proof Number Search).

O particularitate interesanta este ca arborele de joc pentru anti-sah este mai mic decat cel pentru sah, din cauza ca initiativa este foarte importanta si o greseala poate duce la pierderea fortata a jocului (cel care a gresit o data poate fi obligat sa captureze piesa dupa piesa pana pierde partida). Din aceasta cauza, lumea spera ca jocul poate fi rezolvat complet. Dupa mutarea 1. e3, se pare ca negrul nu are un raspuns care sa echilibreze partida. Mi-am adus si eu o mica contributie, rezolvand cateva linii din deschidere, iar acum codul si cartea de deschideri sunt disponibile pe internet.

Cum ai ajuns la Google?

Am fost acceptat ca intern in 2001, la recomandarea fratelui meu si a advisorului meu de la MIT. in 2002 m-am angajat propriu-zis, dupa ce am absolvit facultatea.

Cum a fost viata de programator la Google? Ce iti placea cel mai mult?

Disciplina programarii era extraordinara. Cu totii stim ca e bine ca, atunci cand dai peste un bug in cod, nu e bine sa-l ignori. Fie il repari, fie il raportezi autorului, fie cel putin introduci un raport in bugzilla. Dar la Google lucrul asta chiar se intampla :) Cand scrii o functie noua, care poate fi folositoare si altor echipe, nu pui codul in modulul echipei tale, pe care celelalte echipe nu il folosesc, ci in modulul comun. Lucrul asta cere mai mult timp, pentru ca trebuie sa compilezi si sa rulezi teste suplimentare, dar este atitudinea corecta si Google o incurajeaza.

In general, mi-a placut filozofia lor de a face lucrurile bine din prima, chiar daca dureaza mai mult. Fiecare linie de cod trebuie vazuta de cel putin inca o persoana in afara de autor. Asta ridica probleme cum ar fi ca, dupa ce termini de scris o bucata de cod si i-o trimiti unui coleg ca sa ti-o revizuiasca, dureaza cateva ore pana primesti raspunsul si trebuie sa-ti gasesti altceva disjunct la care sa lucrezi pana atunci. Dar beneficiile sunt mari, pentru ca multe buguri sunt gasite inca inainte de a fi adaugate la repository.

De ce ai plecat?

Am vrut sa am o perioada mai lunga in care sa ma pot ocupa cu norma intreaga de DEX online si de alte proiecte personale (programare, dar si din alte domenii).

De ce programare si nu cercetare?

Probabil tot Google e raspunsul. :) M-ar fi atras un Ph.D. si o cariera academica, dar mi-a fost imposibil sa dau cu piciorul ocaziei de a lucra la Google.

Cum e organizat mediul in care lucrezi? Ce configuratie de calculator? Ce sistem de operare, ide, etc.?

Ca sistem de operare, am pornit cu RedHat in 1999 si am continuat pe aceeasi linie (azi rulez Fedora). M-am tot gandit sa incerc si alte distributii, dar viata parca e prea scurta ca sa o pierzi instaland sisteme de operare... Un IDE nu folosesc, pentru ca nu exista unul bun pentru dezvoltare de pagini de web. As vrea ceva cu suport pentru PHP, HTML, CSS, MySQL, Javascript si, desi am incercat Eclipse si IntelliJ, niciunul nu pare sa se potriveasca. Asa ca am ramas tot in stadiul de terminal text + emacs si nu pot sa zic ca imi lipseste ceva.

Poate un lucru amuzant e ca n-am avut niciodata un CD sau DVD de instalare pentru Fedora. intotdeauna am creat un CD minim de boot, dupa care instalarea propriu-zisa am facut-o prin retea.

Ce calitati are un programator bun?

Lucrurile astea le-am invatat si eu de-abia dupa ce am iesit din scoala si am inceput sa lucrez la Google. Descoperi ca una este programarea de olimpiada sau o tema de facultate, unde practic lucrezi ca un hamster intr-un acvariu, si cu totul altceva este lucrul intr-o echipa. Bunaoara, un principiu de baza la Google era ca, daca cineva vine si te intreaba ceva, trebuie sa-ti faci timp sa-i raspunzi, chiar daca si tu ai proiectele si termenele tale. Este mai bine sa aveti amandoi un randament de 80-90% decat sa ai tu un randament de 100% si colegul tau sa nu stie ce are de facut.

La fel, este important sa comunici cu restul echipei, sa stii la ce lucreaza ceilalti si ceilalti sa stie la ce lucrezi tu, nu neaparat la nivel de ora sau zi, dar cel putin la nivel de saptamana. Este important ca toata lumea care lucreaza la un proiect sa adopte acelasi stil de formatare a codului. Un programator bun trebuie sa poata citi codul altuia si sa incerce sa-si faca codul cat mai inteligibil de catre altii (graba nu este un motiv sa nu adaugi comentarii acolo unde codul nu este evident).

Desigur, si calitatile individuale sunt importante. Trebuie sa fii ordonat ca sa-ti poti citi propriul cod dupa cativa ani. si asta cere efort, pentru ca peste cativa ani practic vei fi o cu totul alta persoana si de regula una mai inceata la minte. :) Trebuie sa nu-ti fie frica de un limbaj nou, dar nici sa nu extragi doar strictul necesar din el. Bunaoara, multa vreme dupa ce am invatat Java, m-am ferit sa folosesc mecanismul de exceptii. Cu timpul, le-am inteles avantajele si am invatat sa le folosesc pentru a face codul mai frumos si mai robust. De asemenea, trebuie sa ai rabdarea sa te gandesti de doua ori inainte sa implementezi o data.

Care sunt siteurile tale preferate?

Ca tot romanul, citesc stirile din sport in fiecare zi :) Pentru asta, ma duc la http://onlinesport.ro. Citesc stirile pe http://hotnews.ro si pe http://news.google.com. Evident, de cautat caut cu Google, probabil de vreo suta de ori pe zi, dar asta nu punem la socoteala, e ca si cum ai scrie in CV ca stii sa scrii si sa citesti. Daca am nedumeriri despre Fedora si caut pe Google, de cele mai multe ori ajung la http://fedoraforum.org, care are mereu raspunsurile
potrivite. Pentru generalitati, cel mai des folosesc Wikipedia, un site in fata caruia DEX online pur si simplu paleste.

Ce programe iti fac viata mai usoara?

M-am gandit destul de mult la intrebarea asta si am ajuns la concluzia ca nu prea mai sunt programe care sa imi faca viata mai usoara. Exista website-uri fara care m-as simti legat de maini, cum ar fi http://maps.google.com cand vreau sa merg undeva. Dar ca software instalat pe calculator, nu cred ca imi trebuie mai mult decat un sistem standard, de genul Linux + Firefox + OpenOffice.

Ce hobbyuri ai inafara programarii?

Imi place muzica corala (mi-am si petrecut catva timp culegand niste partituri corale cu un software specializat, numit Lilypond). imi place si sahul, desi ma deprima ca joc mai prost decat in liceu, fiindca am mai putin timp liber. si imi plac jocurile pe calculator (desi asta e o afirmatie foarte generala, pentru ca evident sunt jocuri care imi plac si jocuri care nu imi plac).

Ce va urma?

Restul vietii mele :) E o intrebare foarte generala, dar intamplarea face ca vine la un moment bun. Am luat decizia ca 2007 este ultimul an in care mai lucrez la DEX online. De anul viitor vreau sa incep ceva nou, tot legat de programare, si sunt in cautare de idei.

Vrei sa lasi un mesaj cititorilor blogului?

Cred ca noi toti cei pasionati de informatica avem un noroc formidabil. Este una din cele mai palpitante meserii si cine are putina rabdare si disciplina poate produce multe lucruri folositoare si/sau distractive. Asa este si infoarena.ro: este un site cu un continut valoros si cu o comunitate pe masura.

Daca ne gandim la cate lucruri ne ofera internetul si informatica de-a gata, cred ca e bine sa incercam sa si oferim ceva inapoi. Sunt convins ca toti utilizatorii infoarena au mici proiecte personale (in engleza sunt numite atat de distractiv "pet projects") si i-as incuraja pe toti sa le ofere restului lumii ca software liber.
<br>
Multumim pentru interviu!

 Comentarii (2)

Categorii: interviu

Interviu cu Catalin Francu - partea intai

Cosmin
Cosmin Negruseri
26 octombrie 2007

Odata cu angajarea mea la Google am avut ocazia sa cunosc multi fosti olimpici, pe care ii stiam doar dupa nume, vazandu-i in Ginfo sau in listele cu premii la diverse concursuri. Unul dintre acesti olimpici este Catalin Francu , caruia, la o cina in San Francisco, i-am smuls promisiunea ca va raspunde la cateva intrebari pentru ce avea sa fie blogul infoarena. Acum va voi prezenta prima parte a interviului, dupa o scurta prezentare a lui Catalin.
Catalin este cunoscut in lumea celor pasionati de informatica prin cartea "Psihologia concursurilor de programare", o carte plina de probleme frumoase si deschizatoare de drumuri la vremea ei, si prin "lista lu' Francu", o lista de discutii pe email, unde cativa dintre cei ce au ajuns apoi olimpici internationali la informatica ai Romaniei rezolvau si discutau probleme. Iar in lumea lingvistilor este cunoscut prin proiectul dexonline . Acesta este un wiki (inovator pentru 2001, cand Catalin a inceput proiectul) care contine intreg Dictionarul Explicativ al limbii romane si alte dictionare. In timpul liceului, Catalin a luat o medalie de argint la olimpiada internationala de informatica, iar in timpul facultatii s-a clasat pe locul 7 la etapa finala a concursului ACM ICPC cu echipa reprezentanta a MIT. De asemenea a facut parte din comisia stiintifica a Olimpiadei de Informatica a Europei Centrale din 2000 care s-a desfasurat la Cluj. Dupa terminarea facultatii Catalin a lucrat patru ani ca programator la Google inc.

In aceasta prima parte a interviului, Cata ne vorbeste de olimpiade, de cartea "Psihologia concursurilor de programare" si despre "Lista lu' Francu".

Cum ai inceput cu informatica?

Parintii mei au facut parte din primele generatii de la ICI, ceea ce si-a pus amprenta asupra mea si a fratelui meu. Prin clasa a 4-a am vazut prima oara un calculator ZX Spectrum. Mi-au placut mult jocurile, iar cu timpul am inceput sa ma intreb si cum sunt facute si daca as putea face si eu ceva asemanator. in clasa a 8-a, cand s-a pus problema sa-mi aleg un liceu, deja nu mai aveam dubii.

Erau alte discipline de care erai interesat in timpul scolii?

Da... in dictionar, langa definitia pentru "tocilar" este poza mea :) Am invatat multe prostii care acum imi dau seama ca au fost pierdere de vreme, dar unele materii chiar mi-au placut. De felul meu am fost atras de matematica si fizica. Muzica si biologia erau frumoase, dar erau predate foarte prost.

Cum si ce lucrai pentru olimpiade?

Generatia mea (promotia 1996) n-a avut foarte multe resurse la indemana. Circulau colectii de probleme din anii trecuti, dar comunicarea intre olimpici era de baza, pentru ca unul afla de un algoritm interesant si il raspandea. Manualele domnului profesor Sorin Tudor au fost multa vreme "Biblia" mea; de altfel consider ca la vremea lor au fost pur si simplu avangardiste (si nu stiu cati profesori se pricepeau sa predea notiunile pe care le contineau acele manuale).

Ce persoane au avut o influenta in formarea ta?

Parintii si fratele meu Cristi, in primul rand. Mi-amintesc ca eram prin clasa a 2-a, iar Cristi tocmai invata despre scheme logice si se chinuia sa mi le explice si mie. Mie imi placeau romburile cel mai mult, dar altceva n-am inteles. :) La liceu am avut multi profesori buni de informatica, dar in special doamna Rodica Cherciu si domnul Sorin Tudor. Este adevarat ca un profesor poate sa atraga sau sa sperie un elev, dupa cum isi preda materia. Nu in ultimul rand, la loturile de informatica au fost intotdeauna oameni deosebiti (elevi si profesori). in lumea olimpiadelor mi-am cunoscut multi dintre prietenii de astazi.

Mai tii minte probleme frumoase de la olimpiada?

Mi-a placut intotdeauna, pentru simplitatea ei, problema acoperirii tablei cu L-triominouri (Se da o tabla cu dimensiunea de 2^n \ast 2^n din care s-a eliminat un patrat. Se cere ca restul sa se acopere cu L-triominouri). Am pus de multe ori aceasta intrebare la interviuri la Google si putini au stiut sa o rezolve in 10-15 minute. Problema care m-a determinat sa ma apuc serios de studiul algoritmilor este "Se da un arbore neorientat. in fiecare nod se afla un bec. Initial toate becurile sunt stinse. Prin atingerea unui bec, el si toate becurile vecine isi schimba starea. Sa se identifice o ordine de atingere a becurilor astfel incat in final toate becurile sa fie aprinse."

Ce structura de date iti place cel mai mult?

E greu de raspuns la intrebarea asta. E mai important sa stii la ce e buna o structura de date decat sa-ti placa. De exemplu, am cunoscut oameni care nu suporta listele inlantuite si folosesc intotdeauna vectori, chiar si atunci cand au de facut insertii sau concatenari.
Cand folosesti Java si ambele structuri sunt deja implementate, si trebuie numai sa stii de ce tip sa declari variabila, aceasta reticenta este foarte daunatoare.

Pentru simplitatea implementarii, imi plac mult seturile disjuncte cu compresia caii (folosite, de exemplu, in algoritmul lui Kruskal pentru aflarea arborelui partial de cost minim). Analiza teoretica a complexitatii este foarte subtila.

Sunt olimpiadele folositoare?

Este iarba verde? :)

Cum e de partea cealalta a baricadei in concursurile de informatica, cand participi ca organizator?

Avem mai putin timp liber, pentru ca mereu e cate ceva de facut, dar satisfactiile si placerea sunt la fel de mari. Daca vreun student sau un profesor are un ceas liber, prefera sa implementeze o solutie pentru vreuna din probleme. Nu numai pentru ca e bine sa avem mai multe solutii pentru verificare, ci si din acea dorinta, care ne impinge pe toti la concursuri, de a ne masura fortele cu o problema noua.

Cum ti-a venit idea sa scrii "Psihologia Concursurilor de Programare"?

Domnul profesor Sorin Tudor a venit cu ideea sa-mi impartasesc cateva din experientele de la olimpiade. Pentru ca de aici nu aveau cum sa rezulte mai mult de 10-20 de pagini, m-am gandit sa adaug cateva structuri de date pe care le-am folosit destul de frecvent la concursuri si care nu erau discutate in manualele de liceu.

Cum ai ales structura cartii si problemele?

M-am gandit la cateva structuri de date, implementabile in timp de concurs, despre care elevii nu prea aveau de unde citi. Problemele alese fie exemplifica folosirea acestor tipuri de date, fie subliniaza unele alegeri care tin de psihologia fiecarui concurent. De exemplu, am gasit un algoritm greedy care merge pe toate exemplele mele, dar nu il pot demonstra matematic. il implementez sau nu? Sau am gasit un algoritm lent cu care stiu ca nu o sa iau punctaj maxim. il implementez sau caut altul mai bun?

Cat timp ti-a luat sa scrii cartea si cat de usor a fost sa o publici?

Cateva luni, dintr-o vacanta de vara pana prin noiembrie. Publicarea nu a fost o problema, deoarece ideea cartii a venit tocmai de la Sorin Tudor, care avea propria editura. Mai problematica a fost tiparirea, pentru ca la migrarea pe alt calculator si pe alta imprimanta, se dadea peste cap toata paginarea (pe vremea aceea nu auzisem de LaTeX, de PDF, sau in general de altceva in afara de Microsoft Word).

A meritat efortul?

Fara nici un dubiu! A fost una din primele mele slujbe platite, am castigat un ban facand ceea ce imi placea si a rezultat ceva palpabil si -- din cate aud -- folositor.

De ce ai inceput lista lui Francu?

In 1996 am inceput (sau mai degraba am continuat, de unde l-a lasat fratele meu) un mic cerc de informatica. Cu timpul am inceput sa corespondam si prin email. Emailurile au capatat valoare in sine si am creat o lista de discutii dedicata.

Cum a evoluat lista si discutiile de pe lista de-a lungul timpului?

La inceput, trimiteam probleme, asteptam o saptamana si corectam solutiile trimise. Perioada cea mai buna a listei, zic eu, a fost cand am introdus o notiune de "coeficient" (se numea DFCC si se masura in Dexteri). Dincolo de copilaria numelui, m-am straduit sa nascocesc un coeficient care scadea incet cu timpul, pentru a-i incuraja pe abonati sa trimita solutii la fiecare etapa.

De ce a murit?

Plecarea la MIT a fost "inceputul sfarsitului". Aveam mai putin timp liber si o vreme s-a ocupat Cristi Cadar de lista (de altfel, el a propus aproape jumatate din numarul problemelor). Ocazional au mai contribuit si alti "ilustri" ca Rodica Pintea, Valentin Gheorghita, Mihai Badoiu, Irina Dumitrascu, Bogdan Dumitru, Alex Susu...

Un alt motiv a fost ca elevii care au participat initial la cercul de informatica au absolvit liceul, ceea ce mi-a redus mie motivatia de preparator. :) si nu in ultimul rand a fost aparitia altor site-uri, romanesti si internationale, dedicate problemelor de programare, cu evaluatoare automate etc. Ma bucur mult ca infoarena.ro incorporeaza majoritatea problemelor propuse pe lista, pentru ca ne-am gandit mult la ele si ar fi fost pacat sa se piarda.

A doua parte a interviului va fi publicata in curand.

In contextul interviului cu Cata (cum ii zic prietenii), infoarena are doua proiecte unde este nevoie de ajutorul vostru. Unul este transcrierea cartii "Psihologia concursurilor de programare" in format textile. Altul ar fi cel de transformare a problemelor din Lista lu' Francu in formatul infoarena si de adaugarea lor in arhiva (au mai ramas vreo 10 probleme de adaugat). Aveti mai multe detalii aici si aici .

In poza de mai sus apar Cristi Strat , 'maestru' Catalin, eu , iar cenzurati sunt doi ilustrii necunoscuti :), se dau puncte de karma pe forum pentru cine ii identifica pe cei doi.

 Comentarii (8)

Categorii: interviu
Vezi pagina: 1 2 (12 rezultate)