BestJobs

October 22nd, 2009 Alex

Tot primesc mail-uri de la BestJobs … l-am folosit acum câţiva ani, cu rezultate extrem de proaste.

Mă distrează titlurile la email-uri …

  • Nu contează (doar) ce ştii, ci pe cine ştii
  • Cunoşti puterea gândului?
  • Un zâmbet nu strică niciodată (cu subtitlu’ în pagină … „Ce spun astrele despre cariera ta”)
  • Ce faci pentru a atinge succesul?
  • Ştii să convingi?

Adevărul este că la câţi incompetenţi sunt în România, sunt sigur că au nevoie să-şi concentreze energiile pe pile / aspect / alinierea astrelor.

La un angajator precedent vine odată la un interviu un tip foarte elegant, la costum, cu cravată (câţiva colegi de-ai mei n-au purtat cravată nici la nunta lui Bogdan).Am jucat întâi un biliard mic până se elibera camera, domnul fiind foarte „cocky”, un învingător clar.

Începe interviul (aici doar parafrazez, fiind din amintiri de acum 2 ani, răspunsurile reale erau mult mai funny, iar lista de întrebări este incompletă) …

  • Descrie-mi activitatea ta de până acum
  • EL: am lucrat la shopping-sites în PHP pentru clienţi foarte, foarte importanţi şi practic „agile development”
  • ….
  • Care a fost ultimul tău proiect?
  • EL: ultimul proiect a fost să migrez o aplicaţie mai veche de la PHP4 la PHP5
  • ….
  • Dar sistemul tău nu prea este OOP, ne poţi explica conceptul?
  • EL: clasele sunt o metodă de a grupa funcţii, şi nu mi s-a părut necesar
  • Îmi poţi spune care sunt diferenţele între PHP4 şi PHP5? (că doar migrase o aplicaţie)
  • EL: nu prea mai ţin minte
  • De diferenţe la referenţierea obiectelor, sau de noul sistem de excepţii, n-ai auzit?
  • EL: nu, nu mai ştiu
  • Păi în PHP4 când scrii … $obj = $old_obj … ce se întâmplă? se crează o copie sau o referinţă la obiectul original?
  • EL: nu m-am lovit de problema asta
  • Îmi poţi spune ce este o referinţă?
  • EL: <linişte>
  • ….
  • Descrie-mi şi mie un algoritm la alegere pentru sortarea unui array …
  • EL: nu ştiu nici un algoritm, pentru asta există funcţia array_sort
  • Păi şi dacă structura de date folosită este atipică, adică nu este un array, cu ce o sortezi?
  • EL: până acum m-am descurcat doar cu array_sort şi cu ORDER BY din mysql

Interviul s-a oprit în momentul în care colegul meu începuse să-mi facă semne disperate pe sub masă ca să-l las în pace (eu mă distram de minune). După care cu un zâmbet fals pe faţă colegul meu i-a spus … „Mulţumim, interviul a mers destul de bine, dupe ce deliberăm te vom contacta”.

Zâmbetul încrezător al candidatului din păcate dispăruse de mult, dar cel puţin avea cu ce să se spânzure.

Posted in humor, management, quotes | 6 Comments »

Orizonturi noi

November 8th, 2008 Alex

Am plecat de la Adobe după o perioadă de angajare de aproximativ 1 an şi 5 luni.

Mi-a plăcut la Adobe … când am ajuns nu-mi venea să cred că un mediu corporatist atât de constructiv poate exista în Bucureşti, asta după ce am fost ars de experienţe anterioare neplăcute. Ca exemplu la Adobe nu se ţine cont de pile, şi dacă-ţi faci treaba eşti promovat, dacă nu eşti marginalizat. Simplu şi eficient. Nu e nevoie de „networking”.

Deasemenea, Adobe România are ca angajaţi o grămadă de oameni foarte competenţi, şi am avut onoarea să-l am ca manager pe Paul Chiriţă, împreună cu ai mei colegi mei „de suferinţă”: Bogdan Şerban (programator heavy-weight cu experienţă-n Java), Răzvan Căliman (programator de front-end, designer), Victor Matei (QA) şi Cătălin Comănici (QA, poreclit „Dr Evil”) … care au fost minunaţi, mai ales când urlam la ei că nu mă pot concentra :)

