
Nábor na v Yandexu pokračuje. Probíhá v pěti směrech: backend, ML, mobilní vývoj, frontend a analytika. V tomto blogu, v dalších blozích na Habr a mimo něj lze najít spoustu informací o tom, jak stáž probíhá. Ale mnoho toho zůstává záhadou pro ty, kdo ve firmě nepracují. A pokud se podíváte na to z pohledu vedoucích vývoje, vzniká ještě více otázek. Jak správně vést stáž, jak maximalizovat vzájemnou užitečnost se stážistou, jak stihnout poznat ho za tři měsíce a naučit ho vše, co je potřebné pro pokračování práce?
Tento článek jsme připravili v pěti. Představíme se: Ihnat Kolesničenkov ze služby technologií distribuovaných výpočtů, Miša Levin ze služby strojového učení Marketa, Denis Malých ze služby vývoje aplikací, Sergej Berežnoj z oddělení vývoje vyhledávacích rozhraní a Dima Čerkasov ze skupiny vývoje antifraud. Každý z nás zastupuje svůj směr stáže. Jsme všichni vedoucí, potřebujeme stážisty a máme určité zkušenosti s nimi. Pojďme se podělit o něco z této zkušenosti.
Pohovor před stážou
Kandidáti čekají několik technických pohovorů. Úspěch na pohovoru závisí méně na soft skills (schopnosti efektivně komunikovat) a více na hard skills (dovednostech v matematice a programování). Nicméně vedoucí hodnotí obojí.
Ihnat:
I když je člověk skvělý, ale naprosto nekontaktibilní — nebude moci všechny své dovednosti využít. Na to se samozřejmě díváme, ale to není důvod, proč by někoho neměli vzít na stáž. Během tří měsíců se může vše změnit, a navíc první dojem může být mylný. A pokud je vše správně — bude třeba člověku vysvětlit a najít mu jiné týmy. Pro stážisty není komunikativnost rozhodně klíčovým faktorem. Profese dovednosti jsou přece daleko důležitější.
Denis:
Mám rád lidi, kteří vyprávějí příběhy – v tom dobrém smyslu. Člověk, který dokáže popsat, jak hrdinsky spolu se svým týmem zvládli nějakou nepříjemnost, je zajímavý. Začínám klást další otázky, když takový příběh vyvstane. Ale to se zřídka stává, pokud jen požádáte, aby "vyprávěl něco zajímavého o svých projektech."
Jeden uchazeč jednou pronesl skvělou větu, kterou jsem si dokonce zapsal: "Úspěšně se vyhýbal řešení nudných úkolů."

Protože je málo času na komunikaci, snaží se tazatel každou minutu setkání získat užitečné informace o uchazeči. Je skvělé, pokud si stážista předem promyslel, jaké detaily ze svého zkušenostního pozadí (ne z životopisu) by mohl sdílet. Mělo by to být krátké vyprávění přesně k věci.
Denis:
Všímám si, když někdo říká, že vyzkoušel mnoho jazyků a přístupů. Lidé s širším obzorem vymýšlejí elegantnější řešení za chodu. Ale to je nejednoznačné plus. Můžete se naučit jen povrchně, ale nic se pořádně nenaučit.
Na příběhy, které popisuje Denis, obvykle zbývá čas jen na závěrečném pohovoru. Do té doby je nutné prokázat ty základní a praktické znalosti, které budou základem budoucí práce. A samozřejmě bude potřeba psát kód na tabuli nebo na kus papíru.
Miša:
Kontrolujeme znalosti teorie pravděpodobnosti a matematické statistiky. Sledujeme, zda má člověk zkušenosti s metrikami, s algoritmy strojového učení, s nastavováním jejich parametrů, s přeučováním atd. Očekáváme, že člověk bude schopen psát kód v dostatečné míře, aby mohl být analytikem.
Denis:
Ti, kteří přicházejí na pohovor, obvykle znají programovací jazyky: máme v Jekatěrinburgu dobrou školu hlavních jazyků a dobré instituce. Ale abych byl upřímný, kandidát na stáž s kvalitními hard skills je vzácný případ, alespoň v našem okrese. Například Swift. V něm je velmi složitá práce se řetězci a lidí, kteří s nimi mohou pracovat z hlavy, je málo. Takoví lidé okamžitě upoutají pozornost. Na pohovorech často dávám úkol, který souvisí právě s manipulací s řetězci. A za celou dobu byl pouze jeden člověk, který dokázal napsat takový Swift kód na papír. Po tom jsem chodil a všem říkal, že někdo konečně dokázal tuto úlohu na Swift vyřešit na papíře.
Kontrola algoritmů na pohovoru
To je samostatné téma, protože kandidáti i nadále mají otázku — proč vždy hodnotíme znalosti algoritmů a datových struktur? Dokonce i budoucí mobilní vývojáři a frontendisté procházejí takovou prověrkou.
Miša:
Na pohovoru rozhodně dáváme nějakou algoritmickou úlohu. Kandidát musí vymyslet, jak to realizovat v Pythonu, ideálně bez chyb. Je třeba pochopit, jak program testovat a opravit.

