Cum am intrat în ThoughtWorks sau un exemplu de interviu

Cum am intrat în ThoughtWorks sau un exemplu de interviu

Nu vi se pare ciudat că atunci când sunteți pe cale să vă schimbați locul de muncă și apare nevoia de a promova un interviu, primul lucru pe care îl gândiți este „trebuie să vă pregătiți pentru interviu”. Rezolvați problemele pe HackerRank, citiți Crack interviul de codare, memorați cum funcționează ArrayList și cum diferă de LinkedList. Da, ar putea întreba și despre sortare și, evident, ar fi neprofesionist să spunem că sortarea rapidă ar fi cel mai probabil cea mai bună alegere.
Dar stai, programezi 8 ore pe zi, rezolvi probleme interesante si deloc banale, iar la noul tau job vei face acelasi lucru, in plus sau in minus. Dar, cu toate acestea, pentru a trece un interviu, trebuie să vă pregătiți în plus, nici măcar să nu vă perfecționați abilitățile zilnice, ci să învățați ceva de care nu aveți nevoie la locul de muncă actual și este puțin probabil să aveți nevoie la următorul dvs. La obiecțiile voastre că informatica este în sângele nostru, iar dacă ne treziți în miezul nopții, suntem obligați să scriem cu ochii închiși pe o față de pernă o plimbare în jurul lățimii unui copac fără măcar să ne recăpătăm cunoștința, eu va răspunde că dacă voi obține un loc de muncă la circ, iar principalul meu truc ar fi exact acesta - atunci poate că da, sunt de acord. Această abilitate trebuie testată.

Dar de ce testați abilitățile care sunt irelevante pentru jobul dvs. actual? Doar pentru că a devenit la modă? Pentru că Google face asta? Sau pentru că viitorul tău lider de echipă a trebuit să învețe toate metodele de sortare înainte de interviu și acum crede că „orice programator bun trebuie să știe pe de rost implementarea găsirii unui palindrom într-un șir”.

Ei bine, nu sunteți Google (c). Ceea ce își poate permite Google, companiile obișnuite nu pot. Google, după ce a analizat datele angajaților săi, a ajuns la concluzia că inginerii cu experiență la olimpiade sunt buni în a face față sarcinilor sale specifice. Mai mult, prin proiectarea procesului lor de selecție, aceștia își pot permite să-și asume riscul că s-ar putea să nu angajeze câțiva ingineri buni, deoarece nu pot rezolva cu ușurință problemele de matematică. Dar aceasta nu este o problemă pentru ei, sunt mulți oameni care vor să lucreze la Google, postul va fi închis.
Acum să ne uităm pe fereastră, și dacă în fața biroului tău inginerii care doresc să lucreze pentru tine nu au înființat încă o tabără de cort, iar dezvoltatorii tăi caută mai des pe stackoverflow ce anume trebuie să fie instalată următoarea adnotare de primăvară, mai degrabă decât complexitățile algoritmilor de clasare, atunci, aparent, este timpul să vă gândiți dacă ar trebui să copiați Google.

Ei bine, dacă de data aceasta Google a eșuat și nu a oferit un răspuns, ce ar trebui să faci? Verificați exact ce va face dezvoltatorul la locul de muncă. Ce prețuiești la dezvoltatori?
Faceți criterii pentru cine doriți să angajați și dezvoltați teste care testează exact aceste abilități.

ThoughtWorks

Ce legătură are ThoughtWorks cu asta? Aici am găsit un exemplu de interviu exemplar pentru mine. Cine sunt ThoughtWorks? Pe scurt, aceasta este o companie de consultanță High-End cu birouri în toată lumea, de la China, Singapore până pe continentele americane, care de aproximativ 25 de ani face consultanță în domeniul dezvoltării, are propria divizie Science, condusă de Martin. Păsărar. Dacă căutați o listă de 10 cărți de citit obligatoriu pentru un inginer de software, atunci poate că 2-3 dintre ele vor fi scrise de băieții de la ThoughtWorks, cum ar fi Refactoring By Martin Fowler și Building Microservices: Designing Fine-Grained Systems de Sam Newman sau construirea arhitecturii evolutive
de Patrick Kua, Rebecca Parsons, Neal Ford.

