Kako sem prišel v ThoughtWorks ali vzorčno intervju

Kako sem prišel v ThoughtWorks ali vzorčno intervju

Ali ne zvenči čudno, da ko se odločite za menjavo delovnega mesta in se pojavijo razgovori, najprej pomislite: „moram se pripraviti na razgovor“. Reševati naloge na HackerRanku, prebrati Crack the Coding Interview, naučiti se, kako deluje ArrayList in s čim se razlikuje od LinkedList. Aja, ne pozabiti, lahko vprašajo tudi o sortiranju, in očitno bi bilo neprofesionalno reči, da je quick sort verjetno najboljša izbira.
Ampak počakajte, saj programirate 8 ur na dan, rešujete zanimive in zahtevne naloge, in na novem delovnem mestu boste počeli skoraj enako. Kljub temu pa je potrebna dodatna priprava za razgovor, ne da bi izpopolnjevali svoje vsakodnevne veščine, temveč se naučiti tisto, kar vam na trenutnem delovnem mestu ni bilo potrebno in verjetno ne bo tudi na naslednjem. Na vaše ugovore, da je računalništvo v naši krvi, in da če nas zbudite sredi noči, moramo slepo napisati algoritem za prehod drevesa v širino, pa še zdaleč ne bomo potrebovali zavesti, odgovarjam, da če se zaposlen v cirkusu in je moj glavni trik prav to — se strinjam. Treba je preveriti to znanje.

Ampak zakaj preverjati nerelevantne veščine na trenutnem delovnem mestu? Le zato, ker je to postalo moderno? Zato, ker Google tako počne? Ali ker je vaš bodoči tim lider moral pred razgovorom usvojiti vse metode sortiranja in zdaj meni, da „si vsak dober programer mora zapomniti implementacijo iskanja palindroma v nizu“?

Torej, niste Google. Kar si lahko privošči Google, si običajna podjetja ne morejo. Google je analiziral podatke svojih zaposlenih in prišel do zaključka, da imajo inženirji z olimpijsko preteklostjo dobre rezultate pri njihovih nalogah. Poleg tega, pri oblikovanju izbirnega postopka, lahko prenašajo tveganje, da morda ne bodo zaposlili nekaterih dobrih inženirjev, ker ne znajo zlahka reševati matematičnih nalog. A to ni tragedija zanje, želja po delu v Googlu je velika, delovno mesto se bo zapolnilo.
Zdajmo pogledati skozi okno, in če pred vašim pisarnom še vedno ni inženirjev, ki želijo delati pri vas, ki so si postavili šotor, in vaši razvijalci pogosteje iščejo na stackoverflow, katero spominsko oznako za Spring je treba dodati, namesto podrobnosti o algoritmih rangiranja, potem očitno morate razmisliti, ali je smiselno kopirati Google.

Dobro, če vas je Google tokrat pustil na cedilu in ni dal odgovora, kaj storiti? Preveriti natančno to, kar bo razvijalec delal na delu. Kaj cenite pri razvijalcih?
Določite kriterije, koga želite najeti, in razvijte teste, ki preverjajo prav te veščine.

ThoughtWorks

Kakšna zveza je s podjetjem ThoughtWorks? Prav tu sem našel primer vzorčnega intervjuja. Kdo so ThoughtWorks? Na kratko, to je visoko kakovostno svetovalno podjetje z офиси po celem svetu, od Kitajske in Singapurja do Amerike, ki se ukvarja z razvojem že približno 25 let, ima svoj raziskovalni oddelek pod vodstvom Martina Fowlerja. Če poiskate seznam deset knjig, ki jih mora prebrati vsak inženir, bodo verjetno 2-3 izmed njih napisali fantje iz ThoughtWorks, kot na primer Refactoring avtorja Martina Fowlerja in Building Microservices: Designing Fine-Grained Systems avtorja Sama Newmana ali Building Evolutionary Architectures.
avtorji Patrick Kua, Rebecca Parsons, Neal Ford.