Zkušenosti s algoritmy se budou hodit hned z několika důvodů. Za prvé, budou zjevně vyžadovány v algoritmických úlohách — ty sice nejsou časté, ale stále se vyskytují. Za druhé, vývojář bude schopen efektivněji řešit úkoly vztahující se k algoritmům, i když nevyžadují ponořit se do samotných algoritmů (takových je už poměrně dost). Za třetí, pokud vám algoritmy nebyly vyučovány na vysoké škole, a přesto zvládáte s nimi pracovat, ukazuje to, že jste zvědavý člověk a zvyšuje to váš status v očích tazatele.
Denis:
Většina mobilního vývoje je o "převádění JSON". Ale jednou za půl roku nastanou případy, kdy algoritmy jsou potřeba. Teď aktuálně navrhuji krásné mapy pro Yandex.Počasí. A za týden jsem musel realizovat algoritmus pro vyhlazení, algoritmus Sutherland-Hodgman a algoritmus Martinez. Kdyby člověk nevěděl, co je hash mapa nebo fronta s prioritou, trávil by s tím dlouho a není jasné, jestli by to zvládl bez vnější pomoci.
Algoritmy jsou základem vývoje. To je to, co pomáhá vývojáři být vývojářem. Nezáleží na tom, čemu se věnujete. Jsou potřebné i v jednoduchých projektech, kde hlavní práce spočívá v „přesouvání JSON“. I když algoritmy sami nepíšete, ale implicitně používáte nějaké datové struktury, je lepší je chápat. Jinak budete mít aplikace, které fungují pomalu nebo nesprávně.
Existují programátoři, kteří přišli do vývoje akademicky: zapsali se na univerzitu, poctivě studovali pět let a získali specializaci. Zná algoritmy, protože je naučili. A tehdy samo znalost algoritmů nijak necharakterizuje obzory člověka, tyto obzory je třeba ověřit jiným způsobem.
A jsou tu samouci, ke kterým se také řadím. Ano, formálně mám IT vzdělání, diplom inženýra-programátora. Ale samouci se naučili programovat „navzdory“. Neměli univerzitní program. Obvykle nejsou s algoritmy obeznámeni, protože se nikdy nesetkali s nutností je studovat. A když takový člověk rozumí algoritmům, znamená to, že strávil čas a prozkoumal je. Po dokončení univerzity jsem si uvědomil, že mám bílé skvrny v oblasti základních algoritmů - problém byl v tom, že specializace byla aplikovaná. Šel jsem a studoval online kurzy Princeton University, dobře známého Roberta Sedgewicka. Porozuměl jsem tomu, udělal všechny domácí úkoly. A když někdo na pohovoru vypráví podobný příběh, okamžitě mě to zaujme, objeví se chuť s ním pracovat nebo alespoň pokračovat v rozhovoru.