Dar uite că am plecat, deşi las în urmă o echipă competentă, … simpatică, şi un mediu de lucru cum numai în filmele americane mai vezi.

M-am angajat la o firmă micuţă, cu rădăcini în lumea open-source. Şeful meu este un vechi prieten, şi orizonturile sunt albastre, mai ales că am idei neexploatate, la care mi se va permite să lucrez cel puţin în timpul liber, pe lângă proiectele firmei care sunt chiar drăguţe şi este şi un mediu în care am multe de învăţat. În cazul în care nu se observă, sunt chiar incitat :)

În altă ordine de idei, am schimbat link-ul la celălalt blog al meu, unde o să-ncerc să bag articole tehnice mai des: blog.alexn.org

~

Posted in grownup stuff, management, mylife | No Comments »

Jason Fried (37signals) despre colaborare pasivă

October 14th, 2008 Alex

… one of the things we’ve learned is that
interruption is a really dangerous idea. The idea that most offices
are set up to ‚ for interruption ‚ they promote interruption by having
everybody together all the time. And you can’t actually get work done
when you’re interrupted or you’re being interrupted …

Desigur, modelul propus nu se pretează neapărat la orice tip de proiect. În companiile mari ai suficient timp pentru dezvoltare și orice pas trebuie măsurat într-un context mai larg, unde intră în ecuație chestiuni politice (cum ar fi direcția și valorile companiei) și interacțiunea între proiecte. Dar este de gândit, și cumva strategia asta vorbește pe limbajul meu.

Filmul video și transcriptul le puteți găsi aici:
http://broadcast.oreilly.com/2008/10/jason-fried-of-37signals-on-bu.html

Posted in management, quotes | 2 Comments »

Costul întreruperilor

September 23rd, 2008 Alex

Întreruperile de la locul de muncă produc scăderea drastică a randamentului.

Am lucrat în regim remote timp de 2 ani de zile. Nu lucram pe același fus orar cu angajatorul meu. Interacțiunea între mine și SUA se realiza între orele 18 și 20. Muream însă de plictiseală și m-am angajat într-un mediu mai normal.

E super OK să ai colegi. Când există tensiune, se mai sparge cu câte o glumă porcoasă, sau cu câte o înjurătură. Ai cu cine merge la masă, ai cu cine discuta probleme, și nu neapărat legate de proiect. Și este un mediu în care se leagă prietenii.

Trecând peste asta nu prea mă pot adapta la întreruperile ce vin cu un astfel de mediu. Exemplu: dacă cineva descoperă vreun bug, și nu e sigur că este bug, vine și mă întreabă. Sau, dacă apare o problemă de specificații, se ține meeting, care se programează de obicei în mijlocul zilei de lucru. Comunicațiile sunt sincrone, și nu toată lumea este de acord că programatorii au nevoie de timp neîntrerupt de lucru.

Joel Spolsky și-a exprimat părerea că orice programator ar trebui să lucreze într-un birou privat (A Field Guide to Developers), aceeași idee fiind exprimată și în Peopleware. Programatorilor de la Microsoft deasemenea li se asigură birouri private, și Microsoft este printre singurele firme mari de software ce încă produc software „in-house”.

Guess which part of the day we get the most work done? The alone part. It’s not that surprising really. Many people prefer to work either early in the morning or late at night — times when they’re not being bothered.

Alone Time, Getting Real, 37signals

În firmele mari top managementul folosește birouri private, însă nu și inginerii, care oricum ar trebui să stea împreună și „să discute”. Mai sunt unii care dau un exemplu și se instalează în birouri normale, însă ajung să folosească una din sălile de conferințe atunci când nu sunt ocupate, pentru a evita zgomotul.

Discuțiile însă reprezintă sursa tuturor problemelor. Într-o ședință oamenii n-ar trebui să discute, oamenii ar trebui să poarte un dialog. Și există o diferență. Verbul „a discuta” vine de la latinul discutere, format din dis- separat + quatere a zgudui. Un dialog se referă la schimb de idei, în urma căruia se ajunge la un acord. În majoritatea discuțiilor, în cel mai bun caz acordul este impus de un mediator care nu are neapărat toate datele problemei, dar al cărui rol este să impună un rezultat final. Și asta deoarece în anumite privințe, cum ar fi designul interfeței, toată lumea are o opinie (vezi Legea lui Parkinson despre Trivialitate) , cuplată cu dorința inginerilor de a părea inteligenți.