Poslovanje podjetja temelji na nudenju precej dragih storitev, vendar naročnik plača za fenomenalno kakovost, ki izhaja iz strokovnosti, notranjih standardov in seveda ljudi. Zato je tukaj ključnega pomena najeti prave ljudi.
Kdo so ti pravi ljudje? Seveda so za vsakega drugačni. ThoughtWorks je opredelil, da so za njihov poslovni model za razvijalce najbolj pomembna merila:

  • Sposobnost za parno programiranje. Gre za sposobnost, ne pa za izkušnje ali znanje. Nihče ne pričakuje, da bodo prišli ljudje, ki prakticirajo parno programiranje že 5 let. Toda biti odprt za mnenja drugih, znati prisluhniti – to je nujna veščina.
  • Sposobnost pisanja testov, v idealnem primeru prakticirati TDD.
  • Razumeti SOLID in OOP ter znati to uporabiti.
  • Predstaviti svoje mnenje. Svetovalec mora delati z naročnikovimi razvijalci in drugimi svetovalci, in ni veliko koristi, če nekdo dobro zna nekaj delati, a je popolnoma nesposoben tega prenesti na druge člane ekipe.

Zdaj je pomembno oceniti ravno te veščine pri kandidatu. Tu želim deliti svoje izkušnje s pogovorom pri ThoughtWorks. Povedal bom, da sem razgovor imel v Singapurju in ga uspešno opravil, toda postopek rekrutiranja je poenoten in se ne bo bistveno razlikoval od države do države.

Korak 0. HR

Kot pogosto, 20-minutni pogovor z HR. Nad tem se ne bom zadrževal, povem le, da nikoli prej nisem srečal HR-ja, ki bi lahko 15 minut pripovedoval o kulturi razvoja v podjetju, zakaj uporabljajo TDD in zakaj parno programiranje. Običajno na tem mestu HR-ji izgubijo rdečo nit in razložijo, da imajo običajen postopek: razvijalci razvijajo, testni inženirji testirajo, menedžerji pa usklajujejo.

Korak 1. Kako si dober v OOP, TDD?

1,5 ure pred začetkom razgovora so mi poslali nalogo, da naredim simulator Mars Rover.

Naloga Mars RoverEkipa robotskih roverjev naj bi jo NASA spustila na planoto na Marsu. Ta planota, ki je nenavadno pravokotna, mora biti navigirana z roverji, da lahko njihovi vgrajeni kameram zajamejo celoten pregled okoliškega terena, ki ga pošljejo nazaj na Zemljo. Položaj in lokacijo roverja predstavljajo kombinacija x in y koordinat ter črka, ki predstavlja eno od štirih osnovnih smeri. Planota je razdeljena v mrežo, da se poenostavi navigacija. Primer položaja je lahko 0, 0, N, kar pomeni, da je rover v spodnjem levem kotu in gleda proti severu. Da bi nadzorovali rover, NASA pošlje preprosto vrsto črk. Možne črke so 'L', 'R' in 'M'. 'L' in 'R' vrti rover za 90 stopinj v levo ali desno, ne da bi se premaknil s trenutnega mesta. 'M' pomeni, da se premakne naprej za eno mrežno točko in ohrani isto usmeritev.
Domnevajte, da je kvadrat neposredno severno od (x, y) (x, y+1).
VNOS:
Prva vrstica vnosa so zgornje desne koordinate planote, spodnje leve koordinate pa so domnevno 0,0.
Preostali vnosi vsebujejo informacije o roverjih, ki so bili poslani. Vsak rover ima dve vrstici vnosa. Prva vrstica daje položaj roverja, druga pa serijo navodil, ki govorijo roverju, kako raziskovati planoto. Položaj je sestavljen iz dveh celih števil in črke, ločenih s presledki, kar ustreza x in y koordinatam ter orientaciji roverja.
Vsak rover se bo končal zaporedno, kar pomeni, da drugi rover ne bo začel premikanja, dokler prvi ne konča premikanja.
IZHOD:
Izhod za vsak rover naj bi bil njegove končne koordinate in usmeritev.
OPOMBE:
Preprosto implementirajte zahtevke zgoraj in dokažite, da sesalnik deluje z pisanjem enotnih testov za to.
Ustvarjanje kakršne koli oblike uporabniškega vmesnika je zunaj obsega.
Reševanje problema z upoštevanjem pristopa TDD (Test Driven Development) bo prednostno.
V kratkem razpoložljivem času smo bolj zaskrbljeni zaradi kakovosti kot pa zaradi popolnosti.
*Ne morem objaviti naloge, ki so mi jo poslali, to je stara naloga, ki je bila dana pred nekaj leti. Ampak verjemite, načeloma je vse ostalo enako.