Ihnat:
Když pohovoru s praktikantem, v určitém smyslu očekáváte dokonce více, než od zkušeného vývojáře. Jde o schopnost řešit algoritmické úlohy, rychle napsat jakýkoli správný kód. Kandidát na stáž - přece ještě je na univerzitě. Doslova před rokem mu všechno o algoritmech vysvětlovali podrobně. Očekává se, že je schopen je reprodukovat. Pokud je člověk normální a pozorně poslouchal přednášky, prostě všechno ví, vytahuje to z paměti.
Jaké úlohy řeší praktikant
Program stáže obvykle můžete naplánovat a prodiskutovat během závěrečných pohovorů. Na začátku práce může stážista dostat tréninkové úkoly, jejichž výsledky nebudou použity v produkci. Navíc je pravděpodobnost, že dostane takové úkoly, nízká. Častěji se dávají bojové projekty z backlogu, tedy ty, které jsou považovány za stojící za pozornost, ale nejsou prioritní a dají se «oddělit» – aby jejich realizace nezávisela na ostatních komponentech. Vedoucí se snaží je distribuovat tak, aby si stážista vyzkoušel různé části služby a pracoval ve stejném prostředí s ostatními členy týmu.
Ihnat:
Tyto úkoly jsou nesmírně užitečné. Možná nezvýší využití klastru o 10 %, neušetří společnosti milion dolarů, ale udělají šťastnými stovky lidí. Například nyní máme stážistu, který se zabývá naším klientem pro spuštění operací na našich klastrech. Před spuštěním musí operace načíst určité údaje do klastru. Obvykle to trvá 20–40 sekund a dříve to probíhalo tiše: spustil jsi to v konzoli a seděl, koukal na černou obrazovku. Stážista přišel a během dvou týdnů vytvořil funkci: nyní je vidět, jak se soubory nahrávají a co se děje. Úkol, z jedné strany, není složitý na popis, ale z druhé – je co prozkoumat, jaké knihovny se podívat. Nejlepší na tom je, že jsi to udělal, uplynul týden, a to už je na klastrech, lidé to používají. Napíšeš příspěvek do interní sítě – a ti děkují.

Miša:
Stážisté připravují modely, shromažďují pro ně data, vymýšlejí metriky a provádějí experimenty. Postupně mu jednoduše začneme dávat více svobody a odpovědnosti – kontrolujeme, zda si poradí. Pokud ano – postupuje na další úroveň. Nepředpokládáme, že když stážista přijde, umí to vše. Vedoucí mu pomáhá se zorientovat, dává mu odkaz na interní zdroje nebo online kurz.
Pokud se stážista ukáže v dobrém světle – může dostat něco prioritního, důležitého pro oddělení nebo jiné služby.
Dima:
Náš stážista nyní provádí hardcore úpravy antispamu. Je to systém, který bojuje s různými formami zneužívání a podvodů na službách Yandexu. Zpočátku jsme uvažovali, že mu dáme úkoly, které nejsou příliš složité a ne tak důležité pro produkci. Předem se snažíme promyslet úkoly pro stážistu, ale zde jsme viděli, že osoba "hoří", rychle a dobře řeší úkoly. Nakonec jsme mu začali zadávat spuštění antispamu pro nové služby.
Kromě toho existuje malá šance, že dostane úkol, který se kolegové dříve nepokoušeli splnit kvůli jeho objemu.
Dima:
Existuje jeden starý systém a je zde nový, který ještě není hotový. Je potřeba provést přechod z jednoho na druhý. Z pohledu do budoucna je to důležitý projekt, i když s vysokou mírou nejistoty: je potřeba hodně komunikovat, číst nejasný legacy kód. Při finálním pohovoru jsme stážistovi upřímně řekli, že úkol je obtížný. Odpověděl, že je připraven, přišel k nám do týmu a všechno se mu podařilo. Ukázalo se, že má vlastnosti nejen vývojáře, ale také manažera. Byl ochoten sám chodit, ptát se, pingovat.
Mentorství nad stážistou
Stážistovi je pro pochopení procesů potřeba mentor. Je to osoba, která má přehled nejen o svých úkolech, ale i o úkolech stážisty. S mentorem je zajištěna pravidelná komunikace, na kterou se vždy může obrátit, když potřebuje radu. Mentorem může být buď vedoucí skupiny (pokud se jedná o malou skupinu), nebo někdo z kolegů, stálých členů týmu.
Ihnat:
Snažím se alespoň každý druhý den přistoupit a zeptat se, jak se stážistovi daří. Pokud vidím, že se zabývá něčím složitým, snažím se mu pomoci, zeptat se, v čem je problém, a společně ho rozluštit. Je jasné, že to odčerpává mé síly a činí práci stážisty méně efektivní celkově — i já trávím své čas. Ale umožňuje mu to, aby se v ničem nezaseknul a dosáhl výsledku. A stále je to rychlejší, než kdybych to dělal sám. Sám bych potřeboval na úkol přibližně 5 hodin. Stážista to udělá za 5 dní. A ano, během těchto 5 dní strávím 2 hodiny tím, že si s ním promluvím a pomohu mu. Ale alespoň 3 hodiny ušetřím, a stážistovi bude příjemné, že mu někdo poradil, pomohl. Celkově je důležité jen úzce komunikovat, sledovat, co člověk dělá, a neztrácet kontakt.