Afacerea companiei este construită pe furnizarea de servicii destul de costisitoare, dar clientul plătește pentru o calitate fenomenală, care constă în expertiză, standarde interne și, bineînțeles, oameni. Prin urmare, angajarea persoanelor potrivite este vitală aici.
Ce fel de oameni au dreptate? Desigur, există diferite pentru fiecare. ThoughtWorks a stabilit că cele mai importante criterii pentru modelul lor de afaceri pentru dezvoltatori sunt:

  • Capacitate de dezvoltare în perechi. Este abilitate, nu experiență sau îndemânare. Nimeni nu se așteaptă să vină oameni care practică programarea în pereche de 5 ani, dar a fi receptiv la opiniile altora și a fi capabil să asculte este o abilitate necesară.
  • Abilitatea de a scrie teste și, în mod ideal, de a practica TDD
  • Înțelegeți SOLID și OOP și puteți să le aplicați.
  • Prezintă-ți părerea. În calitate de consultant, trebuie să lucrezi cu dezvoltatorii clientului, cu alți consultanți, și nu prea este avantaj dacă o persoană știe să facă ceva bine, dar este complet incapabil să-l transmită restului echipei.

Acum este important să evaluăm aceste abilități speciale ale candidatului. Și aici vreau să vorbesc despre experiența mea de interviu la ThoughtWorks. Voi spune imediat că am fost în Singapore și am trecut, dar procesul de recrutare este unitar și nu va diferi prea mult de la țară la țară.

Etapa 0. HR

După cum se întâmplă adesea, un interviu de 20 de minute cu HR. Nu mă voi opri asupra ei, voi spune doar că nu am întâlnit niciodată o persoană de HR care să poată vorbi timp de 15 minute despre cultura de dezvoltare în companie, de ce folosesc TDD, de ce programarea în perechi. De obicei, HR-urile se opun la această întrebare și spun că procesul lor este normal: dezvoltatorii dezvoltă, testerii testează, managerii conduc.

Etapa 1. Cât de bun ești la OOP, TDD?

Cu 1.5 ore înainte de începerea interviului, mi s-a trimis o sarcină de a realiza un simulator Mars Rover.

Misiune rover pe MarteO echipă de rovere robotizate urmează să fie aterizată de NASA pe un platou de pe Marte. Acest platou, care este curios de dreptunghiular, trebuie să fie navigat de rover, astfel încât camerele lor de la bord să poată obține o vedere completă a terenului înconjurător pentru a le trimite înapoi pe Pământ. Poziția și locația unui rover sunt reprezentate de o combinație de coordonate x și y și o literă reprezentând unul dintre cele patru puncte cardinale ale busolei. Platoul este împărțit într-o grilă pentru a simplifica navigarea. Un exemplu de poziție ar putea fi 0, 0, N, ceea ce înseamnă că roverul se află în colțul din stânga jos și cu fața spre nord. Pentru a controla un rover, NASA trimite un șir simplu de litere. Literele posibile sunt „L”, „R” și „M”. „L” și „R” fac roverul să se învârtă cu 90 de grade la stânga sau, respectiv, la dreapta, fără a se deplasa din punctul său actual. „M” înseamnă deplasarea înainte cu un punct al grilei și menținerea aceleiași direcții.
Să presupunem că pătratul direct la nord de (x, y) este (x, y+1).
INTRARE:
Prima linie de intrare sunt coordonatele din dreapta sus ale platoului, coordonatele din stânga jos sunt presupuse a fi 0,0.
Restul datelor de intrare sunt informații referitoare la roverele care au fost desfășurate. Fiecare rover are două linii de intrare. Prima linie oferă poziția roverului, iar a doua linie este o serie de instrucțiuni care îi spun roverului cum să exploreze platoul. Poziția este formată din două numere întregi și o literă separate prin spații, corespunzătoare coordonatelor x și y și orientării roverului.
Fiecare rover va fi terminat secvenţial, ceea ce înseamnă că al doilea rover nu va începe să se mişte până când primul nu se va termina.
IEȘIRE:
Ieșirea pentru fiecare rover ar trebui să fie coordonatele sale finale și direcția.
NOTE:
Pur și simplu implementați cerințele de mai sus și dovediți că un aspirator funcționează scriind teste unitare pentru el.
Crearea oricărei forme de interfață cu utilizatorul este în afara domeniului de aplicare.
Rezolvarea problemei urmând o abordare TDD (Test Driven Development) va fi preferată.
În timpul scurt disponibil, suntem mai preocupați de calitate decât de completitudine.
*Nu pot posta misiunea care mi-a fost trimisă, aceasta este o temă veche care a fost dată acum câțiva ani. Dar crede-mă, în principiu totul rămâne la fel.