Posebno bih želeo da skrenem pažnju na kriterijume ocenjivanja. Koliko puta ste se suočili sa situacijom u kojoj su stvari važne za kandidata potpuno nebitne tokom provere, i obrnuto. Ne misle svi isto kao vi, ali mnogi će prihvatiti vaše vrednosti i slediti ih ako su jasno navedene. Tako, iz kriterijuma ocenjivanja odmah je jasno da su najvažnije veštine u ovoj fazi

  • TDD;
  • Sposobnost korišćenja OOP-a i pisanja održivog koda;
  • sposobnosti za pair programming

Dakle, upozoren sam da ove 1,5 sata potrošim na razmišljanje o tome kako planiram da rešim zadatak, a ne na pisanje koda. Kod ćemo pisati zajedno.

Kad smo se čuli, momci su ukratko predstavili ko su i čime se bave i predložili da započnemo razvoj.

Tokom celog intervjua nisam imao osećaj da se nalazim na razgovoru za posao. Postoji osećaj da razvijate kod u timu. Ako se negde zaglavite — pomažu, savetaju, raspravljaju, čak se i svađaju oko toga kako najbolje uraditi. Na intervjuu sam zaboravio kako da u JUnit 5 proverim da li metoda baca izuzetak — predložili su da nastavim pisanje testa, dok je jedan od njih tražio kako to da uradi.

Bukvalno nekoliko sati nakon intervjua dobio sam konstruktivnu povratnu informaciju — šta se svidelo i šta ne. U mom slučaju su pohvalili korišćenje Sealed klasa kao alternative objekta null; za to što sam pre pisanja koda napisao pseudokod kako bih želeo da upravljam roverom, i tako dobio skicu klasa, barem onih koje su uključene u API robota.

Faza 2. Reci nam

Nedeljama pre intervjua zamoljen sam da pripremim prezentaciju na bilo koju temu koja me interesuje. Format je jednostavan i poznat: 15 minuta prezentacije, 15 minuta odgovora na pitanja.
Izbral sem Clean Architecture by Uncle Bob. Spet sta me intervjuirala dva človeka. To je bilo moje prvo izkušnja z obravnavanjem v angleščini in verjetno ne bi zmogel, če bi bil v stresni situaciji. A spet, nikoli nisem imel občutka, da sem na razgovoru. Vse je bilo kot običajno — jaz pripovedujem, oni pa pozorno poslušajo. Tudi tradicionalna seja vprašanj in odgovorov ni bila podobna intervjuju, bilo je očitno, da vprašanja niso bila postavljena, da bi 'potopila' ampak so jih resnično zanimale moje predstavitve.

Čez nekaj ur po razgovoru sem prejel povratne informacije — predstavitev je bila zelo koristna in iskreno so uživali v poslušanju.

Faza 3. Koda kakovosti produkcije

Po opozorilu, da je to zadnja faza tehničnih razgovorov, so me prosili, naj doma kodo dovedem do produkcijske priprave, nato pa jo pošljem na pregled in določim razgovor, kjer se bodo zahteve naloge spremenile in koda bo potrebovala prilagoditve. Za naprej lahko povem, da se pregled kode izvaja brez vpogleda, pregledovalci ne vedo niti za položaj, na katerega kandidira kandidat, ne vidijo njegovega življenjepisa, niti ne vedo njegovega imena.

Klic, in znova nekaj fantov na drugi strani monitorja. Vse kot na prvem razgovoru: glavna stvar je, da ne pozabite na TDD, povejte, kaj počnete in zakaj. Če prej niste prakticirali TDD, priporočam, da to začnete takoj početi, ne zato, ker je to potrebno v podjetjih, ampak ker vam to znatno poenostavi življenje in zniža raven stresa, če želite. Se spomnite, kako ste obupano iskali napako z debagerjem, ki se pojavi samo v brskalniku, in je ne morete ponoviti s testi? Zdaj si predstavljajte, da morate takšno napako loviti med razgovorom — zagotovo si boste nakopali nekaj sivih las. Kaj nam prinaša TDD? Spremenili ste kodo in nepričakovano ugotovili, da so testi rdeči, a ne morete razumeti, kje je težava? Okej, povemo intervjujercem “Ups”, pritisnemo Ctrl-Z in začnemo korakati naprej s majhnimi koraki. In da, veščina razvoja z uporabo TDD je veščina, ki jo morate razviti, sposobnost, da gremo k cilju, tako da so vaši testi stalno zeleni, ne rdeči pol dneva, ker “imate veliko refaktoringa”. To je prav takšna veščina, kot sposobnost pisanja vzdržljive kode ali učinkovite kode.