Serjoža:
Stážista je neustále v kontaktu se svým mentorem a několikrát denně si spolu povídají. Mentor provádí revizi kódu, programuje ve dvojici se stážistou a pomáhá, když narazí na nějaké problémy. Touto kombinací pomoci mentora a skutečných úkolů školíme frontendové vývojáře.
Dima:
Aby se stážista necítil opuštěný, diskutujeme již před náborem, kdo ho bude mentorovat. To je také velká příležitost pro samotného mentora: příprava na roli týmového lídra, ověřování schopnosti udržet si v hlavě jak své úkoly, tak úkoly stážisty. Pořádáme pravidelné schůzky, kterých se občas účastním i já, abych měl přehled. Ale stážista komunikuje především se svým mentorem. Zprvu se mentorovi věnuje spoustu času, ale vyplatí se to.
Mít mentora však neznamená, že všechny vzniklé otázky se řeší pouze přes něj.
Miša:
U nás je zvykem, že lidé, kteří se setkají s problémem, se ptají na rady kolegů a rychle najdou pomoc. Čím rychleji člověk roste, tím častěji potřebuje jít k kolegům a něco se dozvědět. Je užitečné i jen se dozvědět o úkolech ostatních, abychom vymysleli nové úkoly. Když je stážista schopen sám se dohodnout, pochopit, co je pro druhou stranu důležité, a dosáhnout výsledku v týmu, roste mnohem rychleji než ten, za kterého všechno musí dělat vedoucí.
Serjoža:
Existuje dokumentace, ale většina informací je rozptýlena ve vzduchu. Pokud ji vstřebáváte na začátku kariéry, je to další výhoda, a my můžeme zaměřit člověka na to, co je potřeba se naučit.
Ideální stážista je ten, kdo se několik měsíců školí, stává se junior developerem, pak prostě developerem, poté vedoucím skupiny atd. K tomu je potřeba archetyp učně, který se nebojí zeptat, když mu něco není jasné, ale je zároveň schopen pracovat samostatně. Když mu řeknou, že si o tom může přečíst tam a tam, půjde, přečte si to a skutečně se vrátí s novými znalostmi. Může udělat chybu, ale neměl by chybovat více než jednou, maximálně dvakrát na stejném místě. Ideální stážista by měl růst, vstřebávat všechno jako houba, učit se a zlepšovat se. Ten, kdo sedí, snaží se na všechno přijít sám, dlouho se hrabe, neptá se na žádné otázky, jen těžko se uchytí.
Konec stáže
Před zahájením práce podepisujeme s každým stážistou smlouvu na dobu určitou. Samozřejmě, že stáž je placená, je zajištěna podle ruského pracovního práva a stážista má stejné výhody jako každý jiný zaměstnanec Yandexu. Po třech měsících program končí — mnohé stážisty poté přetahujeme do stavu (na smlouvu na dobu neurčitou).