Structura memoriei ar mai fi o problemă. Încercați următorul exercițiu (ilustrat în excelenta carte The Design of Everyday Things):

„Spune cu voce tare numerele 1, 7, 4, 2, 8, 3. Și fără să te uiți la șirul de numere, repetă. Poți închide ochii și repeta din nou cu voce tare, pentru a auzi ecoul proprii voci. Poți observa că memoria momentului prezent este valabilă imediat, clară și completă, fără efort mental.”
„Însă răspunde la întrebarea - ce ai mâncat acum 3 zile? Sentimentul nu mai este același, fiind nevoie de timp pentru a recupera răspunsul din memorie, amintirea nemaifiind deloc clară, exactă și completă, iar efortul mental fiind considerabil.”.

Și acum, citește numerele 9, 4, 3, 8, 3 și fără să te uiți mai sus încearcă să repeți prima listă de numere din exercițiu. Dacă ai urmat exercițiul întocmai, s-a întâmplat ceea ce se cheamă schimbare de context. Eu personal deja am uitat lista de numere. Dacă ai memorie mai bună probabil n-ai uitat-o, dar cu siguranță mintea ta a făcut efort suplimentar. Memoria imediată este exactă, doar atâta timp cât nu se face schimbare de context.. O singură întrerupere, și numărul de telefon dat de tipa sexy de la bar sau lista de cumpărături ce ți-a fost comunicată prin telefon pot pur și simplu să dispară.

Se întâmplă același lucru când te concentrezi pe o sarcină … reții tot felul de detalii, fără conexiuni evidente, și atunci când încerci mai multe soluții, în mintea ta se construiește un arbore, unde frunzele sunt soluțiile finale posibile, iar nodurile non-terminale sunt soluții parțiale. În cazul în care nu merge ceva, trebuie să te întorci la o idee precedentă. Plus că apar mini task-uri, sau erori la care trebuie să te întorci. Doar n-o să petreci câte 2 minute să creezi intrări în Bugzilla (sau whatever) pentru orice detaliu la care trebuie să te întorci, mai ales dacă trebuie să te întorci în următoarea jumătate de oră.

Acum imaginează-ți ce se întâmplă când vine cineva și te întreabă despre un bug dintr-o altă secțiune a aplicației la care ai lucrat acum 3 săptămâni. Intră în acțiune memoria de lungă durată, și e nevoie de efort pentru a-ți aminti exact parametrii problemelor de acum 3 săptămâni. Înainte de schimbarea de context însă, se rețin detaliile importante ale problemei curente, și după schimbarea contextului se uită detaliile neimportante. Pentru a reveni „in the zone” trebuie să restaurezi toate detaliile pe care le aveai în cap înaintea întreruperii și să rededuci detaliile neimportante pe care tocmai le-ai uitat.

„There is time enough for everything in the course of the day, if you do but one thing at once, but there is not time enough in the year, if you will do two things at a time” - Lord Chesterfield

Multitasking-ul chiar este un mit.

~

Posted in management | 5 Comments »

Ne cuceresc marketroizii

May 1st, 2008 Alex

În timp mi-am format un nas foarte sensibil la rahaturi de marketing și la trucurile unor oameni de a părea mai interesanți.

Ca o paranteză, reclama cu „vorbiți afacereza?” de la „The Money Channel” mi se pare oribilă … doi indivizi ce folosesc romgleză (jargon ce folosește cuvinte din engleză, cu o lipsă totală de respect față de limba română) … și până la urmă care-i faza, că nu prea am înțeles?
Sunt mai interesanți? Știu ceva ce muritorii de rând nu știu?
Sau ne arată poate cât de proști sunt cei ce nu-nțeleg?

Am o mare problemă cu metodologiile agile.
În primul rând că termenul de „metodologie” pentru mine a căpătat o conotație negativă, și însăși definiția cuvântului pare a fi departe de sensul în care este folosit.