Aș dori în special să atrag atenția asupra criteriilor de evaluare. De câte ori ați întâlnit o situație în care lucrurile care sunt importante pentru un candidat sunt complet neimportante în timpul auditului și invers. Nu toata lumea gandeste la fel ca tine, dar multi iti pot accepta si urma valorile daca acestea sunt exprimate clar. Deci, din criteriile de evaluare reiese imediat că cele mai importante abilități în această etapă sunt

  • TDD;
  • Abilitatea de a utiliza OOP și de a scrie cod care poate fi întreținut;
  • abilități de programare în pereche

Așadar, am fost avertizat să petrec acele 1.5 ore gândindu-mă la cum voi face sarcina, în loc să scriu cod. Vom scrie codul împreună.

Când am vorbit la telefon, băieții ne-au spus pe scurt cine sunt și ce fac și s-au oferit să înceapă dezvoltarea.

Pe parcursul întregului interviu, nu am avut niciodată sentimentul că sunt intervievat. Există sentimentul că dezvoltați cod într-o echipă. Dacă rămâi blocat undeva, ei ajută, sfătuiesc, discută, chiar se ceartă între ei despre cum să o faci. La interviu, am uitat cum să verific în JUnit 5 că o metodă aruncă o excepție - s-au oferit să continue să scrie testul, în timp ce unul dintre ei căuta pe google cum să o facă.

Literal, la câteva ore după interviu, am primit feedback constructiv - ce mi-a plăcut și ce nu. În cazul meu, am fost lăudat pentru utilizarea claselor Sealed ca alternativă la obiectul nul; pentru faptul ca inainte de a scrie codul am scris in pseudocod cum as dori sa controlez roverul, si astfel am primit o schita a claselor, cel putin cele care sunt implicate in API-ul robotului.

Pasul 2: Spune-ne

Cu o săptămână înainte de interviu, mi s-a cerut să pregătesc o prezentare pe orice subiect care mă interesa. Formatul este simplu și familiar: 15 minute de prezentare, 15 minute de răspuns la întrebări.
Am ales Clean Architecture de unchiul Bob. Și din nou am fost intervievat de câteva persoane. Aceasta a fost prima mea experiență de prezentare în limba engleză și, poate, dacă aș fi fost într-o situație stresantă, nu aș fi putut face față. Dar din nou, nu am avut niciodată senzația că sunt la un interviu. Totul este ca de obicei – le spun, ei ascultă cu atenție. Nici măcar sesiunea tradițională de întrebări și răspunsuri nu a fost ca un interviu; era clar că întrebările nu erau puse să „se scufunde”, ci cele care îi interesau cu adevărat în prezentarea mea.

La câteva ore după interviu, am primit feedback - prezentarea a fost foarte utilă și le-a plăcut cu adevărat să asculte.

Etapa 3. Codul calității producției

După ce am avertizat că aceasta este ultima etapă a interviurilor tehnice, mi s-a cerut să aduc codul acasă într-o stare pregătită pentru producție, apoi să trimit codul pentru revizuire și să programez interviuri la care cerințele pentru sarcină se vor schimba și codul va fi necesita modificare. Privind în perspectivă, pot spune că revizuirea codului se desfășoară orbește, evaluatorii nu cunosc postul pentru care candidează candidatul, nu-i văd CV-ul, nici măcar nu-i văd numele.