Na jedné straně je pro vedoucího důležité, aby developer splnil svůj minimální stážistický úkol. Právě k tomu vede stážistu, počínaje pohovorem. To je však teprve začátek příběhu. Stážista je pro nás vždy potenciálním kandidátem do stavu. Minimální úkol pro vedoucího je již na začátku rozpoznat takovou osobu, kterou po třech měsících nebude trapné doporučit do jiných oddělení. Maximálním cílem je udržet jej v tomtéž týmu, vzít ho do stavu. Při tom bereme v úvahu, že student druhého nebo třetího ročníku — i když se stal stážistou — se s nastupujícím školním rokem musí vrátit k výuce na vysoké škole.
Serjoža:
Stážisti jsou pro nás především potenciál v oblasti lidských zdrojů. Snažíme se pěstovat lidi uvnitř Yandexu tak, aby ideálně vyhovovali našim úkolům. Dáváme jim vše, počínaje kulturou komunikace a spolupráce v týmech až po encyklopedické znalosti o všech našich systémech.
Ihnat:
Když bereme stážistu, hned z něj odhadujeme, zda se bude hodit do našeho týmu. A obvykle je jedinou překážkou nedostatek volné pozice. Snažíme se brát dostatečně mladé lidi. Pokud má člověk pět let zkušeností s vývojem, přijde do Yandexu a je na úrovni stážisty, bohužel to pro nás znamená, že — ačkoli je skvělý, když se uchází o práci v Yandexu s pěti lety zkušeností — už se nevypracuje na seniorního vývojáře. Obvykle to souvisí s rychlostí: pomalý růst v minulosti bude znamenat pomalý růst i u nás. Ano, někdy pochopení, že člověk nezvládá, přijde až po třech měsících. Ale to je dost vzácné. V více než polovině případů jsme ochotni brát lidi do stálého pracovního poměru. Za svou paměť si nepamatuji, že by někdo úspěšně absolvoval stáž, ale nedokázal projít pohovorem na stálou pozici.
Miša:
Všem úspěšným stážistům nabízíme možnost zůstat ve firmě. Po stáži obvykle přijímáme na plný úvazek více než polovinu z nich. S letní stážemi je to složitější, protože k nám často přicházejí studenti, například ze třetího ročníku, a ti mají problém skloubit práci se studiem.
Dima:
Představme si, že stážista si skvěle poradí se svými úkoly a má spoustu perspektiv vypracovat se na dobrého vývojáře — ačkoli teď nemá dostatečné zkušenosti. A představme si, že na dobu neurčitou není žádná volná pozice. Pak je to jednoduché: musím jít za svým nadřízeným a říct mu — tenhle člověk je skvělý, musíme udělat vše pro to, abychom ho udrželi, pojďme mu něco navrhnout, najděme mu vhodné umístění.
Příběhy o stážistech
Denis:
Dívka, která k nám nastoupila na stáž v roce 2017, byla z Permu. To je asi 400 kilometrů na západ od Jekatěrinburgu. A každou týden k nám jezdila vlakem z Permu do Školy mobilního vývoje. Přijela přes den, večer se učila a pozdě večer odjížděla zpět. Když jsme si této odhodlanosti všimli, pozvali jsme ji, aby pracovala, a to se vyplatilo.
Ihnat:
Před několika lety jsme se zúčastnili programu výměny stážistů. Práce s cizinci byla zajímavá. Ale stážisté odtamtud nejsou lepší než například z ŠADe nebo z FKNu. Mohlo se zdát, že EPFL je v top 20 evropských vysokých škol. V té době — jakožto málo zkušený tazatel — jsem měl takové očekávání: neuvěřitelné, pohovory vedeme s lidmi z EPFL, musí být skvělí. Ale lidé, kteří získali základní vzdělání o programování u nás — včetně v klíčových regionálních školách — se ukazují jako dostatečně kvalitní.
Nebo jiný příběh. Momentálně mám ve svém týmu kluka, je mu kolem 20 let. Pracuje v Petrohradě, přijel na stáž. Je opravdu skvělý. Jako obvykle mu dáváš úkoly, on je řeší, a po měsíci přijde a říká: vyřešil jsem to, koukám, a zdá se, že vaše architektura je špatně postavená. Pojďme to předělat. Kód bude jednodušší a srozumitelnější. Samozřejmě jsem ho od toho odradil: objem práce je velký, pro uživatele z toho nic nemáme, ale myšlenka zní naprosto rozumně. Člověk se vyznal ve složitém vícethreadovém procesu a navrhl zlepšení — možná poněkud předčasná, refaktoring jen pro refaktoring. Ale jakmile se tento kód bude chtít zkomplikovat, můžeme ten refaktoring přece jen provést. Nakonec uplynuly pár měsíců a zabývali jsme se tím úkolem. S radostí jsem ho vzal do týmu. My všichni nejsme géniové. Můžeš přijít, vyznat se v něčem a ukázat nám na naše problémy. To se cení.
Miša:
Máme takové ideální stážisty. I přes nedostatek zkušeností vidí úkoly nejen na technické, ale i na globální úrovni. Nabízejí zásadní zlepšení. Mají pochopení pro to, jak přetvořit úkoly ze skutečného světa na technické, aniž by ztratili smysl. Přemýšlí o konečném cíli, zda se teď vyplatí zabývat se detaily nebo je možné zcela změnit přístup k úkolu nebo dokonce formulaci zadání. To znamená, že mají potenciál dostat se na několik úrovní výše. Aby tuto cestu ušli, stačí, aby si vylepšili nějaké dovednosti a vnitřní nástroje. Plus spustili několik úspěšných projektů.

Zdroj: habr.com
