
Nepřijde vám zvláštní, že když se chystáte změnit místo zaměstnání a máte projít pohovorem, první myšlenka, která vám vytane na mysli, je „musím se připravit na pohovor“? Řešit úkoly na HackerRank, přečíst si Crack the Coding Interview, naučit se, jak funguje ArrayList a čím se liší od LinkedList. A ano, je možné, že se vás zeptají na třídění a bylo by očividně neprofesionální říci, že quick sort bude pravděpodobně nejlepší volbou.
Ale počkejte, vždyť programujete 8 hodin denně, řešíte zajímavé a nekonvenční úkoly, a na novém místě budete dělat plus mínus to samé. A přesto je nutné se na pohovor nějak dodatečně připravit, dokonce se nenaučit každodenní dovednosti, ale osvojit si něco, co jste nepotřebovali ani na současném pracovišti a pravděpodobně ani na tom dalším. Na vaše námitky, že computer science máme v krvi a že i ve spánku bychom měli napsat algoritmus pro procházení stromu, aniž bychom se vzbudili, odpovím, že pokud bych se měl ucházet o práci v cirkuse, a můj hlavní trik by byl právě toto, asi bych souhlasil. Je třeba tento dovednost otestovat.
Ale proč testovat dovednosti, které nejsou relevantní pro současnou práci? Jen proto, že je to módní? Protože to dělá Google? Nebo proto, že váš budoucí týmový vedoucí musel před pohovorem naučit všechny metody třídění a nyní si myslí, že "každý dobrý programátor by měl znát z hlavy implementaci nalezení palindromu ve stringu"?
Takže, nejste Google (c). Co si může dovolit Google, si běžné firmy nemohou dovolit. Google, analyzující data svých zaměstnanců, dospěl k závěru, že jeho konkrétní úkoly dobře zvládají inženýři s olympijskou minulostí. Navíc, při vytváření výběrového procesu si mohou dovolit podstoupit riziko, že nenajmou několik dobrých inženýrů, protože neumějí tak snadno řešit matematické úkoly. Ale pro ně to není problém, zájemců o práci v Google je hodně, pozice se obsadí.
Teď se podívejme z okna. Pokud před vaší kanceláří ještě nejsou inženýři, kteří by chtěli pracovat a nezaložili stanový tábor, a vaši vývojáři častěji hledají na stackoverflow, jakou další Spring anotaci potřebují, místo abychom se zabývali nuancemi algoritmů hodnocení, pak zřejmě nastal čas přemýšlet o tom, zda má smysl kopírovat Googla.
Dobře, pokud vás teď Google zklamal a nedal odpověď, co dělat dál? Zkontrolujte přesně to, co vývojář bude dělat v práci. Co si na vývojářích ceníte?
Stanovte si kritéria, koho chcete najmout a vytvořte testy, které přesně tyto dovednosti otestují.
ThoughtWorks
A co má ThoughtWorks společného s tímto? Právě zde jsem pro sebe našel příklad vzorového pohovoru. Kdo jsou ThoughtWorks? Pokud to shrneme, je to High-End konzultační firma s kancelářemi po celém světě, od Číny a Singapuru až po americké kontinenty, která se zabývá poradenstvím v oblasti vývoje už asi 25 let, má své vědecké oddělení vedené Martinem Fowlerem. Pokud si vyhledáte seznam 10 knih, které jsou pro Software Engineery must read, pravděpodobně 2-3 z nich budou napsány lidmi z ThoughtWorks, jako například Refactoring od Martina Fowlere a Building Microservices: Designing Fine-Grained Systems od Sama Newmana nebo Building Evolutionary Architectures.
od Patricka Kua, Rebeccy Parsons, Neala Forda.
Obchodní model firmy vychází z poskytování poměrně drahých služeb, ale zákazník platí za fenomenální kvalitu, která vzniká z odbornosti, interních standardů a samozřejmě lidí. Proto je zde naprosto nezbytné najímat správné lidi.
Kdo jsou ti správní lidé? Samozřejmě, každý má jinou představu. ThoughtWorks určila, že pro jejich obchodní model jsou pro vývojáře nejdůležitějšími kritérii:
- Schopnost párového programování. Právě schopnost, nikoli zkušenost nebo dovednost. Nikdo neočekává, že přijdou lidé, kteří praktikují párové programování už pět let. Ale být otevřený cizím názorům a umět poslouchat - to je nezbytná dovednost.
- Umění psát testy, a ideálně praktikovat TDD.
- Rozumět SOLID a OOP a umět je aplikovat.
- Prezentovat svůj názor. Konzultant musí pracovat s vývojáři zákazníka, s jinými konzultanty a není příliš užitečné, pokud člověk něco dělá dobře, ale není schopen to předat ostatním členům týmu.
Nyní je důležité posoudit právě tyto dovednosti u kandidáta. A tady bych chtěl sdílet svou zkušenost s pohovorem ve společnosti ThoughtWorks. Řeknu hned, že jsem pohovor absolvoval v Singapuru a uspěl jsem, ale proces náboru je standardizovaný a nebude se příliš lišit země od země.
Fáze 0. HR
Jak tomu často bývá, 20 minutový pohovor s HR. Na tom se nezastavím, jen řeknu, že jsem nikdy dříve nepotkal HR, který by mohl 15 minut vyprávět o vývojové kultuře ve společnosti, proč používají TDD, proč párové programování. Obvykle na této otázce HR povadnou a říkají, že jejich proces je běžný: vývojáři vyvíjejí, testeři testují, manažeři říkají.
Fáze 1. Jak jsi dobrý v OOP, TDD?
1,5 hodiny před začátkem pohovoru mi poslali úkol vytvořit simulátor Mars Rover.
Úkol Mars roverSkupina robotických roverů má být přistána NASA na vyvýšenině na Marsu. Tato vyvýšenina, která je podivně obdélníková, musí být navigována rovery tak, aby jejich palubní kamery mohly získat úplný pohled na okolní terén a poslat ho zpět na Zemi. Pozice roveru a umístění je reprezentováno kombinací souřadnic x a y a písmenem reprezentujícím jeden ze čtyř hlavních směrů. Vyvýšenina je rozdělena do mřížky pro zjednodušení navigace. Příklad pozice může být 0, 0, S, což znamená, že rover je v levém dolním rohu a směřuje na sever. K ovládání roveru posílá NASA jednoduchý řetězec písmen. Možná písmena jsou 'L', 'R' a 'M'. 'L' a 'R' způsobují, že se rover otočí o 90 stupňů vlevo nebo vpravo, aniž by se pohyboval z místa. 'M' znamená posunout se vpřed o jedno pole a udržet si stejný směr.
Předpokládejte, že čtverec přímo na sever od (x, y) je (x, y+1).
VSTUP:
První řádek vstupu jsou pravé horní souřadnice vyvýšeniny, levé dolní souřadnice jsou předpokládány jako 0,0.
Zbytek vstupu jsou informace týkající se roverů, které byly nasazeny. Každý rover má dva řádky vstupu. První řádek uvádí pozici roveru a druhý řádek je sérií pokynů, které říkají roveru, jak prozkoumat vyvýšeninu. Pozice se skládá ze dvou celých čísel a písmena oddělených mezerami, odpovídajících souřadnicím x a y a orientaci roveru.
Každý rover bude dokončen sekvenčně, což znamená, že druhý rover nezačne pohyb, dokud první nedokončí svůj pohyb.
VÝSTUP:
Výstup pro každý rover by měl být jeho konečné souřadnice a směr.
POZNÁMKY:
Jednoduše implementujte výše uvedené požadavky a prokažte, že vysavač funguje napsáním jednotkových testů pro něj.
Vytváření jakékoli formy uživatelského rozhraní je mimo rozsah.
Řešení problému s následováním přístupu TDD (Test Driven Development) bude preferováno.
V dostupném krátkém čase se více zajímáme o kvalitu než o úplnost.
*Nemohu zveřejnit úkol, který mi poslali, je to starý úkol, který byl dán před několika lety. Ale věřte mi, že zásadně všechno zůstalo stejné.
Je dobré si povšimnout kritéria hodnocení. Kolikrát jste se setkali se situací, kdy jsou pro kandidáta důležité věci, které nejsou vůbec podstatné při hodnocení, a naopak. Ne všichni myslí stejně jako vy, ale mnoho lidí může přijmout vaše hodnoty a řídit se jimi, pokud jsou jasně definovány. Z kritérií hodnocení je tedy jasné, že nejdůležitějšími dovednostmi v této fázi jsou
- TDD;
- Schopnost používat OOP a psát udržovatelný kód;
- schopnost párového programování
Takže mě varovali, abych těchto 1.5 hodiny věnoval přemýšlení o tom, jak budu úkol dělat, a ne psaní kódu. Kód budeme psát společně.
Když jsme si zavolali, kluci mi stručně řekli, kdo jsou a čím se zabývají, a navrhli, abychom začali s vývojem.
Po celou dobu pohovoru jsem neměl dojem, že jsem na pohovoru. Měl jsem pocit, že vyvíjím kód v týmu. Když jste někde uvězněni — pomáhají, radí, diskutují, dokonce si mezi sebou vyměňují názory na to, jak to udělat lépe. Na pohovoru jsem zapomněl, jak v JUnit 5 zjistit, že metoda vyhazuje Exception — navrhli, abych pokračoval v psaní testu, zatímco jeden z nich googlil, jak to udělat.
Jen pár hodin po pohovoru jsem dostal konstruktivní zpětnou vazbu — co se líbilo a co ne. V mém případě byla pochválena použití Sealed tříd jako alternativy k null objektu; za to, že před psaním kódu jsem napsal pseudokód, jak bych chtěl ovládat rover, a tím jsem získal nástin tříd, alespoň těch, které jsou zapojeny do API robota.
Fáze 2. Povězte nám
Týden před pohovorem mě požádali, abych připravil prezentaci na jakékoli téma, které mě zajímá. Formát je jednoduchý a běžný: 15 minut prezentace, 15 minut odpovědí na otázky.
Vybral jsem Clean Architecture od Uncle Boba. A znovu mě interviewovalo pár lidí. To byla moje první zkušenost s prezentací v angličtině a asi bych to v stresové situaci nezvládl. Ale znovu, ani jednou jsem neměl pocit, že jsem na pohovoru. Všechno jako obvykle — já vyprávím, oni soustředěně poslouchají. Dokonce i tradiční otázková a odpovědní seance nebyla jako pohovor, bylo jasné, že otázky nejsou kladeny proto, aby "potopily", ale z těch, které je skutečně zajímaly v mé prezentaci.
Několik hodin po pohovoru jsem dostal zpětnou vazbu — prezentace byla velmi užitečná a skutečně si ji užili při poslechu.
Krok 3. Kód ve výrobní kvalitě
Po upozornění, že to je poslední fáze technických pohovorů, mě požádali, abych doma dostal kód do stavu ready for production, po čemž se má kód poslat na revizi a naplánovat pohovory, na kterých se požadavky na úkol změní a kód bude vyžadovat úpravy. Napřed, mohu říct, že revize kódu probíhá anonymně, recenzenti nevědí ani o pozici, na kterou kandidát míří, nevidí jeho CV, dokonce ani neznají jeho jméno.
Telefonát, a znovu několik kluků na druhé straně monitoru. Všechno jako na prvním pohovoru: hlavně nezapomínejte na TDD, vyprávějte, co děláte a proč. Pokud jste TDD dříve nepraktikovali, doporučuji okamžitě s tím začít, ne proto, že je to v některých firmách nezbytné, ale proto, že to výrazně usnadňuje váš život a snižuje úroveň stresu, pokud chcete. Pamatujete, jak jste museli zoufale hledat chybu pomocí debuggery, která se reprodukovala pouze v prohlížeči, a pomocí testů jste ji reprodukovat nemohli? Teď si představte, že musíte takovou chybu chytat během pohovoru - pár šedivých vlasů máte zaručeno. Co nám tedy TDD zajišťuje? Změnili jsme kód a nečekaně jsme si uvědomili, že testy nyní selhaly, a co je špatně, nepochopíte hned napoprvé? Dobře, říkáme tazatelům „Ups“, stiskneme Ctrl-Z a začínáme kráčet malými kroky vpřed. A ano, schopnost vyvíjet s použitím TDD je dovednost, kterou je třeba v sobě formovat, schopnost zaměřit se na cíl tak, aby vaše testy byly trvale zelené, a ne červené po celý den, protože „máte velký refactoring“. Je to stejná dovednost, jako umět psát udržovatelný kód nebo výkonný kód.
Takže to, jak dobře se váš kód poddává změnám, závisí na tom, jaký design jste původně zvolili, jak je jednoduchý a jak kvalitní jsou vaše testy.
Po pohovoru jsem obdržel zpětnou vazbu během několika hodin. V této fázi jsem si uvědomil, že jsem prakticky prošel a zbývá už jen málo do „setkání s Fowlerem“.
Fáze 4. Finále. Dostatek technických otázek. Chceme vědět, kdo jsi!
Upřímně řečeno, mě tento přístup poněkud zaskočil. Jak může někdo posoudit, jaký jsem člověk po jedné hodině rozhovoru? A už vůbec jak to lze posoudit, když mluvím jazykem, který není mým mateřským, a, abych byl upřímný, mluvím poněkud špatně a bez plynulosti. Na předchozích pohovorech mi bylo snazší vyprávět o sobě než odpovídat na otázky, a za to mohl můj přízvuk. Minimálně jeden z tazatelů byl Asiat — a jejich přízvuk, řekněme, je pro evropské ucho poněkud specifický. Proto jsem se rozhodl zvolit proaktivní přístup — připravit prezentaci o sobě a na začátku pohovoru navrhnout, abych o sobě vyprávěl pomocí této prezentace. Pokud souhlasí — aspoň bude méně otázek na mě, pokud odmítnou nabídku — co jiného, tři hodiny mého života investované do prezentace — to není žádná vysoká cena. Ale co napsat do prezentace? Životopis — Narodil jsem se tam a tehdy, chodil do školy, dokončil univerzitu — to by nikoho nezajímalo.
Pokud se trochu poohlédnete po kultuře Thoughtworks, můžete najít článek od Martina Fowlera [https://martinfowler.com/bliki/ThreePillars.html], který popisuje 3 Pillars: Udržitelný byznys, Softwarová dokonalost a Sociální spravedlnost.
Předpokládejme, že Softwarovou dokonalost už zkontrolovali. Zbývá ukázat Udržitelný byznys a Sociální spravedlnost.
Na to jsem se rozhodl zaměřit především.
Na začátek jsem řekl, proč právě ThoughtWorks — ještě na univerzitě jsem četl blog Martina Fowlera, odkud pramení moje láska k Clean kódu.
Projekty lze také představit z různých úhlů. Vyvíjel jsem také software pro medicínu, který usnadňoval život pacientům, a podle pověstí dokonce zachránil jeden život. Vyvíjel jsem také software pro banky, což také nějakým způsobem usnadňuje život občanům. Zejména pokud touto bankou využívá 70 % populace země. Nejedná se o Sberbank a dokonce ani o Rusko.
Chcete se o mně dozvědět více? Dobře. Mým koníčkem je fotografování, tak či onak držím fotoaparát v rukou už asi 10 let, mám fotografie, které není ostuda ukázat. Také jsem nějakou dobu pomáhal útulku pro kočky: fotil jsem kočky, které potřebují trvalý domov. A s dobrými fotografiemi se kočku mnohem snáze umístí. Pravděpodobně jsem vyfotil kolem stovky koček 🙂.
Nakonec jsem měl vyplněno 80 % prezentace kočkami.
Hned po prezentaci mi napsal HR, že ještě nezná výsledky pohovoru, ale už je celý kancelář ohromena kočkami.
Nakonec jsem se dočkal zpětné vazby — všechny jsem uspokojil jako osobnost.
Ale HR při finálním rozhovoru takticky řekl, že Sociální spravedlnost je velmi dobrá a potřebná, ale ne všechny projekty jsou takové. A zeptal se, zda mě to neodrazuje. Každopádně jsem to s Sociální spravedlností trochu přehnal, stává se 🙂
Výsledek
A nakonec, už několik měsíců pracuji v Singapuru ve společnosti Thoughtworks, vidím, že i zde mnoho firem přebírá "nejlepší postupy pohovorů" z Google, používají papírky a Whiteboard pro kódování, přičemž znalosti nad rámec Springu, Symfony, RubyOnRails (to je nutné zdůraznit) v práci nejsou potřeba. Inženýři si berou týdenní dovolenou před pohovorem, aby se "připravili".
Ve společnosti Thoughtworks, kromě přiměřených požadavků na kandidáta, jsou na prvním místě tyto principy:
Radost z pohovoru. A to pro obě strany. Opravdu, pokud chcete získat nejlepší talenty (a kdo je nechce?), pak pohovor není trh, kde si vybírají otroky, ale prohlídka, kde se jak zaměstnavatel, tak kandidát vzájemně hodnotí. A pokud si kandidát spojuje s firmou příjemné emoce, je velmi pravděpodobné, že si vybere právě tuto společnost.
Více tazatelů k minimalizaci zaujatosti. Ve společnosti Thoughtworks je párové programování standardem de facto. A pokud lze tuto praxi aplikovat v jiných oblastech, TW se snaží to dělat. V každé fázi pohovoru se účastní 2 lidé. Tímto způsobem hodnotí každého člověka minimálně 8 lidí a TW se snaží vybírat tazatele s různým zázemím, různých oblastí (nejen technických) a pohlaví.
Nakonec bude rozhodnutí o přijetí na základě názoru alespoň 8 lidí, a nikdo nemá právo rozhodujícího hlasu.
Najímání založené na atributu Místo rozhodování na základě toho, zda se kandidátovi něco líbí nebo nelíbí, byla pro každou roli a každou fázi vypracována forma, která obsahuje hodnotící atributy. Při hodnocení se velmi doporučuje posuzovat nejen zkušenosti v konkrétní dovednosti, ale také schopnost ji aplikovat. Pokud tedy kandidát neměl možnost uplatnit žádné dovednosti, jako je TDD, ale snaží se je aplikovat a poslouchá rady k jejich správnému využití, má všechny šance na úspěch ve pohovoru.
Diplomy z vzdělání nejsou vyžadovány TW nepožaduje od kandidátů povinné certifikáty nebo vzdělání v oboru informatiky. Hodnotí se pouze dovednosti.
To bylo první pohovor, na který jsem se nemusel připravovat, když jsem prošel zahraničními společnostmi. Po každé fázi jsem se necítil vyšťavený jako citron, naopak jsem měl radost, že mohu aplikovat nejlepší praktiky, že lidé na druhé straně monitoru to oceňují a také je používají každý den.
Po uplynutí několika měsíců mohu říci, že očekávání byla zcela splněna. Čím se ThoughtWorks od běžné společnosti liší? V normální společnosti můžete najít dobré vývojáře a příjemné lidi, ale v TW je jejich koncentrace obrovská.
Pokud se chcete připojit k ThoughtWorks, otevřené pozice si můžete prohlédnout
Také doporučuji věnovat pozornost zajímavým pozicím:
Lead Software Engineer: , , ,
Senior Software Engineer: , , ,
Software Engineer: , ,
Senior Data Engineer:
Quality Analyst:
Infrastruktura: , ,
(Chci vás upřímně varovat, že odkaz je referenční, pokud projdete do TW, dostanu příjemný bonus). Vyberte si kancelář podle svého vkusu, nemusíte se omezovat pouze na Evropu, koneckonců, každé 2 roky bude TW šťastné, že vás přemístí do jiné země, protože je to součást politiky ThoughtWorks, tímto způsobem se kultura šíří a vyrovnává.
Neváhejte se ptát na otázky v komentářích nebo mě požádat, abych vás doporučil.
Pokud vás téma zaujalo, napíšu o tom, jak se pracuje v ThoughtWorks a jak se žije v Singapuru.
Zdroj: habr.com
