Blog infoarena
Senatorii si Deputatii lucreaza part time
Vivi recidiveaza. Dupa ce a facut o gramada de siteuri, printre care doizece.ro cel mai mare site de jocuri din Romania sau initiativa cu harta publicitatii acum are un nou proiect personal interesant la care lucreaza. Acesta este harta politicii din Romania in care a agregat date legate de prezenta si legile votate de senatori si deputati. Concluzia in mare e ca prezenta la vot e penibila si ca senatorii si deputatii lucreaza part time!
Puteti vedea datele stranse de el aici si posturi care analizeaza putin datele aici , aici , aici si aici . Ideea proiectului e misto si e o modalitate obiectiva de a prezenta niste date, fara a cobora la nivelul scandalurilor de presa.
In contextul in care in postul anterior vorbeam despre DEX online ce a inceput ca un proiect personal, avem inca un exemplu cu ce poate face un programator. Noi putem sa colectam date, sa le analizam si sa le prezentam in o forma in care pot fi intelese foarte usor. Ar fi misto sa apara multe initiative de genul asta, pornite poate chiar de la membrii infoarena.
DEX online sub capotă
Discutam de mai multă vreme cu Cătălin Frâncu despre proiecte personale şi despre Dex Online . Cu Cătălin am mai discutat pe blogul infoarena aici şi aici . Acum, la mai bine de un an dupa acele discuţii el a scris un articol foarte interesant despre traiectoria acestui proiect. Articolul este destul de lung, dar cred că e foarte interesant şi puteţi învăţa mult din el. De obicei înveţi din experienta proprie şi durează o perioada până treci prin destule proiecte incât să ai o privire de ansamblu. Articolul ăsta poate să vă scurteze acea perioadă. Aşa că luaţi o cană de cafea sau ceai şi vă urez lectură plăcută!
Scopul articolului
Acest articol prezintă diverse aspecte din existenţa de şapte ani a proiectului DEX online. Totuşi, articolul nu este în primul rând despre DEX online. Îl scriu la sugestia lui Cosmin Negruşeri pentru comunitatea infoarena.ro. Intenţia articolului este să disece, pentru foştii şi actualii olimpici la informatică, un exemplu de proiect din lumea reală, pentru a sublinia diferenţele între 1000 de progrămele de câte 100 de linii şi un program de 100.000 de linii, între programarea de unul singur şi lucrul în echipă, într-un proiect cu multe alte faţete decât cea informatică.
Textul pune în lumină particularităţi de natură tehnică, socială, etică şi financiară ale proiectului DEX online. Dintre acestea, voi insista pe latura etică şi socială a proiectului, pentru că de acolo au venit mai multe provocări şi realizări decât din domeniile tehnic şi financiar. Documentul se lansează adesea în judecăţi de natură morală, cu riscul de a plictisi. Sunt de părere că administratorul unui proiect cu oarecare utilitate practică nu poate rămâne amoral, ci trebuie să ia nişte decizii.
Nu recomand nimănui să facă lucrurile exact aşa cum le-am făcut noi. DEX online ar putea fi mai prezentabil. Sau ar putea oferi un corector ortografic pentru Word. Sau ar putea costa 5€/lună pentru accesul nelimitat la definiţii. Sau şi-ar putea răsplăti colaboratorii cu 10 centi pentru fiecare definiţie trimisă. Sau ar putea include un dicţionar urban. Acestea toate sunt hotărâri pe care le ia coordonatorul unui proiect în funcţie de timpul disponibil şi de scopurile echipei sale.
Auto organizarea proiectului
DEX online nu are manageri, nu are avocaţi, nu are contabili, nu are şedinţe, nu are ore fixe. Într-un cuvânt, DEX online nu are o ierarhie. DEX online are un website şi o listă de discuţii pentru voluntari, plus alte câteva unelte secundare (un sistem de gestiune a bug-urilor, un sistem de gestiune a emailurilor de la utilizatori, o pagină wiki practic nefolosită). Oamenii sunt cei mai productivi atunci când le oferi o listă de lucruri pe care le pot face în folosul proiectului şi îi laşi să facă ce le place cel mai mult. Ca urmare, avem unele definiţii care stau necorectate de luni de zile, deşi între timp am corectat mii de alte definiţii. Mie, ca programator, îmi revine sarcina de a crea o interfaţă în care voluntarii să poată lucra eficient. De aceea, îmi petrec mai mult timp lucrând la pagina moderatorului (invizibilă publicului larg) decât la paginile publice.
Este surprinzător ce oameni de calitate poţi aduna dacă menţii o listă de email activă timp de 7 ani. Ei rezolvă multe din problemele care pe mine mă depăşesc. De fapt, am încetat să mă mai consider „conducătorul” proiectului după primele 6 luni; prefer titlul istoric de „fondator” sau pe cel de „coordonator”. De exemplu, primim zilnic emailuri cu întrebări de natură lingvistică la care eu nu aş şti să răspund. Sau ne-am izbit de fineţuri legale. Sau a trebuit să creez o schemă MySQL pentru nişte date pe care nu le înţelegeam la nivel conceptual. Din fericire, pe lista noastră de discuţii există lingvişti, avocaţi şi programatori care ne-au scos întotdeauna din impas. Cu timpul, separarea funcţiilor s-a produs de la sine. De exemplu, sistemul de email are o coadă de mesaje destinate mie, cu cerinţe la care numai eu pot răspunde. La restul mesajelor aproape nu mă mai uit, pentru că alţi voluntari şi-au însuşit această parte a sistemului şi se ocupă impecabil de ea.
DEX online nu a avut niciodată ambiţii pe termen lung sau OKR-uri (obiective şi rezultate cheie). Sună un pic paradoxal, dar poţi avea nişte idei generale despre ce ar trebui făcut, fără să faci din asta o obligaţie. Poţi să te aştepţi să atingi obiectivul X la momenul T fără să promiţi că vei îndeplini obiectivul Y, care depinde de X, la momentul T + 1. De exemplu, am început prin a culege definiţii din DEX. Bazându-ne pe progresul zilnic, am estimat că va dura cam 5 ani să culegem tot DEX-ul (până la urmă a durat doar 3). Dar nu ne-am gândit la modul serios cu ce ne vom ocupa timpul după aceea sau ce vom face cu baza de date odată ce va fi completă. Nu mi-a plăcut niciodată acest gen de presiune, am preferat să nu le-o induc voluntarilor, şi nu se poate spune că am bătut pasul pe loc din cauza asta. Nici unui voluntar nu i s-a părut inacceptabil că am muncit trei ani pentru a culege un dicţionar, nici nu ne-am trezit în vreo dimineaţă sâcâiţi de gândul că trebuie să mai introducem 50 de definiţii şi poate n-avem chef.
Un aspect care poate dezamăgi, dar aşa s-a întâmplat, a fost începutul întâmplător al proiectului. Nu am stat zile în şir să mă gândesc „la ce-aş putea eu munci care să aibă un impact seminificativ pe internetul românesc?”. Abia după ce lucrasem la el vreun an am conştientizat că DEX online ar putea ajunge un site de referinţă. Ideea proiectului mi-a venit în 2001, când eram student în Boston şi foloseam zilnic dicţionare explicative englezeşti online pentru a-mi scrie temele. Pe de altă parte, duceam lipsa unui dicţionar explicativ românesc. Odată am avut o dispută cu un prieten asupra pluralului lui „cratiţă”: el susţinea că este „cratiţe”, iar eu „crătiţi”. Răspunsul, care i-a dat dreptate, a trebuit să aştepte câteva luni până am mers în vacanţă în România. De acolo am venit înapoi cu un DEX, dar m-am gândit că ar fi frumos să existe o variantă pe internet, de pe urma căreia să profite toată lumea, nu doar eu. Dar, având în vedere că după 6 luni de existenţă DEX online cuprindea vreo 50 de definiţii, din care vreo 45 introduse de mine, nu l-am luat foarte în serios. Ulterior, Federaţia Română de Scrabble (F.R.Sc.) a descoperit site-ul şi a început să contribuie masiv cu definiţii. Probabil acolo a fost punctul critic al proiectului şi, privind înapoi, mi se pare că s-a întâmplat un lucru nemaipomenit de improbabil ca 10 oameni să-şi pună încrederea într-un proiect cvasianonim, care ar fi putut merge prost din nenumărate motive. Concluzia acestui paragraf este că inspiraţia vine de unde nu te aştepţi.
Finanţe
DEX online nu vehiculează nici un fel de sume băneşti. Am evitat ca proiectul să aducă orice fel de venituri, din motive multiple.
- Banii aduc discordie. Singurul caz în care poate aş accepta să caut profit de pe urma siteului ar fi dacă toţi colaboratorii proiectului ne-am umple de bani, ceea ce o judecată la rece arată că nu e cazul. Veniturile ar fi imposibil de repartizat echitabil, deoarece natura muncii depusă de fiecare voluntar este diferită şi deci greu de cuantificat. Unii răspund la emailuri, alţii introduc sau corectează definiţii, alţii scriu cod, alţii lucrează la generarea flexiunilor.
- Veniturile vin din reclamă, iar reclama strică un site. Îl strică mai mult (dacă este o reclamă cu „daţi click pe maimuţă”) sau mai puţin (dacă este Google AdSense), dar îl strică, pentru că prin natura ei reclama are scopul de a distrage utilizatorul de la conţinutul paginii.
- O altă sursă de venituri ar fi limitarea accesului gratuit şi introducerea de costuri pentru accesul complet la baza de date, care nu intră în discuţie, deoarece nu se potriveşte filozofiei noastre.
- Veniturile trebuie contorizate, raportate la Fisc, impozitate, ceea ce duce la nevoia înregistrării unei firme, la angajarea unui contabil şi alte probleme cu care preferăm să nu ne dăm bătăi de cap.
- Odată ce un serviciu generează venituri, apare automat nevoia de mai multe venituri în flux continuu pentru a acoperi nişte cheltuieli periodice (tot ceea ce înseamnă cheltuielile unei firme). Ori, DEX online a ajuns acolo unde este tocmai pentru că nu l-am împins în nici un fel de la spate şi nu l-am tratat ca pe un serviciu, ceva de care trebuie să te ocupi în fiecare zi la oră fixă.
DEX online nu are nici cheltuieli seminificative. Am obţinut tot ce ne-a trebuit de la oameni şi firme care au apreciat calitatea proiectului: găzduirea, unele dintre dicţionare, fonduri pentru cumpărarea unui software de OCR. Cea mai mare donaţie însă este timpul liber al fiecăruia dintre participanţi.
Free as in freedom
În prezent, baza de date şi codul DEX online sunt disponibile sub licenţa GPL, dar am trecut prin diferite stadii până a ajunge aici.
Până în 2004, când DEX online conţinea cam 30.000 de definiţii, nici nu ne-am pus problema unei licenţe, mai ales că încă nu ştiam cu ce ochi priveşte Academia Română proiectul DEX online. Intenţia mea era în continuare să aştept până la reglementarea situaţiei cu Academia şi, eventual, DEX online să intre sub tutela acestui for.
Totuşi, în timp ce Academia nu manifesta nici un interes pentru DEX online, restul internetului românesc începuse să ne remarce. Apăruseră multe concepţii greşite şi critici la adresa DEX online, iar noi, ocupaţi cu introducerea datelor, neglijasem să ne expunem clar principiile într-un document. În paralel, interesul pentru baza de date era în creştere şi fusesem de mai multe ori vizitaţi de crawlere web a căror intenţie părea să fie să transfere toate definiţiile (comportamentul era evident diferit de al unui motor de căutare general). De asemenea, se punea problema dacă definiţiile preluate din DEX reprezintă un furt intelectual sau nu.
În acest context, am petrecut câteva zile schimbând emailuri cu ceilalţi membri ai proiectului şi, în final, am pus licenţa GFDL (GNU Free Documentation Licence) pe baza de date. Ulterior, am înlocuit GFDL cu GPL (General Public License), care se aplică la fel de bine scopurilor noastre şi evită nişte neajunsuri ale GFDL (în privinţa traducerilor şi a incompatibilităţii cu unele distribuţii de Linux). Licenţierea bazei de date a rezolvat multe probleme de natură etică, dar şi tehnică:
- Am demonstrat că scopul primar al DEX online este să-i ajute pe vorbitorii de limbă română, nu să obţină profit material.
- Am preîntâmpinat crearea unei pieţe negre pentru baza de date. Este imposibil să împiedici copierea unei definiţii odată ce o afişezi pe ecran.
- Am permis programatorilor să folosească baza noastră de date pentru diverse aplicaţii interesante, ei având garanţia că nu putem să ne răzgândim mâine şi să le spunem „accesul la baza de date nu mai este liber” (în acest sens, licenţa GPL protejează mai degrabă documentul decât pe autorul său).
- Deşi relaţia noastră cu Academia Română are încă un semn de întrebare, cel puţin am eliminat orice alte părţi din această dispută.
- Din punct de vedere etic, am oferit în mod liber rodul unui proiect care, la rândul lui, s-a folosit din plin de resurse libere şi gratuite (nu doar software, dar şi munca voluntarilor, găzduirea, lista modelelor de flexiune, dicţionarele de la firma Siveco sau -- de ce nu -- educaţia mea, pentru care n-am cheltuit niciodată vreun ban).
Proiecte externe bazate pe DEX online
Ca dovadă că decizia de a redistribui liber baza de date a fost bună, iată ce unelte externe folosesc baza de date a DEX online (numai cele despre care am aflat noi):
- Clienţi pentru consultarea offline a bazei de definiţii (vezi secţiunea de unelte)
- Dicţionar pentru telefoanele mobile: http://www.jarcraft.com/page.php?9
- Corector ortografic pentru OpenOffice, Firefox şi Thunderbird: http://www.archeus.ro/lingvistica/CorectorOrtografic
- Dicţionar de rime: http://stefann22.lx.ro/
- Client de Google Talk: http://www.archeus.ro/lingvistica/CautareGTalk
- Spânzurătoarea: http://www.roportal.ro/jocuri/joaca-online/54.htm
Momente semnificative
Nefiind împovărat de griji financiare sau de obiective pe termen lung, DEX online a avut o existenţă destul de liniştită. Din acest punct de vedere, mă bucur că DEX online a rămas în stadiul de proiect făcut în timpul liber. Au existat totuşi câteva momente când viitorul proiectului a fost foarte nesigur sau, dimpotrivă, când proiectul a avansat în salturi foarte mari.
În primul rând, după cum am arătat, începutul a fost greoi. Mulţi factori făceau proiectul să arate cam neviabil. Cuprindea cu totul cam 50 de definiţii. Nu era disponibil tot timpul, deoarece era găzduit pe calculatorul meu din cămin, pe care îl mai şi rebootam uneori în Windows ca să mă joc câte ceva. Iar aspectul grafic era de-a dreptul îngrozitor: în primii 2 ani, DEX oline nu a folosit nici un fel de CSS, pentru că nu ştiam ce este acela. Mai exact, când am început proiectul DEX online, ştiam doar în mare ce este aceea o „pagină dinamică”: un program care e de presupus să producă ieşire HTML, care este servită clientului. Restul (HTML, formulare HTML, MySQL, Perl / PHP) le-am învăţat din mers. DEX online avea un fundal violet, fonturi negre şi tabele cu chenare groase. În diverse browsere, diverse caractere Unicode apăreau mai mari, mai mici, mai groase decât caracterele ASCII sau erau înlocuite de pătrăţele. Probabil că dacă aş vedea astăzi o iniţiativă asemănătoare, aş cataloga-o drept neserioasă. Este admirabil că primii noştri voluntari au reuşit să vadă dincolo de prezentare şi să se axeze pe conţinut.
De un alt impas ne-am izbit în 2004, când am reuşit să luăm legătura cu editura care a publicat DEX ediţiile 1996 şi 1998 (motivul pentru care nu le-am scris mai devreme a fost că aveau un website făcut complet în Flash, neindexat, la vremea aceea, de nici un motor de căutare; nu aveau nici legături către site, deci nu i-am putut găsi). Prima reacţie a editurii când le-am prezentat proiectul a fost „trebuie să închideţi siteul acum, altfel veţi suporta consecinţele legale”. Ca urmare, prima măsură pe care am luat-o a fost să aplicăm licenţa GFDL pe date, pentru ca în cazul în care ar fi trebuit să închidem siteul, datele să aibă o şansă să se răspândească. Ulterior, am ajuns la concluzia că ediţiile 1996 şi 1998 ale DEX sunt 99% identice cu ediţiile 1984 şi chiar 1975, care, fiind publicate în perioada comunistă, nu conţineau nici un fel de informaţii de copyright. Editura nu şi-a dat nici până astăzi acordul expres pentru DEX online, dar nici nu ne-a mai pus beţe în roate şi îi suntem recunoscători pentru aceasta.
În septembrie 2004, DEX online a sărit brusc de la 65.000 de definţii la vreo 240,000. Firma Siveco, care deţine drepturile de copiere asupra mai multor dicţionare (de sinonime, de antonime etc.) ne-a acordat permisiunea de a le republica sub licenţa GFDL. Câştigul a fost substanţial, dar ne-a dat şi foarte mult de lucru în lunile următoare. Am muncit mult la scripturile care au importat aceste definiţii, dar chiar şi aşa datele au fost importate cu destule erori, care au trebuit depistate şi corectate manual. Paradoxal, mulţi dintre oamenii cu pregătire lingvistică din jurul DEX online consideră aceste dicţionare ca fiind slabe calitativ (nu neapărat prin definiţii incorecte, cât prin definiţii inconsistente, neînchiderea tranzitivă a setului de sinonime şi alte motive). Totuşi, la acel moment erau cele mai bune date pe care le aveam la dispoziţie. E drept că pentru 1% din căutări rezultatele sunt nemulţumitoare, dar eu consider că acesta este un procentaj foarte bun.
Un eveniment interesant s-a petrecut în noiembrie 2006, când a apărut primul dicţionar urban pentru limba română (http://123urban.ro). Băieţii de la 123urban au o misiune foarte coerent definită: de a continua consemnarea limbii române de acolo de unde a lăsat-o Academia. Efortul lor este unul necesar: cel de a documenta termenii din nişa argotică. Apariţia lor ne-a făcut şi pe noi să ne întrebăm care ne sunt, de fapt scopurile şi cât de departe suntem dispuşi să mergem pentru a ne îmbogăţi baza de cuvinte definite. O variantă de colaborare, din punctul nostru de vedere, ar fi fost să includem baza lor de date ca pe o „sursă” separată (cot la cot cu DEX, DOOM şi celelalte). Până la urmă, colaborarea nu s-a materializat şi nu am mai urmărit-o de atunci. Noi nu am fost siguri că moderarea lor şi sistemul lor de votare funcţionează bine. Dacă o persoană propune o sintagmă, dar nimeni nu o coroborează printr-un vot pozitiv, DEX online trebuie să accepte acea sintagmă sau nu? În plus, baza de date a 123urban nu este disponibilă sub o licenţă compatibilă cu GPL, ceea îngreunează colaborarea din punct de vedere tehnic şi principial.
Evoluţia generatorului de flexiuni
În prezent, DEX online oferă flexiunile majorităţii cuvintelor limbii române. Dar procesul prin care am ajuns la acest stadiu este un exemplu tipic de colaborare într-un proiect deschis. Încep cu un mini-glosar pentru lămurirea termenilor tehnici:
- lexem: unitate lexicală; suport minim al semnificaţiei; pentru toate scopurile practice, este cam totuna cu „cuvânt”.
- formă flexionară: formă modificată a unui cuvânt pentru a exprima un raport gramatical (număr, gen, timp etc.). De exemplu, copilul este o formă flexionară a lexemului copil.
- paradigmă: totalitatea formelor flexionare ale unui cuvânt.
- model de flexiune: paradigmă comună tuturor lexemelor care se flexionează la fel (de exemplu, a lucra, a forma şi a cresta au toate acelaşi model de flexiune). Este practic o clasă de echivalenţă.
În 2006 am început să ne gândim serios să adăugăm flexiuni la cuvintele din DEX online. Cel mai complex aspect este reprezentarea diferitelor transformări pe care le suferă un cuvânt. Flexionarea în limba română se face, în general, prin adăugarea unor sufixe, dar aceste sufixe pot fi foarte variate. Ca exemplu, pluralul substantivelor feminine poate fi format cu -e (case), cu -i (inimi), cu -uri (ierburi), cu -ele (acadele), cu -ale (macarale) etc. În plus, Limba română abundă în fenomene morfologice care transformă un sunet într-altul la aplicarea unei flexiuni. Exemple de transformări comune sunt t → ţ (bărbat → bărbaţi) sau o → oa (uşor → uşoară). Unele flexiuni suferă mai multe transformări (sămânţă → seminţe). În plus, dorim să stocăm şi informaţii despre accentul fiecărui lexem şi cum se mută el în timpul flexionării (a împrumutá → eu împrumút), ceea ce duce la o varietate exponenţială de modele de flexiune.
Prima versiune a generatorului de flexiuni, pe care am implementat-o fără să mă consult cu nimeni (şi rău am făcut), indica în forma de bază a cuvântului fenomenele morfologice care apar la flexionare. De exemplu, pentru bărbat stocam forma de bază bărbaT, unde T indică transformarea t →ţ. Pentru băiat stocam forma de bază băiAT pentru a indica transformările a → e şi t → ţ (băieţi). Această informaţie referitoare la fiecare cuvânt trebuia cuplată cu nişte meta-cunoştinţe referitoare la partea de vorbire. De exemplu, transformarea t → ţ nu se aplică decât la pluralul substantivelor (forma de singular articulat este tot bărbatul, nu bărbaţul).
Implementarea acestui sistem a fost relativ uşoară, dar concepţia a fost greşită. Cineva ar fi trebuit să treacă prin toate cuvintele limbii române şi să indice aceste fenomene morfologice. Volumul de muncă ar fi fost mic comparabil cu tastarea unui dicţionar întreg, dar ar fi fost oricum considerabil. Argumentul care a demolat complet această implementare a fost că ea nu putea reprezenta toate modelele de flexiune. În primul rând, numărul de fenomene morfologice depăşeşte cu mult numărul de litere şi simboluri Unicode convenabile pentru notaţie, iar în al doilea rând, flexionarea bazată pe sufixe este inerent ambiguă. De exemplu, roditor şi chior au acelaşi sufix -or, dar se flexionează diferit ( roditoare, respectiv chioară).
De-abia în acest moment am început să caut alte soluţii. Astfel am aflat că lista de forme flexionare exista deja de zeci de ani. Alf Lombard (1902-1996), un lingvist suedez, a prins drag de limba română şi i-a studiat gramatica în amănunt. După care a creat nişte aşa-numite „modele de flexiune”. Adică a împărţit cuvintele limbii române în clase de echivalenţă cu flexionare identică, atâtea câte a putut identifica. Pentru fiecare clasă, a ales un cuvânt-exponent căruia i-a înşirat explicit paradigma. Prin studierea transformărilor exponentului, se poate deduce paradigma altui cuvânt cu acelaşi model de flexiune. De exemplu, ceapă şi damigeană au acelaşi model de flexionare. Ceapă este exponent şi pluralul lui, definit explicit, este cepe. Observăm transformările ea → e şi ă → e. Prin analogie, pluralul lui damigeană este damigene. În final, s-a dovedit că limba română are cam 800 de modele de flexiune (circa 280 pentru verbe, 320 pentru substantive, 120 pentru adjective şi altele). Aceste modele au fost publicate în Dictionnaire morphologique de la langue roumaine, apărut în 1981.
De aici datele au fost preluate de F.R.Sc. Ei aveau nevoie de lista flexiunilor pentru a stabili dacă un cuvânt depus în timpul jocului de scrabble este corect. Au adus deci lista de modele de flexiune la zi, conform cu ultimele norme ortografice, şi au etichetat toate cuvintele nou intrate în limbă cu modelul corespunzător. Această listă exista în format digital, dar era menţinută manual, într-un fişier Word. Pentru concursurile de scrabble, arbitrul dispunea de două cărţulii tipărite: una cu cuvintele acceptate, etichetate cu modelul de flexiune, şi una cu modelele de flexiune desfăşurate explicit.
DEX online a preluat listele de la F.R.Sc., beneficiind aşadar, complet gratuit, de rodul unei munci de zeci de ani. Ulterior, am continuat să etichetăm multe alte lexeme pe care F.R.Sc nu le tratase, deoarece din cele 130,000 de lexeme din DEX online, numai jumătate provin din DEX, restul provenind din alte dicţionare de specific (în special de neologisme şi de arhaisme).
În prezent, lista de flexiuni are foarte multe aplicaţii utile:
- Pe baza ei am generat un corector ortografic.
- Ea permite căutarea „full-text”, care altfel nu ar putea funcţiona prea bine. În absenţa listei de flexiuni, am putea căuta „carte” prin tot textul definiţiilor, dar căutarea nu ar înapoia definiţiile care conţin textul „cărţi” sau „cărţilor”.
- Ea ne permite să răspundem la un click pe orice cuvânt dintr-o definiţie, trimiţând la definiţia acelui cuvânt. Din nou, fără această listă nu am şti ce să facem când utilizatorul ar da click pe cuvântul „cărţi”, pentru că nu am şti care este forma de bază a cuvântului.
Pentru a ne revanşa faţă de F.R.Sc., am decis să creăm un subsistem al DEX online (numit intern Flex online) în care F.R.Sc. să poată gestiona, mai bine decât într-un fişier Word, lista de cuvinte acceptate. De exemplu, dacă se dovedeşte că două lexeme nu se flexionează chiar identic, sistemul permite spargerea unui model de flexiune în două, modificarea clonei şi reasignarea lexemelor într-unul din cele două modele. Când F.R.Sc. emite o versiune nouă a listei de cuvinte (la fiecare câţiva ani), sistemul Flex online le permite să compare cele două versiuni, ceea ce ajută la eliminarea erorilor.
Ce am învăţat din asta
Când cineva vă oferă ajutorul, faceţi-vă luntre şi puntre ca să-i creaţi condiţii de muncă. Colaboratorii nu cresc pe toate drumurile şi trebuie preţuiţi. Dacă cineva vrea să scrie cod pentru proiect, daţi-i acces la repository şi asiguraţi-vă că vă poate trimite patch-uri. Dacă vrea să raporteze bug-uri, asiguraţi-vă că aveţi un sistem gen Bugzilla. Dacă se oferă să vă creeze un skin sau o interfaţă grafică mai bună, asiguraţi-vă că există o separare bună între extragerea datelor şi prezentarea lor (respectiv, folosiţi un template engine). Dacă vă pune la dispoziţie date, luaţi-le. O bună parte din programarea pentru DEX online am petrecut-o scriind scripturi care să importe diverse documente. A fost plicticos, dar a meritat.
Briciul lui Occam este o regulă foarte bună pentru a delimita munca manuală de scripting. Dacă durează X ore să prelucraţi manual nişte date şi Y ore să scrieţi un script care să le proceseze automat, scriptul merită scris doar dacă X > Y. De nenumărate ori am depistat nişte erori sistematice în definiţiile din DEX, dar le-am corectat manual, una câte una.
Programarea este frumoasă, dar reimplementarea a ceva ce există şi funcţionează, doar pentru că nu v-aţi informat şi nu aţi întrebat pe nimeni, este o risipă de talent.
20% din oameni fac 80% din muncă. Fiecare ţine cont cum vrea de acest fapt. La DEX online am încercat să le creez condiţii şi celorlalţi 80% dintre voluntari, dar recunosc că nu am reuşit întotdeauna. De exemplu, mulţi dintre voluntari, deşi au dorit să ne ajute, nu au învăţat niciodată cum să formateze corect definiţiile (avem un mini-set de notaţii pentru bold, italic, exponenţi ş.a.m.d.). Practic trebuia să trecem prin toată definiţia, să-i adăugăm diacritice şi să o formatăm, ceea ce dura cam la fel de mult ca şi rescrierea ei de la zero. De la un punct încolo am renunţat să îi mai trimit la documentaţie -- le respingeam pur şi simplu definiţiile trimise.
În marea lor majoritate, oamenii sunt buni şi vor să ajute; foarte puţini sunt cei care încearcă să facă rău sistemului. Problema este că oamenii răi sunt mai perseverenţi, iar efectele pot fi foarte grave („dacă amesteci o linguriţă de bălegar într-un butoi de vin, obţii un butoi de bălegar”). Trebuie deci să fiţi pregătiţi să vă petreceţi o bună parte din timp scriind cod care nu creează conţinut util, ci previne vandalismul. Este supărător, dar cu timpul vă veţi obişnui. De exemplu, nici un programator nu se supără că trebuie să implementeze autentificarea cu parole, deşi acel cod este destinat numai să-i blocheze pe cei 1% dintre utilizatori care s-ar gândi să se lege în contul altcuiva.
Oricât de intuitiv de folosit este proiectul vostru, marea majoritate a utilizatorilor nu vor şti să-l folosească sau îi vor folosi numai un subset mic de funcţii. De exemplu, puţină lume dă click pe legătura către conjugări / declinări care apare după rezultatele căutării în DEX online. Trebuie să fiţi pregătiţi să răspundeţi la multe, multe întrebări. Este bine să aveţi un sistem semiautomat de gestionare a emailurilor, unde să puteţi crea şabloane, pentru că multe din întrebări vor necesita răspunsuri identice. DEX online foloseşte OTRS, dar există multe alte soluţii.
Faceţi-vă cât mai dispensabili. Cu cât proiectul este mai descentralizat, cu atât va evolua mai uşor. Să nu ajungeţi niciodată la stadiul în care nu vă puteţi lua o vacanţă că se duce totul de râpă. În general, dacă alţi membri ai proiectului au mai multă energie ca voi, aveţi datoria morală să configuraţi sistemul astfel încât să nu-i ţineţi în loc. La DEX online, unica componentă de care mă ocup singur este scrierea codului. Corectarea definiţiilor şi a lexemelor şi răspunsul la emailuri merg foarte bine (sau chiar mai bine) în lipsa mea.
Un proiect util nu este neapărat dificil din punct de vedere tehnic. DEX online este exemplul perfect în acest sens. Sunt puţine locuri în cod unde am avut nevoie să implementez un algoritm „deştept”. Poate un exemplu ar fi diff-ul între două versiuni ale unei definiţii, pe care până la urmă nici nu îl folosim la nimic în practică. Un alt lucru la care ne-am gândit destul de mult înainte de a-l implementa este schema bazei de date care stochează modelele de flexiune. În rest însă, DEX online excelează prin răbdare, prin volumul de date adunate şi prin calitatea voluntarilor implicaţi, dar mai puţin prin algoritmii şi structurile de date folosite.
Concluzia este că sunt oameni care vorbesc şi sunt oameni care fac. DEX online nu a fost creat în cel mai eficient mod posibil (am tastat de mână o mulţime de definiţii); nu excelează la nivel tehnic (baza de date conţine, în esenţă, nişte cuvinte asociate cu nişte definiţii şi cu nişte forme flexionare); a fost adesea luat în râs şi criticat, mai ales în primii 3 ani de existenţă; are şi acum suficiente greşeli de tipar; şi, fiind vorba de un instrument lingvistic, nu va fi niciodată complet. Dar, în ritmul nostru şi cu neajunsurile noastre, o mână de oameni cu multă răbdare am reuşit să producem un document remarcabil.
Problema saptamanii - Probabilitati
De data asta va dau doua probleme interesante de probabilitati, sunt relativ clasice, deci nu va suparati daca le-ati mai vazut inainte. Va amintesc ca imi puteti trimite solutii la cosminn at gmail.com.
1. Se da o moneda ce nu e ideala, adica nu cade cap sau pajura cu probabilitatea 0.5 ci cu o probabilitate p respectiv 1-p. Nu stim cat e valoarea lui p. Exita o metoda de a genera valori 0 sau 1 cu probabilitati egale?
2. Presupunem ca am gasit o modalitate de a obtine valori 0 sau 1 cu probabilitati egale. Exista acum o modalitate de a alege cu aceiasi probabilitate unul dintre fructele mar, para sau portocala, folosind metoda de generare a numerelor 0 sau 1?
De ce Python?
Am tot auzit lucruri bune despre limbajul de programare Python si unde lucrez are o sustinere destul de mare. Am devenit din ce in ce mai curios si la inceputul verii am scris cateva programele ca sa imi incerc puterile.
Pentru ca inveti un limbaj nu prin a citi o gramada de carti ci prin lucra in el, am cautat o modalitate de a scrie cateva programe simple. Am intrat pe projecteuler.net . Acesta e un site cu in jur de 200 de probleme si fiecare problema are ca raspuns un numar. Poti incerca sa gasesti rezultatul folosind creionul si hartia sau sa codezi un program in orice limbaj. Dupa ce ai rezolvat o problema ai acces la threadul de pe forum unde discuta cei ce au rezolvat problema. Acolo sunt multi oameni care isi posteaza rezolvarile cat mai concise sau cat mai eficiente si astfel vezi mai multe solutii diferite de a ta si inveti smecherii de limbaj sau algoritmi mai buni.
Dupa cateva luni imi place limbajul foarte mult. Chestia cea mai misto e ca am ajuns sa ma simt productiv foarte repede in el. E un limbaj interpretat asa ca nu trebuie sa astepti dupa compilare. Pe langa asta are o consola in care poti sa incerci sa vezi ce fac diverse bucati de cod. Lucru foarte util cand nu stii limbajul. De asemenea este destul de intuitiv. S-a intamplat de mai multe ori sa nu fiu sigur de cum se fac unele lucruri, sa le incerc si sa mearga.
Alt avantaj este acela ca limbajul e dynamically si strongly typed. Asta inseamna ca nu o sa iti mai bati capul ca in C++ cu erori interminabile de compilare si mai inseamna ca limbajul suporta programarea cu generice. Astfel putem avea programe de genul:
Imi place ca indentarea codului face parte din limbaj, aceasta restrictie ajuta mult la lizibilitatea programelor pentru ca impune un stil de codat similar pentru toata lumea. Iar lizibilitatea unui cod este foarte importanta, pentru ca petrecem mult mai mult timp citind cod decat scriind cod nou.
De asemenea limbajul incearca sa ajute programatorul cat mai mult, izoland detalii care nu sunt importante. De exemplu la operatiile pe intregi avem implementate numere mari si nu mai trebuie sa avem grija sa nu facem overflow.
Este un limbaj succint. Spre deosebire de java, pentru a face ceva nu trebuie sa scrii foarte mult.
Are foarte multe librarii, unele dintre ele intrate deja in limbajul de baza. Ca exemple as aminti NumPy,o librarie de calcule numerice, care contine printre altele metode din algebra liniara sau generatoare de numere aleatoare, sqlite care se ocupa cu operatii pe o baza de date si PIL o librarie de prelucrare a imaginilor.
In Python se poate folosi si paradigma programarii functionale. El are elemente ca map(), reduce(), filter(), si operatorul lambda.
Metoda map(functie, secventa) ne intoarce o lista care sunt rezultatele aplicarii functiei peste elementele unei secvente. Operatorul reduce(functie, lista) ne intoarce rezultatul aplicarii cumulate a functiei peste elementele secventei. Putem scrie cod de genul:
Faptul ca limbajul nu este unul pur functional, face invatarea ideilor din programarea functionala mai usoara.
Mai imi plac si list comprehensions care sunt doar zahar sintactic, dar le folosesc destul de des. Ele sunt o modalitate naturala si succinta de a crea liste. Va dau mai jos cateva exemple:Si imi mai plac tuplurile pentru ca de multe ori ai nevoie de cate un tip de date rapid. De exemplu un punct 3 dimensional il putem obtine ca punct = (-1, 0, 11).
Ca minusuri, unul mare este eficienta. Astfel cand scriam solutii pentru probleme de la google code jam, unele erau de 50 pana la 100 de ori mai incete ca varianta implementata in java sau C++. Dar cred ca productivitatea programatorului este mult mai importanta ca eficienta codului, iar Python lucreaza bine cu limbajul C si bucatile ineficiente pot fi reimplementate in C.
Sper ca, daca nu ati lucrat deja in Python, v-am trezit putin apetitul. Daca aveti deja experienta cu Python ce caracteristici v-au placut? Cei care nu sunt convinsi inca pot citi aici cum se poate face un spell corrector in 21 de linii de Python.
Cateva scurte
Colegii mei de liceu, de la formatia Grimus, lanseaza albumul de debut Panikon puteti asculta cateva melodii aici Bravo Vali, Cristi si Bogdan! Bafta mare!
Mie imi plac piesele Backseat Driver, Different Color Shues si Solitude. Sa imi spuneti care va plac voua.
Bogdan Ionescu, primul admis la Politehnica din Milano
Asta dupa ce Olimpic roman arestat in Italia pentru furt
Pe alta nota, despre olimpici romani, si aici chiar despre un membru al echipei infoarena: Interviu cu Filip Buruiana, locul intai la Balcaniada de Informatica Felicitari Filip!
Manevra inteligenta pe bursa facuta de Porche
Un articol misto referitor la Barack Obama scris de Cristian Tudor Popescu
Update: Baietii de la Grimus au videoclipul la piesa Backseat Driver pe youtube
Update2: Azi, inca un articol despre alt super hacker roman.
Problema saptamanii - Vanatori (Solutie)
Problema Vanatori a fost rezolvata corect de Delia David, Ovidiu Gheorghioiu, Bogdan Dumitru, Dobrota Valentin-Eugen si Catalin Tiseanu.
Incercarea unor cazuri pe foaie duce la intuitia ca numarul maxim de vanatori este 4. Sa vedem de ce aceasta intuitie este adevarata. Orice vanator ce e intr-un punct (x, y) ce apartine uneia dintre cele patru clase x - par, y - par; x - par, y - impar; x - impar, y - par si x - impar, y - impar. Orice doua puncte din aceiasi clasa sunt unite de un segment ce are mijlocul intr-un punct de coordonate intregi. Astfel am demonstrat ca putem numarul maxim de vanatori este 4, cate unul corespunzator fiecarei clase.
Ovidiu a venit cu generalizarea la spatiu n dimensional unde numarul maxim de vanatori e 2n. M-a si intrebat daca nu ar fi restrictia ce cerea ca trei vanatori sa nu fie colineari care e numarul maxim de vanatori care pot fi pusi pe grila. Eu naiv i-am zis ca pot fi pusi o infinitate, si Ovi mi-a raspuns ca sunt mai putin de 6 miliarde de oameni cu permis de port arma, deci numarul maxim clar nu e o infinitate ;).
De ce este bun un curs de compilatoare si cunoasterea pe net
Virgil Palanciuc este olimpic international "din garda veche" si Software Engineer de 8 ani. A lucrat in departamentul de compilatoare al Freescale Romania iar momentan este Project Manager la Evo Software. Impreuna cu Bogdan Nitulescu si o armata de asistenti (printre care ma numar si eu) preda cursul de compilatoare la UPB. Recent Virgil a trimis un email catre studentii acestui curs pe lista de discutii asociata. Noua ni s-a parut interesant si util mesajul transmis si ne-am gandit sa vi-l impartasim si voua prin intermediul blogului :)
Silviu Ganceanu
Doamna profesoara Athanasiu obisnuia sa scrie articole in PC Magazine, prin care sa transmita mesaje studentilor, sa corecteze unele perceptii pe care le considera gresite, si asa mai departe. Unele dintre ele le mai gasiti inca pe pagina Utile a cursului CPL. Poate ca in timp, vor deveni "obsolete", poate ca au devenit deja, sau poate ca vor fi mereu actuale.
Eu din pacate nu am talentul epic al ei, si nici experienta sa. Dar de data asta o sa ma risc, sa scriu un "articol" similar cu articolele ei incercand sa raspund la intrebarea "De ce e important pentru voi acest curs de compilatoare". Am observat in ultimul timp o atitudine care tinde sa prinda elan odata cu raspandirea accesului la internet - am auzit mult prea des parerea ca "De ce e nevoie sa stiu asta? Daca am nevoie, caut pe net". O parere partial corecta... totusi doar partial. Invitat intr-o emisiune TV, acum cativa ani, Neagu Djuvara a recunoscut că nu stie data bataliei de la Podul Inalt: "Am totul notat pe fise, nu retin datele". Asa e, nu trebuie sa retii toate datele pentru a fi un mare istoric. Nu trebuie sa retii toate metodele si interfetele din Java API pentru a fi un programator bun - e un exercitiu de memorare complet inutil.
Insa: atitudinea aceasta e, din pacate, prea des dusa in extrem - pana la punctul la care, cand unui student de la A/C i s-a cerut sa incrementeze o variabila, a scris pe tabla doar "++" (fara numele varibilei), scuzandu-se ca "nu are nevoie sa stie sintaxa C, poate sa o caute in manual oricand". Desigur ca voi intelegeti absurditatea acestei atitudini - dar exista forme mult mai "nevinovate" de manifestare a unei atitudini similare. Cea mai comuna este atitudinea studentului care atunci cand are o tema de facut la scoala, cauta ceva similar pe internet si adapteaza. Scuza, invariabil, este ca "reutilizarea e extrem de importanta" si ca "la serviciu nimeni nu-ti cere sa scrii totul de la 0, refolosesti tot ce poti". Asa este, la serviciu refolosesti. Dar voi acum sunteti intr-o perioada in care nu trebuie sa produceti cod util, ci trebuie sa intelegeti. E prea putin relevant cu ce nota terminati scoala, mai nimeni nu o sa va intrebe de asta. E mult mai important sa intelegeti cat mai mult cum functioneaza lucrurile, sa intelegeti ca lucrurile nu functioneaza "by magic" in calculatoare, ci urmeaza o logica foarte clara, ca daca faci ceva intr-un anumit fel poate fi eficient, sau ineficient, si asa mai departe. Sa intelegeti ca un "+=" nu e intotdeauna operatia inocenta care pare a fi, daca ne uitam strict la sintaxa. De aceea e important cursul de compilatoare (si cel de sisteme de operare), fiindca, poate mai mult decat oricare alte cursuri, fac legatura intre 2 lumi: cea a limbajelor de nivel inalt, a "abstractizarilor" - in care programatorul "zboara deasupra lucrurilor" si pierde de multe ori legatura cu "realitatea hardware" - si lumea "de jos" - in care lucrurile trebuie puse cap la cap, legate intre ele, adaptate la procesor, simplificate, facute sa functioneze ca un tot unitar. E ceva ce nu veti gasi niciodata pe google - nu fara a sti deja ce cautati. Daca stiti paradigmele de programare, daca stiti cum si de ce functioneaza constructiile si mecanismele dintr-un limbaj de programare - atunci va va fi mult mai usor sa adaptati la un orice alt limbaj nou fiindca veti intelege ca limbajul e doar un instrument facut pentru a va mari productivitatea, la fel ca si un IDE, debugger samd. Si nu veti cadea in capcana de a va auto-intitula "Programator Java" / "Programator .NET".
La interviu la Google, din cate mi s-a spus, daca un candidat stie de dinainte raspunsul la o intrebare raspunsul lui este complet ignorat. Ceva similar faceam si eu (fara sa stiu ca Google face asta): de exemplu pun candidatii sa scrie o functie de cautare a unui subsir intr-un sir de caractere si daca e evident ca stie algoritmul Boyer-Moore, atunci il pun sa scrie altceva - e prea putin relevant faptul ca a memorat un algoritm. Dar e foarte important daca el intelege complexitatea algoritmului pe care l-a scris, daca atunci cand i se cere sa scrie o varianta mai eficienta, stie "de unde sa apuce problema" pentru a cauta o solutie mai eficienta, si "de ce solutia curenta nu e eficienta".
Cititi de exemplu articolul acesta - fara sa fiu neaparat 100% de acord cu el, mi se par interesante (si probabil extrem de relevante pentru el) intrebarile "de filtrare" pe care le pune la interviu. Nimeni nu va ofera "pe tava" raspunsul la asa ceva si sunt probleme dureros de prezente in anumite medii. E ceva ce nu inveti in mod direct la scoala dar, daca ai inteles cum functioneaza un procesor, cum functioneaza un compilator, cum functioneaza un linker, cum functioneaza un sistem de operare, ai o sansa sa te descurci.
In fine, inchei acest mail cu un link la articolul care m-a facut de fapt sa-l scriu - il gasiti aici. Mi s-a parut impresionant cum un om de varsta tatalui meu reuseste sa inteleaga internetul mai bine decat multi oameni tineri, de 20 ani. Sau ma rog, eu asa cred, ca l-a inteles foarte foarte bine: "Dar a fi cultivat nu înseamnă a şti, înseamnă a şti să cauţi. Nu a şti să utilizezi o „maşină de căutare", ci a transforma căutarea într-un parcurs laborios, imprevizibil, plin de fertile derapaje colaterale. Cultura nu te îmbogăţeşte prin ceea ce îţi livrează în mod expres, ci prin aventura drumului, prin barocul tatonărilor. Cultura e facultatea de a decide ce e de făcut cînd nu ştii ceva: cum să pui întrebarea, la ce uşă să baţi, în care orizont să te mişti."
Dl. Plesu vorbeste despre cultura, dar eu zic ca e perfect valabil in contextul mai larg al "cunoasterii" - fix asta trebuie sa invatati voi din facultate: cum sa pui intrebarea, la ce usa sa bati, in care orizont sa te misti. Asta e lucrul cu care trebuie sa ramaneti - cum se rezolva o tema si in nici un caz cu "am reusit sa fac niste modificari prin analogie intr-un program de pe net, deci se cheama ca m-am descurcat sa o fac".
Spor la lucru la tema 2, apucati-va de lucru din timp ca e mult mai grea ca tema 1 :)
Virgil.
P.S. Tocmai m-a intrebat ceva un coleg de la alta echipa - nu intelegea de ce in ASP atunci cand pune "listbox" in pagina nu poate face un item din lista sa fie hyperlink, pe cand daca pune "gridview" se poate. Nu i-a trecut prin cap ca ar afla raspunsul extrem de usor daca s-ar uita ce HTML se genereaza in spatele acelor controale ASP ...
Ratinguri
Am observat de multe ori cum pe bloguri, liste de discutii, forumuri sau threaduri de email incepe cate o discutie legata de o oarecare problema si apar replici cu multe idei diferite. Cateodata solutia cea mai buna apare pe la inceput dar este ignorata si se discuta la nesfarsit idei evident mai slabe. In general oamenii ce raspund mai tarziu sunt bine intentionati dar nu isi cunosc nivelul.
Asta nu se intampla si pe forumurile de pe topcoder. Acolo participantii au rating in functie de performanta in concursuri. Astfel comunitatea e structurata ca o meritocratie. Coderii cotati cu rosu sunt respectati. Daca cineva cu rating de peste 2200 a postat o replica probabil are dreptate si poti sa te concentrezi mai bine pe ceea ce a zis. Puteam sa filtrez rapid posturile interesante si educative. Daca nu a raspuns cineva cu rating rosu pe un thread probabil nu e interesant si trec mai departe. Cum informatia abunda pe internet, filtrarea continutului de calitate devine din ce in ce mai importanta.
Simt cateodata lipsa acestor ratinguri, mai ales in domenii care nu le cunosc la fel de bine ca si concursurile de algoritmica. Un exemplu ar fi discutiile despre economie. Acolo sunt multi care isi dau cu parerea, dar nu iti poti da seama usor care sunt surse credibile de informatie si care sunt oameni care vor sa fie si ei in pas cu moda.
Ar fi interesant de vazut in ce alte contexte ar fi utile.
Interviu Mihai Stroe (Evenimentul Zilei)
Va spuneam in un blog post anterior despre interviul pe care l-am dat impreuna cu Mihai Stroe si Cristi Strat pentru Evenimentul Zilei. In articol nu au aparut raspunsurile interviurilor in totalitate. Si cum v-am promis, va redau pentru inceput interviul cu Mihai Stroe.
1. Scurta prezentare
Mihai Stroe a absolvit Facultatea de Calculatoare din Universitatea Politehnica din Bucuresti, unde a terminat si programul de Master. Experienta sa cuprinde participarea la numeroase concursuri nationale si internationale de programare intre 1995 si 2004, initial in calitate de concurent, iar apoi ca organizator. Mihai a inceput ca programator la Google in iunie 2004, dupa terminarea Master-ului. In cadrul companiei, a lucrat la cateva proiecte pentru imbunatatirea infrastructurii Google si a calitatii rezultatelor motorului de cautare.
Dupa aproape trei ani petrecuti la sediul principal din Mountain View, California, Mihai s-a transferat la biroul din Zurich in 2007. In prezent are functia de Technical Lead / Manager.
2. In Romania, un job la Google este insotit aproape intotdeauna de un soi de admiratie ce nu are nevoie de argumente. Cat de greu este de fapt sa ajungi acolo?
Selectia este foarte serioasa, si nu este usor sa obtii un job. Pe de alta parte, cred ca avem mai mult de 100 de angajati romani, iar vara aceasta am avut 20-30 de studenti romani care au facut stagii de trei luni la Google, venind de la universitati din tara sau din strainatate. Aceste cifre demonstreaza valoarea programatorilor romani.
3. Ce te motiveaza sa faci ceea ce faci?
Pentru mine, cea mai importanta motivatie este faptul ca proiectele la care lucrez sunt vizibile in exterior si ajuta milioane de utilizatori in fiecare zi. De exemplu, am adus imbunatatiri la motorul de cautare, si am dezvoltat functionalitate pentru Google Toolbar si pentru Google Chrome, noul nostru browser care a fost lansat sapatamana aceasta.
4. Este Google tinta ultima a oricarui programator? Se poate mai bine de atat?
Pentru mine este locul ideal. Oamenii cu care lucrez sunt foarte bine pregatiti. Proiectele sunt interesante. Daca avem idei care pot avea un impact puternic asupra companiei, suntem incurajati sa le dezvoltam. Bineinteles, recompensele sunt pe masura realizarilor si angajatii cu performante deosebite pot avansa repede in cariera. In plus, Google este una din companiile care influenteaza puternic dezvoltarea Internetului. In momentul de fata sunt convins ca peste 10 ani ma veti gasi tot la Google.
5. Stim chiar de la Google ca mediul de lucru este unul foarte relaxat. Nu cumva flexibilitatea asta inseamna o responsabilizare a angajatului?
Intr-adevar, mediul de lucru este flexibil - dar ritmul de dezvoltare este alert. In general lucram in echipe mici, de 3 pana la 10 angajati; proiectele mari sunt impartite in mai multe echipe. Angajatii sunt motivati si se sustin reciproc.
Accesul la informatie in cadrul companiei este foarte bine pus la punct. Astfel, imi este foarte usor sa aflu ce anume se intampla in oricare alt proiect, ceea ce imi permite sa contribui cu idei si sa identific persoane care m-ar putea ajuta in proiectele proprii.
In plus, creativitatea este incurajata; angajatii pot petrece 20% din timpul de lucru (de exemplu o zi pe saptamana) in cadrul unui alt proiect decat cel principal, la alegere. De asemenea, putem folosi acest timp pentru a dezvolta o idee proprie. In momentul in care este clar ca ideea va avea succes,
se formeaza o echipa care poate sa o realizeze. Aceasta strategie a condus la dezvoltarea unor proiecte importante, cum ar fi Google News.
Personal, am folosit aceasta flexibilitate pentru a incepe, dezvolta si conduce unul din proiectele la care lucrez, bazat pe o idee proprie. In momentul de fata, la acest proiect lucreaza 8 angajati.
Dupa ce ideea respectiva a devenit proiectul meu principal, 20% din timpul meu de lucru a ramas in continuare flexibil. M-am folosit de acest lucru pentru a organiza cursuri de pregatire pentru noii angajati si prezentari ale companiei la doua universitati din Romania.
6. Ce (mai) inseamna Romania pentru Mihai Stroe? Iti doresti sa te intorci?
Vizitez Romania foarte des; anul acesta voi avea probabil 7-8 vizite. Familia si o mare parte din prietenii mei sunt in Bucuresti, iar familia sotiei mele este la Cluj, deci avem legaturi puternice cu Romania. Pe termen lung sunt sanse mari sa ramanem in Elvetia - dar drumul de la Zurich la Bucuresti sau la Cluj nu este chiar atat de greu de parcurs...
7. Daca maine s-ar infiinta un birou Google in Romania, ai veni sa lucrezi aici?
As veni pentru cel putin 6-12 luni, sa ajut la formarea si pregatirea grupului din Romania.
8. Ce sfaturi i-ai da unui tanar roman care vrea sa lucreze la Google?
Depinde de pregatirea din momentul actual. De exemplu, pentru mai multi romani care au participat la concursuri internationale de programare, nu a fost extraordinar de dificil sa ajunga la Google - dar aceasta nu este o conditie necesara.
Cred ca o buna pregatire generala in informatica, mai ales in algoritmi si sisteme distribuite, impreuna cu un nivel foarte avansat de pregatire in unul din domeniile care ne intereseaza, sunt importante pentru succes.
Pentru mai multe detalii, puteti accesa www.google.com/jobs
Testarea pentru selectie este foarte serioasa, si unii candidati valorosi nu reusesc sa obtina o pozitie in cadrul companiei - dar asta nu inseamna ca ar trebui sa fie dezamagiti, exista si alte oportunitati.
9. Sunt convins ca foloseai motorul de cautare inainte sa intri in companie. Obiectiv vorbind, de ce e cel mai bun de pe piata?
Parerea mea este ca rezultatele cautarii pe Google sunt superioare rezultatelor produse de alte motoare de cautare. Motorul de cautare este cel mai important proiect din companie si avem un numar mare de echipe care aduc imbunatatiri.
Ca realizari importante, din ultima perioada, as remarca modul in care sunt combinate mai multe tipuri de informatie. De exemplu, pe www.google.com, rezultatele pentru interogarea "Marea Neagra" pot include pagini web, imagini si continut video.
Ca fapt divers, in 2004, dupa ce am fost acceptat pentru interviuri, am contactat cateva zeci de prieteni si i-am intrebat ce motor de cautare folosesc. Toti cei intrebati, fara exceptie, au raspuns "Google".
10. Cum crezi ca ar fi aratat lumea fara Google?
Google a avut contributii majore la dezvoltarea aplicatiilor Internet si la organizarea informatiei disponibile online. Cand spun aceasta, nu ma refer numai la motorul de cautare; am obtinut rezultate similare in mai multe domenii.
De exemplu, inainte de lansarea serviciului Gmail in 2004, principalele servicii de e-mail ofereau cativa MB de spatiu de stocare, iar cautarea era ineficienta. Gmail a schimbat aceste lucruri, oferind in momentul lansarii 1 GB de stocare (de cateva sute de ori mai mult) si perfectionand cautarea, iar in timp, celelalte servicii s-au adaptat.
Sunt convins ca Google Chrome va duce la progrese similare in domeniul browserelor. In viitor ne putem astepta la multe alte imbunatatiri.
Saptamana viitoare voi publica interviul cu Cristian Strat
Problema saptamanii - Vanatori
Va propun o noua problema, trimiteti-mi ca si pana acum solutiile la cosminn at gmail.com, si neclaritatile legate de enunt in sectiunea de comentarii.
Se da o padure infinita in care copacii sunt dispusi in o grila laticeala (puteti sa va imaginati copacii ca punctele din ZxZ). Se cere sa se determine numarul maxim de vanatori care se pot pune in puncte din grila laticeala, astfel ca fiecare vanator sa poata vedea orice alt vanator direct. Inainte sa punem un vanator intr-un punct laticeal, taiem copacul deja existent acolo. Daca segmentul ce uneste punctele asociate a doi vanatori contine un alt punct laticeal, fie acesta ocupat de un copac sau un al treilea vanator, se considera ca acesti doi vanatori nu se pot vedea direct. De asemenea doi vanatori nu pot sta in acelasi punct laticeal.