Telefonul a sunat și din nou erau câțiva tipi de cealaltă parte a monitorului. Totul este la fel ca la primul interviu: principalul lucru este să nu uiți de TDD, să spui ce faci și de ce. Daca nu ai mai practicat TDD pana acum, atunci iti recomand sa incepi sa o faci imediat, nu pentru ca este necesar in companii, ci pentru ca iti simplifica semnificativ viata, iti reduce nivelul de stres daca iti place. Îți amintești cum a trebuit să cauți frenetic cu un depanator o eroare care poate fi reprodusă doar prin browser, dar nu o poți reproduce cu teste? Acum imaginați-vă că va trebui să prindeți o astfel de greșeală în timpul unui interviu - vi se garantează câteva fire de păr gri. Ce obținem cu TDD? Am schimbat codul și ne-am dat seama în mod neașteptat că acum testele sunt roșii, dar care este eroarea pe care nu o putem da seama prima dată? Bine, spunem „Hopa” intervievatorilor, apăsăm Ctrl-Z și începem să facem pași mici înainte. Și da, trebuie să-ți dezvolți capacitatea de a te dezvolta folosind TDD în tine, abilitatea de a te îndrepta spre obiectiv, astfel încât testele tale să fie permanent verzi și nu roșii pentru o jumătate de zi, pentru că „ai multă refactorizare”. Aceasta este exact aceeași abilitate ca scrierea codului care poate fi întreținut sau scrierea codului productiv.

Deci, cât de bine poate fi schimbat codul dvs. depinde de tipul de design cu care v-ați propus, cât de simplu este și cât de bune sunt testele dvs.

După interviu, am primit feedback în câteva ore. În această etapă, mi-am dat seama că aproape am terminat și că a mai rămas foarte puțin până când l-am „întâlnit pe Fowler”.

Etapa 4. Finală. Destul de întrebări tehnice. Vrem să știm cine ești!

Sincer să fiu, am fost oarecum nedumerit de această formulare a întrebării. Cum poți înțelege ce fel de persoană sunt într-o oră de conversație? Și cu atât mai mult, cum poți înțelege asta când vorbesc o limbă care nu este limba mea maternă și, la drept vorbind, foarte prost și cu limba. În interviurile anterioare, personal mi-a fost mai ușor să vorbesc decât să răspund la întrebări, iar accentul a fost de vină. Cel puțin unul dintre intervievatori era asiatic – iar accentul lor, ei bine, să spunem, este oarecum specific urechii europene. Prin urmare, am decis să adopt o abordare proactivă - pregătiți o prezentare despre mine și la începutul interviului oferă să vorbesc despre mine cu această prezentare. Dacă ei sunt de acord, atunci cel puțin vor fi mai puține întrebări pentru mine; dacă vor respinge oferta, ei bine, 3 ore din viața mea petrecute la o prezentare nu sunt un preț atât de mare. Dar ce ar trebui să scrii în prezentarea ta? Biografie - Născut acolo, la vremea aceea, a făcut școală, a absolvit facultatea - dar cui îi pasă?

Dacă căutați puțin pe Google despre cultura Thoughtworks, veți găsi un articol de Martin Fowler [https://martinfowler.com/bliki/ThreePillars.html] care descrie cei 3 piloni: afaceri durabile, excelență în software și justiție socială.

Să presupunem că Excelența software a fost deja verificată pentru mine. Rămâne să arătăm afaceri durabile și justiție socială.

Mai mult, am decis să mă concentrez pe acesta din urmă.

Pentru început, i-am spus de ce ThoughtWorks - am citit blogul lui Martin Fowler la facultate, de unde dragostea mea pentru codul Clean.

Proiectele pot fi prezentate și din unghiuri diferite. De asemenea, a dezvoltat software pentru medicină care a simplificat viața pacienților și chiar, potrivit zvonurilor, a salvat o viață. De asemenea, am dezvoltat software pentru bănci, care a făcut și viața mai ușoară cetățenilor. Mai ales dacă această bancă este folosită de 70% din populația țării. Nu este vorba despre Sberbank și nici măcar despre Rusia.

Vrei să știi despre mine? BINE. Hobby-ul meu este fotografia, într-un fel sau altul țin un aparat de fotografiat în mână de vreo 10 ani, sunt fotografii pe care nu îmi este prea jenă să le arăt. De asemenea, la un moment dat, am ajutat un adăpost de pisici: am fotografiat pisici care aveau nevoie de un cămin permanent. Și cu fotografii bune este mult mai ușor să plasezi o pisică. Probabil am fotografiat o suta de pisici :)

Până la urmă, 80% din prezentarea mea a fost plină de pisici.

Imediat după prezentare, HR mi-a scris că nu știa încă rezultatele interviului, dar tot biroul era deja impresionat de pisici.

În cele din urmă, am așteptat feedback - i-am mulțumit pe toată lumea ca persoană.

Dar în timpul conversației finale, HR a spus cu tact că Justiția Socială este foarte bună și necesară, dar nu toate proiectele sunt așa. Și m-a întrebat dacă m-a speriat. În general, am exagerat puțin cu Justiția Socială, se întâmplă :)

Total

Drept urmare, lucrez în Singapore la Thoughtworks de câteva luni și văd că aici prea multe companii adoptă „cele mai bune practici de interviu” de la Google, folosind frunze și Whiteboard pentru codificare, în ciuda faptului că au mai multe cunoștințe decât Spring, Symfony, RubyOnRails ( Subliniați ceea ce este necesar) nu este necesar în lucrare. Inginerii își iau o săptămână liberă înainte de un interviu pentru a se „pregăti”.

La Thoughtworks, pe lângă cerințele adecvate pentru candidat, următoarele principii sunt în prim plan:
Bucuria interviului. Mai mult, pentru ambele părți. Într-adevăr, dacă doriți să obțineți cel mai bun personal (și cine nu?), atunci un interviu nu este o piață în care sunt aleși sclavii, ci un spectacol în care atât angajatorul, cât și candidatul se evaluează reciproc. Și dacă un candidat asociază emoții plăcute cu o companie, este probabil să aleagă această companie anume

Intervievatori multipli pentru a atenua părtinirea. La Thoughtworks, programarea perechilor este standardul de facto. Și dacă această practică poate fi aplicată și în alte domenii, TW încearcă să facă acest lucru. La fiecare etapă, interviul este condus de 2 persoane. Astfel, fiecare persoană este evaluată de cel puțin 8 persoane, iar TW încearcă să selecteze intervievatori cu medii diferite, direcții diferite (nu doar tehnicieni) și gen.

În cele din urmă, decizia de angajare se va lua pe baza opiniilor a cel puțin 8 persoane, iar nimeni nu are vot decisiv.

Angajare pe baza de atribute În loc să luați o decizie bazată pe gusturile sau antipatiile unui candidat, este dezvoltat un formular pentru fiecare rol și fiecare etapă care include atributele care sunt evaluate. În același timp, atunci când se evaluează, este foarte recomandat să se evalueze nu experiența într-o anumită abilitate, ci capacitatea de a o aplica. Astfel, dacă un candidat nu a fost capabil să aplice vreo abilități, precum TDD, dar totuși încearcă să le aplice, ascultă sfaturi despre cum să le folosească corect, are toate șansele să treacă la interviu.

Nu sunt necesare certificate de studii TW nu necesită nicio certificare sau educație în informatică. Sunt evaluate doar aptitudinile.

Acesta este primul interviu pe care l-am avut cu companii străine pentru care nu a trebuit să mă pregătesc. După fiecare etapă, nu m-am simțit epuizat, ci dimpotrivă, m-am bucurat că am putut aplica cele mai bune practici, că oamenii de cealaltă parte a monitorului le-au apreciat și le-au aplicat în fiecare zi.

După câteva luni, pot spune că așteptările mi-au fost pe deplin îndeplinite. Prin ce diferă ThoughtWorks de o companie obișnuită? Într-o companie obișnuită puteți găsi dezvoltatori buni și oameni drăguți, dar la TW concentrarea lor este în afara topurilor.

Dacă sunteți interesat să vă alăturați ThoughtWorks, puteți vedea pozițiile noastre deschise aici
De asemenea, vă sugerez să acordați atenție posturilor vacante interesante:
Inginer software principal: Germania, Londra, Madrid, Singapur
Inginer Software Senior: Sydney, Germania, Manchester, Bangkok
Inginer de software: Sydney, Barcelona, Milano
Inginer senior de date: Milano
Analist de calitate: Germania China
Infrastructură: Germania, Londra, Chile
(Aș vrea să vă avertizez sincer că linkul este un link de referință, dacă mergeți la TW, voi primi un bonus frumos). Alegeți un birou care vă place, nu trebuie să vă limitați la Europa, până la urmă, la fiecare 2 ani, TW va fi bucuros să vă mute în altă țară, pentru că... aceasta face parte din politica ThoughtWorks, astfel încât cultura este răspândită și omogenizată.

Nu ezitați să puneți întrebări în comentarii sau să-mi cereți recomandări.
Dacă subiectul pare interesant, voi scrie despre cum este să lucrezi la ThoughtWorks și cum este viața în Singapore.

Sursa: www.habr.com

Adauga un comentariu