Și de câte ori aud de metodologi de dezvoltare, gândul mi se duce invariabil la oameni ce-și câștigă existența din cărți, seminarii și consultanță pe spinarea celor ce ascultă. Iar în momentul în care o practică este promovată la rang de religie, atunci știu cu siguranță că ar trebui să stau departe.
Același lucru s-a întâmplat de exemplu și cu programarea orientată pe obiecte … și probabil că programarea OOP, cea din C++ (bazată pe moștenire de clase, într-un limbaj de programare static) este cea mai greșită practică a informaticii, deoarece OOP-ul din C++ doar dă impresia de modularizare.
Dar autorii de cărți despre șabloane de proiectare trebuie să mănânce și ei.

Din metodologiile agile, cred că singura practică ce-mi place este testarea unitară, dar nu TDD-ul. „Test-Driven Development” este o practică ce nu-mi place, din același motiv pentru care nu-mi plac nici limbajele statice … fiind practic o povară pentru munca de explorare a ideilor. Și cel puțin limbajele statice le consider utile din alte puncte de vedere … performanță și capacitatea compilatorului de a descoperi dependințe între module. În schimb TDD-ul nu prea-mi dă nici un avantaj, și sincer să fiu, majoritatea vorbesc de TDD, dar puțini oameni am văzut să declare că folosesc TDD.

Acum, desigur, metodologiile agile se concentrează mai mult pe relațiile dintre oameni și pe rezolvarea conflictelor (sau cel puțin asta încearcă variantele mai light, gen SCRUM). Dar adevărul este că dacă doi oameni dintr-o echipă sunt incompatibili și nu se înțeleg, ai oricum puține șanse de remediere a situației prin numirea unui Scrum Master și prin ședințele de Scrum, care în loc să fie de 10-15 minute, se transformă în ședințe de o oră.
Și plus că este chiar stresant să dai raportul la fiecare pas pe care-l faci. Și deși în teorie ședințele de Scrum nu sunt de raportare a statusului, așa cum se spune … „diferența dintre teorie și practică este că în teorie nu există diferențe, dar în practică există”.

De ce este stresant să dai raport zilnic? Pentru că unii programatori (incluzându-mă pe mine în ecuație) lucrează în rafale, și au zile mai mult sau mai puțin productive, iar un raport dat după o zi neproductivă este un motiv de stres.

Desigur, o echipă de programatori are nevoie de standarde extrem de bine puse la punct, și din punct de vedere al ingineriei ai nevoie de strategii puse la punct pentru orice problemă cunoscută care ar putea apare. Iar o echipă fără automatizare a testelor (de exemplu) este din punctul meu de vedere disfuncțională.
Iar din punct de vedere al relațiilor dintre membrii, în orice echipă ai nevoie de armonie, de acel mediu creativ care te lasă să te concentrezi asupra problemelor importante. Nu exclud astfel practicile sănătoase ce au funcționat pentru alte proiecte (cum ar fi unit-testing), dar din păcate cunoștințele din domeniu sunt atât de empirice că de câte ori apare o nouă religie sunt destul de sceptic, și aștept deznodământul.

Dintre toate metodologiile însă, cea mai corectă și la obiect mi se pare următoarea …

Hack-Ship

Sursa: Crystal Methodology

Posted in management, rant | 3 Comments »

A programmer’s life

January 22nd, 2008 Alex

You do a clerk’s job, you settle for a clerk’s working conditions and wages, but you take solace in the thought that you are somehow more than a clerk, because you have a university degree and the dental technician who cleans your teeth doesn’t.

Only everyone knows it’s a sham, especially the hiring manager who puts “University degree required” in the job advertisement. He wants to hire a clerk, someone who will work long hours doing as they’re told in a top-down, hierarchal command structure. Does that job sound like there is any Science involved? Of course not, everyone knows that, it’s why the industry is trying to weed all of the Science out of a Computer Science degree.

And you’re falling for it, hook, line, and sinker.

- No Disrespect

Simt și eu cam același lucru. Am schimbat ceva servicii într-un timp destul de scurt. Din afară par a fi un neadaptat, dar m-am cam săturat de aceleași taskuri repetitive și plictisitoare, și de șefii ce nu-nțeleg că programarea este marele joc.

Dar este OK. Mă simt bine în pielea mea. Lucrez la ceea ce-mi place.

If it is possible to make yourself into a great hacker, the way to do it may be to make the following deal with yourself: you never have to work on boring projects (unless your family will starve otherwise), and in return, you’ll never allow yourself to do a half-assed job.

- Great Hackers

Posted in management, passion, quotes | No Comments »

Pentru succesul unui proiect … nu te grăbi să dai verdicte

November 26th, 2007 Alex

Citind despre problemele sau succesele altora am dat de părerea lui Dragoș Manac din Alergii de Business [1] …

Google isi imparte oamenii tehnici in echipe mici, pentru a atinge maximul de eficienta … In Romania nu prea exista profesionisti. Noi nu suntem foarte buni, dar castigam mult din faptul ca ceilalti sunt foarte slabi (in general) … Echipele sunt mereu mari. Multi oameni, multi vizionari, multi vanzatori, multi vorbitori, multi sustinatori, putini tehnici. Putini si slabi - flancati de tehnicul-ajuns-in-management, cu idei rasfirate si neclare despre ce inseamna business-ul si ce inseamna IT-ul, cu nicio idee de project management, cu nicio idee de lucru structurat/in echipa, cu multe decrete si pareri …

Aici e o mică eroare de logică … problema nu prea există doar în România. Problema s-a extins în toate subdomeniile industriei IT, de la armată la corporațiilor multinaționale și la startup-urile pline de speranță, indiferent de locație (SUA, Canada, Elveția, România), deși unele locații sunt clar mai avantajate decât altele.

În cazul în care nu sunteți documentați, industria software se află în criză, prima oară afirmația făcându-se în mod oficial la o conferință sponsorizată de NATO în 1968 [2] (deși Dijsktra a afirmat același lucru mai devreme). Toată lumea se află în delir deoarece complexitatea software-ului crește exponențial în timp ce numărul de programatori crește doar în progresie aritmetică. De unde și dorința companiilor de a angaja cât mai mulți programatori, de unde și pretențiile de studii/experiență din ce în ce mai mici. Motiv pentru care înainte de spargerea balonului din 2000 editori de HTML ajunseseră să fie plătiți cu sume absolut obscene.

Datorită pregătirii slabe a personalului s-au ivit diverse efecte secundare: cum ar fi inventarea de metodologii și unelte proiectate pentru scalabilitatea la nivel de personal … dezvoltare asemănătoare trecerii de la manufactură la industrie care s-a făcut înlocuind nevoia de oameni pricepuți cu linii de producție automatizate de roboți industriali și cu forță de muncă brută și ieftină.

Cât despre birocrație și “design by comitee” … este peste tot, inclusiv la Google (într-o măsură mai mică sau mai mare). Este natural: deși cele mai excepționale design-uri și invenții sunt provenite din gusturile unui singur om (judecând analizând istoria), companiile în general nu riscă resurse fără să-și asigure un ROI … și pentru un singur om (sau pentru o echipă mică de oameni) poate fi o responsabilitate mult prea mare. La Adobe, cel puțin la departamentul unde lucrez, participă la design-ul proiectului multe departamente interesate de proiectul nostru. Iar ședințele pot fi chiar neproductive câteodată deoarece fiecare are ideile proprii despre necesitățile rezolvate de proiect … dar este un fapt al vieții de inginer și-l accept ca atare.

Și chiar mă deranjează când se generalizează problema la România: problema este peste tot și este de substanță. Într-adevăr, mulți candidați ce participă la interviuri sunt extrem de nepregătiți … lăutari cum ar zice unii. Și într-adevăr, mulți oameni vor o slujbă de inginer software doar deoarece se plătește bine. Dar am întâlnit și o grămadă de oameni deștepți, bine pregătiți și puși pe fapte mari, iar câțiva dintre ei îmi sunt colegi.

