BestJobs

October 22nd, 2009 Alex Posted in humor, management, quotes |

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.

  1. Ca sa joc eu the devil’s advocate, la partea cu algoritmul de sortare tipul avea dreptate intr-un fel. Daca vrei sa sortezi dupa lucruri simple (numere, siruri de caractere etc.) logic ca e mult mai simplu si mai in logica lui “getting things done” sa apelezi direct o functie built-in in limbaj, pt. ca au fost cheltuite oricum mult mai multe ore de munca in scrierea acelei functii comparativ cu minunea de functie sortare custom pe care ai putea-o tu implementa (vb. aici de limbaje ca php, python etc., care vin cat de cat cu bateriile incluse).

    Daca vrei sa sortezi o structura de date “atipica”, oricat de atipica ar fi acea structura ma gandesc ca ea contine ca elemente dupa care se doreste sortarea tot numere, siruri de caractere etc., deci am revenit la sortarea folosind functii built-in (in python cel putin sortarea structurile “atipice” este triviala folosind ca ajutor un dictionar, care slava domnului are O(1) la acces elemente, deci nu apare nici un cost suplimentar).

    Intrebarea si-ar fi avut mai mult rostul daca tipul ar fi dat interviu pe un job de C sau C++.

  2. Cand ma refeream la “atipica” ma refeream la o structura de date care nu e indexabila … cum ar fi o lista simplu/dublu-inlantuita, un fisier de text care nu incape in memorie, un arbore (un meniu arborescent din site daca vrei) ale carei elemente trebuie sa fie sortate daca sunt pe acelasi nivel, la parcurgerea in preordine.

    Nu este in nici un caz o intrebare pentru un job de C/C++. Este doar o intrebare de cultura generala, foarte relevanta de altfel.

    Stiu ca este OK sa fii pragmatic, dar ma interesa mai mult gandirea lui algoritmica, pentru ca problemele cele mai naspa din programare sunt alea pentru care nu esti pregatit, si ai nevoie de o gandire algoritmica si de o buna structurare a ideilor incepand cu faza de planificare (cand practic smulgi de la clienti reguli de care ei nu-si dau seama ca sunt importante).

    Chiar daca n-a vazut un algoritm de sortare in viata lui, se putea gandi la cum sorteaza el fizic un teanc de scrisori dupa data la care au venit. Si sa fim seriosi, primul algoritm de sortare l-am facut in clasa a 7-a la atelierul de informatica, si s-au descurcat si colegii mei, multi dintre ei neavand acum nici o legatura cu informatica.

    Un programator care nu stie sa reproduca un algoritm de sortare (oricat de ineficient) nu e programator, la fel cum ma astept de la orice medic sa aiba cunostinte generale de anatomie si de diagnosticare (ca sa stie unde sa te trimita in cazul in care nu-i de competenta lui).

    Si btw … este important sa cunosti mecanismele interne de functionare ale librariilor folosite. In Python o fi accesarea elementului din dictionar O(1), dar calcularea hash-ului cam este dependenta de tipul cheii, din cauza asta de multe ori se prefera un Patricia Trie in locul unui dictionar pentru indexarea de string-uri.

    Si nu poti face sortare propriu-zisa prin comparatie cu complexitate mai buna de O(N log(N)), dar pentru cazuri specifice exista sortari fezabile in O(N). Si cand lucrezi la o aplicatie de genul Facebook, optimizarile astea algoritmice fac diferenta. Si nu ma astept sa cunosti teorie, dar ma astept la un minim de intuitie pentru astfel de lucruri.

    (plus ca-n discutia respectiva nici n-am ajuns la un dialog despre complexitate si optimizari, tot elanul mi-a fost retezat din start)

  3. A nu sti structuri de date, algoritmi sau tot ce tine de bazele programarii si a te considera programator, chiar daca uneroi duci lucrurile la capat este ca si cum te-ai considera sofer (eventual de curse) fara sa stii regulile de circulatie.

  4. Exista Sort in MySQL? Nu era ORDER BY? Ca fapt divers… :P

    Oricum, tind sa fiu de acord. Okay, poate nu stii algoritmi foarte complecsi pe de rost si daca te apuci sa bricolezi ceva pe loc, probabil ca din prima ii scoti foarte ineficient. Dar bubble sort se face cel mai tarziu in clasa a noua…

    Radu: e ca si cum te-ai considera sofer de curse fara sa stii ce e ambreajul :)) Ca tu ai condus doar masini cu cutie automata!

  5. Da Tudor, este ORDER BY :) M-am grabit.

    Idea care vroiam sa o exprim este ca nu te salveaza increderea, pilele si alinierea astrelor daca angajatorul este cat de cat competent. Poti cel mult sa treci de filtrarea HR-ului.

    Si sunt si eu de acord ca e bine sa nu reinventezi roata, dar e necesar sa ai cunostinte despre mecanismele interne ale componentelor folosite, macar intuitiv.

    L-am chinuit si pe un fost coleg la interviu … cu ceva ajutor a reusit sa-mi reproduca un “merge sort” (ajutor la implementare, ca idea o avea), desi este la baza designer, facea facultatea de jurnalism, si era extrem de incepator (facuse pe ici/colo ceva Javascript si PHP).

    Chestii de genul “daca e implementata functia, ce mai ma intereseaza” nu zboara.

  6. BestJobs promoveaza non-valorile

Leave a Reply