Torej, kako dobro se vaš koda prilagaja spremembam, je odvisno od zasnove, ki ste jo prvotno postavili, kako enostavna je in koliko dobrih testov imate.

Po razgovoru sem prejel povratne informacije v nekaj urah. V tem koraku sem spoznal, da sem praktično prestal in da je ostalo le še malo do “srečanja s Fowlerjem”.

Faza 4. Finale. Dovolj tehničnih vprašanj. Želimo vedeti, kdo ste!

Iskreno, postavljam se kako možeš razumeti kakva sam osoba nakon jednog časa razgovora? A pogotovo kako to možeš shvatiti kada razgovaram na jeziku koji nije moj maternji, i da budem iskren, prilično loše i mucavo. Na prethodnim intervjuima bilo mi je lakše pričati nego odgovarati na pitanja, a za to je kriv moj naglasak. Bar jedan od intervjuisanih bio je Azijac — a njihov naglasak, recimo, prilično je specifičan za evropsko uvo. Zato sam odlučio da primenim proaktivan pristup — pripremiti prezentaciju o sebi i na početku intervjua ponuditi im da pričam o sebi uz tu prezentaciju. Ako pristanu — bar će biti manje pitanja za mene, ako odbiju ponudu — pa, 3 sata mog života potrošenih na prezentaciju nije tako visoka cena. Ali šta napisati u prezentaciji? Biografiju — Rođen tamo i tada, išao u školu, završio univerzitet — koga to interesuje?