Problema cu industria software este că nu este o industrie. Termenul aproape că este un oximoron. Nu putem momentan aplica soluțiile folosite în alte industrii în principal deoarece problemele rezolvate sunt de multe ori probleme noi (sau probleme vechi cu parametrii de funcționare noi - e.g. port-uri pe alte platforme, optimizare de resurse, etc…).

Problemele sunt următoarele:

  • făcând abstracție de timp și de bani care sunt oricum omniprezente peste tot, nu există limitări fizice ale proiectelor, singurele limitări fiind date de propria noastră imaginație
  • metafora cărămizilor LEGO nu se poate aplica în ingineria software, și ne facem rău singuri dacă tot încercăm
  • avem foarte puține adevăruri absolute, cunoștințele din informatică fiind foarte imperative (asemenea rețetelor de bucate) și evident apar probleme atunci când lucrăm la rețete noi

Ne place să afirmăm că ingineria software este o inginerie, dar de fapt ingineria software este momentan o artă.
Să standardizezi practici în ingineria software este ca și când i-ai spune unui pictor: dacă folosești tipurile astea de pensule și culorile astea și ai voie să folosești doar linii de grosimea asta și doar unghiuri care sunt multiplu de 30 de grade: atunci pictura va fi mai de calitate și va fi gata într-o lună.

Și chiar există picturi limitate la forme geometrice simple și la un număr mic de culori.
Problema este că nu poți exprima orice vrei cu astfel de limitări, și dacă “industria picturilor” le-ar fi avut probabil că picturile din Capela Sixtină [3] a lui Michelangelo n-ar mai fi existat.

Însă puțini artiști celebri au ajuns pe culmile succesului fără să studieze reușitele și greșelile altor artiști. Când vorbim de industria software suntem total la polul opus: repetăm aceleași greșeli încă odată și încă odată, generație de genereție. Iar când simțim nevoia să luăm o pauză și să ne reflectăm la ce am greșit ajugem să implementăm practici ce par a fi funcționat (pentru alte proiecte) de-a dreptul orbește, fără să ne gândim la motivele pentru care o facem.

Așa cum spune Alan Kay - software-ul azi este construit mutând cărămizi prin truda a mii de sclavi, când evoluția sa ar trebui să fie mult mai organică. Putem învăța extrem de multe de la natură … nu există sisteme mai complexe decât cele construite organic prin teoria evoluției lui Darwin și dacă vreți o dovadă uitați-vă în oglindă. Este greu de imaginat cum ar putea fi corpul omenesc vreodată construit prin cărămizi LEGO și cu toate astea încercăm cu disperare să aplicăm cu dârzenie aceleași metafore din alte industrii … visul oricărui manager, să iei componente și să le combini într-un mod previzibil, on-time și on-budget.

Desigur, există tone de metodologii de dezvoltare, vorbind atât de implementare, cât și de managementul echipei sau de dezvoltarea design-ului. Însă nimic nu este dovedit a funcționa decât pentru clase restrictive de probleme.
Sunt multe de scris pe această temă, mult mai multe decât pot intra în dimensiunea limitată a unui articol de blog, și cu siguranță mult mai multe decât poate reproduce un mic “hacker wannaber”.

O carte de referință ce dezbate pe larg acest subiect este Dreaming in Code [4], de Scott Rosenberg, o incursiune în lumea proiectului Chandler, un proiect extrem de ambițios care a avut parte de toate resursele necesare - programatori și designeri talentați, timp, bani și suficientă atractivitate pentru a atrage colaboratori externi. Au crezut că ei sunt mai speciali, au crezut că proiectul lor este diferit, au crezut că au învățat din greșelile altora. Și deși proiectul a născut proiecte paralele și o grămadă de idei revoluționare, din 2003 și până în prezent proiectul se află într-o perpetuă versiune de preview.

Somewhere, someone’s fist is pounding the table again. Why can’t we build software the way we build bridges?

Astfel de cărți merită citite. Altfel suntem blestemați să retrăim ziua de azi la infinit [5].

Referințe

[1] Alergii de Business [dragosh.bloghost.ro]

[2] Software engineering: raport [wikipedia.org]

[3] Capela Sixtină [wikipedia.org]

[4] Dreaming in Code [dreamingincode.com]

[5] Groundhog Day [imdb.com]

Posted in management, rant | 2 Comments »