Ako malo potražiš o kulturi Thoughtworks-a, možeš naći članak Martina Faulera [https://martinfowler.com/bliki/ThreePillars.html], u kojem su opisani 3 stuba: Održivo poslovanje, Izvrsnost softvera i Društvena pravda.

Pretpostavljam da su već proverili moju Izvrsnost softvera. Ostaje da pokažem Održivo poslovanje i Društvenu pravdu.

Stoga sam odlučio da se fokusiram na poslednje.

Na početku sam rekao zašto je ThoughtWorks posebna — još na fakultetu sam čitao blog Martina Faulera, odatle i ljubav prema Čistom kodu.

Projekte takođe mogu predstaviti iz različitih uglova. Razvijao sam softver za medicinu koji je olakšao život pacijentima, i čak, kako se priča, spasio jedan život. Razvijao sam i softver za banke, takođe neku vrstu olakšavanja života građanima. Posebno ako tu banku koristi oko 70% populacije zemlje. Ne mislim na Sberbanku, niti na Rusiju.

Želiš da saznaš nešto o meni? U redu. Moje hobi je fotografija, nekako ili onako već 10 godina imam aparat u rukama, imam fotografije koje nije sramota pokazati. Takođe, jedno vreme sam pomagao azilu za mačke: fotografisao sam mačke koje su trebale stalni dom. A sa dobrim fotografijama je mnogo lakše pronaći dom mački. Verovatno sam snimio oko stotinu mačaka 🙂

Na kraju, 80% prezentacije mi je bilo ispunjeno mačkama.

Takoj po predstavitvi mi je HR napisal, da še ne ve rezultatov razgovora, vendar je celotna pisarna že navdušena nad mačkami.

Na koncu sem dobil povratno informacijo — vsi so bili zadovoljni z mano kot osebnostjo.

A HR je med zadnjim pogovorom taktično omenil, da je socialna pravičnost zelo dobra in potrebna, a ne vsi projekti so takšni. In me vprašal, ali me to plaši. Na splošno, mogoče sem malo pretiraval s socialno pravičnostjo, zgodi se 🙂

Zaključek

Kot rezultat, že nekaj mesecev delam v Singapurju pri Thoughtworks, vidim, da tudi tukaj mnoge podjetja prevzemajo 'najboljše prakse razgovora' iz Googla, pri čemer uporabljajo listke in bele tablo za kodiranje, kljub temu, da v delu ni potrebno znanje izven Spring-a, Symfony-a, RubyOnRails (kar koli je potrebno poudariti). Inženirji vzamejo tedenski dopust pred razgovorom, da se 'pripravijo'.

V Thoughtworks pa, poleg ustreznih zahtev do kandidata, dajo na prvo mesto naslednja načela:
Veselje do razgovora. Pravzaprav za obe strani. Resnično, če želite pridobiti najboljše kadre (kdo pa ne želi?), potem razgovor ni trg, kjer izbirate sužnje, temveč ogled, kjer se delodajalec in kandidat ocenjujeta med seboj. In če se lahko kandidat s podjetjem poveže s prijetnimi čustvi — je zelo verjetno, da bo izbral prav to podjetje.

Več intervjuvatorjev za zmanjšanje pristranskosti. V Thoughtworks je pare programiranje de facto standard. In če se to prakso da uporabiti v drugih področjih, jo TW poskuša implementirati. Na vsakem koraku rozhovor izvajata 2 osebi. Tako oceni vsako osebo najmanj 8 ljudi, in TW se trudi izbrati intervjuverje z različno ozadjem, različnih smeri (ne samo tehničnih) in spola.

Na koncu bo odločitev o zaposlitvi sprejeta na podlagi mnenja najmanj 8 ljudi in nihče nima pravice odločilnega glasu.

Zaposlovanje na podlagi atributov Namesto da bi se odločali na podlagi "všeč mi ali ne" kandidata, je za vsako vlogo in fazo razvita obrazec, ki vključuje ocenjevanje atributov. Pri tem je priporočljivo ocenjevati ne izkušnje v določenem znanju, temveč sposobnost njegove uporabe. Tako ima kandidat, ki morda ni imel priložnosti uporabiti določenih veščin, kot je TDD, vendar se kljub temu trudi, da jo uporabi in posluša nasvete za pravilno uporabo — vse možnosti, da uspešno opravi intervju.

Izobraževalni certifikati niso obvezni TW od kandidata ne zahteva obveznih certifikatov ali izobrazbe s področja računalništva. Ocenjujejo se le veščine.

To je bil prvi intervju, na katerega se mi ni bilo treba posebno pripravljati, odkar sem šel na tuje podjetja. Po vsaki fazi nisem imel občutka, da sem iztisnjen kot limona; nasprotno, bil sem vesel, da lahko uporabljam najboljše prakse, da ljudje na drugi strani zaslona to cenijo in jih vsak dan uporabljajo.

Po nekaj mesecih lahko rečem, da so se pričakovanja popolnoma izpolnila. Po čem se ThoughtWorks razlikuje od običajnega podjetja? V običajnem podjetju boste našli dobre razvijalce in prijetne ljudi, vendar je njihova koncentracija v TW izjemna.

Če se želite pridružiti ThoughtWorks, si lahko ogledate odprte zaposlitve. ovde
Prav tako priporočam, da si ogledate zanimive zaposlitve:
Vodja inženirja programske opreme: Nemačka, London, Madrid, Singapur
Starejši inženir programske opreme: Sidnej, Nemačka, Manchester, Bangkok
Inženir programske opreme: Sidnej, Barcelona, Milano
Starejši podatkovni inženir: Milano
Analitik kakovosti: Nemačka Kitajska
Infrastruktura: Nemačka, London, Čile
(Iskreno opozarjam, da je povezava referenčna, če vstopite v TW, bom prejel prijeten bonus). Izberite pisarno, ki vam ustreza, ni nujno, da se omejujete le na Evropo, saj vas bo TW vsakih 2 let z veseljem preselil v drugo državo, saj je to del politike ThoughtWorks, s tem se kultura širi in uravnava.

Ne oklevajte, da postavite vprašanja v komentarjih ali me prosite, da vas priporočim.
Če se vam tema zdi zanimiva, bom napisal o tem, kako je delati v ThoughtWorks in kako živeti v Singapurju.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster