
Prijave za u Yandexu su otvorene. Ona se odvija u pet smjerova: backend, ML, mobilna razvijanja, frontend i analitika. Na ovom blogu, te na drugih blogovima na Habré i izvan njega, možete pronaći mnogo informacija o tome kako se odvija praksa. No, mnogo toga u ovom procesu ostaje misterij za one koji ne rade u tvrtki. A ako gledate iz perspektive voditelja razvoja, postavlja se još više pitanja. Kako pravilno provesti praksu, kako maksimizirati uzajamnu korist s praktikantom, kako uspjeti upoznati ga u tri mjeseca i naučiti sve što je potrebno za nastavak rada?
Ovu smo temu pripremili u petorici. Predstavimo se: Ihnat Kolesničenko iz službe tehnologija distribuiranih računalnih sustava, Miša Levin iz službe strojne inteligencije Marketa, Denis Malih iz službe razvoja aplikacija, Sereža Berežnoj iz odjela razvoja pretraživačkih sučelja i Dima Čerkasov iz grupe razvoja antifrauda. Svaki od nas predstavlja svoje područje prakse. Svi smo voditelji, trebaju nam praktikanti, i imamo određeno iskustvo u radu s njima. Dopustite da podijelimo nešto od tog iskustva.
Razgovor prije prakse
Kandidate očekuje nekoliko tehničkih razgovora. Uspjeh na razgovoru ovisi manje o softverskim vještinama (sposobnosti učinkovite komunikacije) i više o hardverskim vještinama (znanjima iz matematike i programiranja). Međutim, voditelji ocjenjuju i jedno i drugo.
Ihnat:
Čak i ako je osoba veoma sposobna, ali potpuno nekomunikativna — ne može primijeniti sve svoje vještine. Na to, naravno, obraćamo pažnju, ali to nije razlog da nekoga ne primimo na praksu. Tijekom tri mjeseca sve se može promijeniti, a osim toga, tvoj prvi dojam može biti netočan. A ako je sve točno — trebaće toj osobi objasniti, tražiti joj druge timove. Komunikativnost zasigurno nije ključni faktor za praktikante. Ipak, profesionalne vještine su mnogo važnije.
Denis:
Sviđa mi se kada ljudi pričaju priče – u dobrom smislu. Osoba koja može ispričati kako se njen tim hrabro nosio s nekim neuspjehom je zanimljiva. Počinjem postavljati dodatna pitanja kada takva priča ispliva. No, to se rijetko dešava ako jednostavno zamolite da 'pričaju nešto zanimljivo o svojim projektima'.
Jedan kandidat je jednom izgovorio prekrasnu rečenicu koju sam čak i zapisao: 'Uspješno sam izbjegavao rješavanje dosadnih zadataka'.

Budući da je vremena za komunikaciju malo, ispitatelj svake minute sastanka nastoji dobiti korisne informacije o kandidatu. Bilo bi sjajno ako se pripravnik unaprijed prisjetio kojim bi detaljima svog iskustva (ne iz životopisa) mogao podijeliti. To bi trebao biti kratki pripovijed po pitanju.
Denis:
Obraćam pažnju ako osoba priča da je isprobala mnoge jezike, pristupe. Ljudi s širim pogledom često smišljaju elegantnija rješenja u akciji. No, to nije jednoznačna prednost. Može se dotaći mnogo toga, a zapravo ništa ozbiljno ne naučiti.
Vrijeme za priče koje opisuje Denis obično ostaje samo na završnom intervjuu. Do tada je potrebno pokazati one temeljne i praktične znanja koja će biti temelj budućeg rada. I naravno, biće potrebno pisati kod na ploči ili na papiru.
Miša:
Provjeravamo znanje teorije vjerojatnosti i matematičke statistike. Gledamo ima li osoba iskustva s metrima, s algoritmima strojnog učenja, s postavljanjem njihovih parametara, s ponovnim učenjem itd. Očekujemo da osoba može pisati kod u dovoljnoj mjeri da bude analitičar.
Denis:
Oni koji dolaze na intervju uglavnom znaju jezike: u Jekaterinburgu imamo dobru školu osnovnih jezika, dobre institucije. No, iskreno, kandidat za praksu s dobrim hardvverskim vještinama je rijetkost, barem u našem epsilon okruženju. Na primjer, Swift. U njemu je vrlo složen rad sa stringovima, a malo je ljudi koji mogu raditi s njima napamet. Takvi odmah upadaju u oči. Često na intervjuima postavljam zadatak koji se bavi obradom stringova. I za sve vrijeme bio je samo jedan čovjek koji je odmah, na papiru, mogao napisati takav Swift kod. Nakon toga, hodao sam i svima govorio kako je netko konačno uspio riješiti taj zadatak u Swifta na papiru.
Provjera algoritama na intervjuu
To je posebna tema, jer se kandidati i dalje pitaju - zašto uvijek ocjenjujemo znanje algoritama i struktura podataka? Čak i budući mobilni programeri i front-end developeri prolaze kroz ovu provjeru.
Miša:
Na intervjuu obavezno postavljamo neku algoritamsku zadaću. Kandidat treba smisliti kako je implementirati na Pythonu, poželjno bez grešaka. Treba shvatiti kako testirati svoj program i samostalno ga ispraviti.

Iskustvo u algoritmima bit će korisno iz tri razloga. Prvo, očito će biti potrebno za algoritamske zadatke - koji se događaju rijetko, ali se ipak događaju. Drugo, programer će učinkovitije rješavati zadatke koji se odnose na algoritme, iako ne zahtijevaju ulazak u same algoritme (a takvih je već prilično mnogo). Treće, ako vam algoritme nisu predavali na fakultetu, ali i dalje znate raditi s njima, to vas karakterizira kao znatiželjnu osobu i podiže vaš ugled u očima sugovornika.
Denis:
Veliki dio mobilnog razvoja je 'prebacivanje JSON-a'. No, svakih šest mjeseci događaju se slučajevi kada su algoritmi potrebni. Trenutno radim lijepe karte za Yandex.Vremensku prognozu. I trebao sam realizirati algoritam za izravnavanje, Sutherland-Hodgman algoritam i Martinezov algoritam. Da je osoba nije znala što je heš mapa ili prioritetni red, dugo bi se s tim mučila i nije jasno bi li uspjela bez tuđe pomoći.
Algoritmi su osnova razvoja. To je ono što pomaže programeru da bude programer. Bez obzira čime se bavite. Potrebni su čak i u jednostavnim projektima gdje se osnovni rad sastoji od „prebacivanja JSON-a“. Čak i ako sami ne pišete algoritme, ali neizravno koristite neke strukture podataka, bolje je razumjeti ih. Inače, imat ćete aplikacije koje rade sporo ili pogrešno.
Postoje programeri koji su akademski ušli u razvoj: upisali su fakultet, pošteno studirali pet godina i stekli zvanje. Oni poznaju algoritme, jer su ih naučili. I tada samo znanje algoritama nikako ne karakterizira općenitost osobe, treba provjeriti tu općenitost na drugi način.
Tu su i samouki, među koje se svrstavam i ja. Da, formalno imam IT obrazovanje, diplomu inženjera programera. No samouci su naučili programirati „uprkos“. Nisu imali sveučilišni program. Obično nisu upoznati s algoritmima — jer nikada nisu imali potrebu da ih prouče. I kada takva osoba razumije algoritme, to znači da je potrošila vrijeme da ih shvati. Nakon što sam završio fakultet, shvatio sam da imam bijela mjesta u dijelu fundamentalnih algoritama — stvar je u tome da je specijalnost bila primijenjena. Otišao sam i proučio online tečajeve Sveučilišta Princeton, dobro poznatog Roberta Sedgewicka. Razjasnio sam, napravio sve domaće zadaće. I kada osoba na razgovoru za posao priča sličnu priču, odmah me zanima, javlja se želja za radom s njom ili barem za nastavkom razgovora.

Ihnat:
Kada intervjuirate pripravnika, u određenom smislu očekujete čak i više nego od iskusnog programera. Riječ je o sposobnosti rješavanja algoritamskih zadataka, brzom pisanju bilo kakvog ispravnog koda. Kandidat za praksu — on je još na fakultetu. Prije samo godinu dana sve o algoritmima mu je bilo detaljno objašnjeno. Očekuje se da ih može reproducirati. Ako je osoba normalna i pažljivo je slušala predavanja, jednostavno će sve znati, izvući iz cache-a.
Koje zadatke rješava pripravnik
Obično se program prakse može dogovoriti i raspraviti na završnim razgovorima. Praksa često započinje s trening zadacima koji neće biti uključeni u proizvodnju. Štoviše, vjerojatnost dobivanja takvih zadataka nije velika. Najčešće se dodjeljuju stvarni projekti iz backloga, odnosno oni koji su prepoznati kao vrijedni pažnje, ali neprioritetni i 'odvojivi' - da implementacija ne bude ovisna o drugim komponentama. Voditelji nastoje rasporediti zadatke tako da se praktikant upozna s različitim dijelovima usluge i radi u istom okruženju s drugim članovima tima.
Ihnat:
To su izuzetno korisni zadaci. Moguće je da neće povećati iskorištenost klastera za 10%, niti uštedjeti milijun dolara tvrtki, ali će usrećiti stotine ljudi. Na primjer, imamo praktikanta koji se bavi našim klijentom za pokretanje operacija na našim klasterima. Prije pokretanja, operacija mora učitati neke podatke na klaster. To obično traje 20-40 sekundi, a prije je to prolazilo tiho: pokrenuo si to u konzoli i sjediš, gledaš u crni ekran. Praktikant je došao i u dva tjedna napravi funkciju: sada se može vidjeti kako se datoteke učitavaju i što se događa. Zadak je, s jedne strane, jednostavan za opisivati, a s druge - ima dosta toga za istražiti, koje biblioteke provjeriti. Najljepše je što si to napravio, prošao je tjedan, to je na klasterima, ljudi to već koriste. Napišeš post u internu mrežu - kažu ti hvala.

Miša:
Praktikanti pripremaju modele, prikupljaju podatke za njih, osmišljavaju metrike i provode eksperimentiranje. Postupno im dajemo više slobode i odgovornosti - provjeravamo kako se snalaze. Ako da - prelaze na sljedeću razinu. Ne pretpostavljamo da praktikant sve to zna kada dođe. Voditelj mu pomaže da se snađe, daje poveznicu na unutarnji resurs ili online tečaj.
Ako se praktikant pokaže izvanrednim - može dobiti nešto prioritetno, važno za odjel ili druge usluge.
Dima:
Naš pripravnik trenutno se bavi intenzivnim doradama anti-fraud sustava. To je sustav koji se bori s raznim oblicima zlostavljanja i prevarama na uslugama Yandex-a. Isprva smo mislili davati mu jednostavne i ne baš bitne zadatke za produkciju. Unaprijed planiramo zadatke za pripravnika, ali ovdje smo primijetili da osoba "gori", brzo i dobro rješava zadatke. Na kraju smo mu povjerili pokretanje anti-fraud sustava za nove usluge.
Osim toga, postoji mala šansa da dobije zadatak na kojem su se kolege ranije nisu usudile raditi zbog njegovog obujma.
Dima:
Postoji jedan stari sustav, a postoji i novi, još nedovršeni. Potrebno je provesti migraciju s jednog na drugi. U perspektivi je to važan projekt, iako s visokom neizvjesnošću: potrebno je puno komunicirati i čitati nejasan legacijski kod. Na zadnjem intervjuu smo iskreno rekli pripravniku da je zadatak složen. On je odgovorio da je spreman, pridružio se našem timu i uspio je. Ispostavilo se da ima osobine ne samo programera, već i menadžera. Bio je spreman sam odlaziti, pitati, pingati.
Mentorstvo nad pripravnikom
Pripravniku je potreban mentor kako bi se uronio u procese. To je osoba koja je informirana ne samo o svojim zadacima, već i o zadacima pripravnika. S mentorom je uspostavljena redovita komunikacija, uvijek se može obratiti za savjet. Mentor može biti ili vođa grupe (ako je to mala grupa), ili netko od kolega, stalnih sudionika tima.
Ihnat:
Trudim se barem svaka dva dana prići, pitati kako je s pripravnikom. Ako primijetim da je preopterećen, trudim se pomoći, pitati što je problem i zajedno s njim to razjasniti. Jasno je da to oduzima moje snage i čini rad pripravnika manje učinkovitim — i ja trošim svoje vrijeme. Ipak, to mu omogućava da se ne zaguši, postigne rezultat. I svejedno je to brže nego da sam to radio sam. Meni bi trebalo otprilike 5 sati za zadatak. Pripravnik bi ga odradio za 5 dana. I da, potrošit ću 2 sata tijekom tih 5 dana da razgovaram s pripravnikom i pomognem mu. No, barem 3 sata ću uštedjeti, i pripravniku će biti drago što mu je netko pomogao. Uglavnom, potrebno je samo redovito komunicirati, gledati što osoba radi, ne gubiti kontakt.

Serjoža:
Stalni je kontakt između pripravnika i njegovog mentora, a svakodnevno se čuje s njim nekoliko puta. Mentor pregledava kod, sudjeluje u parnom programiranju s pripravnikom i pomaže kada se jave problemi. Ovim pristupom, kombinirajući pomoć mentora i stvarne radne zadatke, obučavamo frontend programere.
Dima:
Kako bi pripravnik bio potpomognut, razgovaramo već prije zapošljavanja o tome tko će mu biti mentor. To je također velika prilika za mentora: priprema za ulogu vođe tima, provjera sposobnosti zadržavanja svojih zadataka i zadataka pripravnika u glavi. Održavamo redovite sastanke, ponekad sudjelujem i ja, kako bih bio u tijeku. No, mentor se svakodnevno povezuje s pripravnikom. U početku ulaže puno vremena, no to se isplati.
Međutim, postojanje mentora ne znači da se svi nastali problemi rješavaju preko njega.
Miša:
Kod nas je uobičajeno da ljudi koji se suočavaju s problemom pitaju susjede, kolege i brzo pronalaze pomoć. Što brže osoba raste, to češće treba otići do kolega da sazna nešto. Korisno je čak i samo znati o zadacima drugih kako bi smislili nove. Kada pripravnik sam može pregovarati, razumjeti što je važno drugoj strani i doći do rješenja u timu, znatno brže će napredovati nego onaj za kojeg sve to mora raditi vođa.
Serjoža:
Postoji dokumentacija, ali veći dio informacija je nevidljiv. Ako je upijaš na početku karijere, to je dodatna prednost, a mi možemo usmjeriti osobu na ono što treba proučiti.
Idealan pripravnik je onaj koji se pripravlja nekoliko mjeseci, postaje mlađi programer, zatim običan programer, a onda vođa tima itd. Za to je potreban arhetip učenika koji se ne boji pitati ako mu nešto nije jasno, ali istovremeno je sposoban za samostalni rad. Ako mu kažu da može pročitati o tome tu i tu, otići će, pročitati i zaista se vratiti s novim znanjem. Može griješiti, ali ne bi trebao griješiti više od jednom, maksimalno dvaput na istom mjestu. Idealan pripravnik treba se razvijati, upijati sve kao sunđer, učiti i rasti. Onaj koji sjedi, pokušava sve riješiti sam, dugo se muči, ne postavlja pitanja, teško će se uklopiti.
Kraj pripravništva
Prije početka rada potpisujemo s svakim pripravnikom ugovor na određeno vrijeme. Naravno, pripravništvo je plaćeno, formalizirano prema zakonodavstvu RF, a pripravnik dobiva iste pogodnosti kao i bilo koji drugi zaposlenik Yandexa. Nakon tri mjeseca program se završava — mnoge pripravnike tada prebacujemo u stalni radni odnos (na neodređeno).

S jedne strane, vođi tima važno je da programer ispuni svoj pripravnički minimum. Upravo to vodi pripravnika, počevši od intervjua. Međutim, to je samo početak priče. Pripravnik je za nas uvijek potencijalni kandidat za stalni radni odnos. Minimalni program za vođu tima je već na početku prepoznati takvu osobu koju nakon tri mjeseca neće biti neugodno preporučiti drugim odjelima. Maksimalni program je zadržati ga u istom timu i zaposliti ga. Pri tome uzimamo u obzir da će student drugog ili trećeg razreda — čak i ako postane pripravnik — s početkom akademske godine trebati nastaviti obrazovanje na sveučilištu.
Serjoža:
Prije svega, pripravnici su za nas kadrovski potencijal. Pokušavamo izgraditi ljude unutar Yandexa kako bi savršeno odgovarali našim zadacima. Pružamo im sve, od kulture komunikacije i suradnje u timovima do enciklopedijskih znanja o svim našim sustavima.
Ihnat:
Kada zapošljavamo pripravnika, odmah ga pokušavamo prilagoditi kako bi postao član našeg tima. A obično je jedina prepreka nedostatak slobodnih radnih mjesta. Pokušavamo zaposliti dovoljno mladih ljudi kao pripravnike. Ako netko ima pet godina iskustva u razvoju, a dolazi u Yandex i na razini je pripravnika, nažalost, to za nas znači da, iako je talentiran, čim se zapošljava u Yandex s pet godina iskustva, neće moći napredovati do senior programera. Obično se radi o brzini: spor rast u prošlosti značit će spor rast i kod nas. Da, ponekad spoznaja da osoba nije prikladna dolazi tek nakon tri mjeseca. No, to je dovoljno rijetko. U više od polovice slučajeva spremni smo zaposliti ljude. U mom iskustvu, nije bilo situacija gdje je osoba uspješno obavila praksu, ali nije uspjela proći razgovor za stalno radno mjesto.
Miša:
Svim uspješnim pripravnicima nudimo da ostanu u tvrtki. Nakon prakse, obično zaposlimo više od polovice njih na puno radno vrijeme. S ljetnom praksom je teže, jer često dolaze studenti, na primjer, treće godine, i teško im je uskladiti rad s učenjem.
Dima:
Pretpostavimo da pripravnik odlično obavlja zadatke i ima mnogo potencijala da postane dobar programer — čak i ako trenutno nema dovoljno iskustva. I pretpostavimo da nema slobodnog radnog mjesta za stalni ugovor. Tada je situacija jednostavna: moram otići svom voditelju i reći mu — ovaj genijalni čovjek mora biti po svaku cijenu zadržan, dajmo mu neku ponudu, nađimo mjesto gdje ga možemo smjestiti.
Priče o pripravnicima
Denis:
Djevojka koja se kod nas zaposlila na praksi 2017. godine dolazila je iz Permi. To je oko 400 kilometara zapadno od Jekaterinburga. Svaki tjedan je dolazila kod nas vlakom u Školu mobilnog razvoja. Dolazila je tijekom dana, učila navečer i kasno navečer se vraćala natrag. Cijenivši tu odlučnost, pozvali smo je da radi s nama, i to se pokazalo ispravnim.
Ihnat:
Prije nekoliko godina sudjelovali smo u programu razmjene stažista. Bilo je zanimljivo raditi s tim stranim mladima. No, stažisti odande nisu bolji od, recimo, onih iz ŠADe ili FKN-a. Činilo bi se da je EPFL među top 20 sveučilišta u Europi. U tom trenutku — kao ne previše iskusni intervjuator — imao sam takva očekivanja: nevjerojatno, razgovaramo s ljudima iz EPFL-a, bit će super talentirani. No, ljudi koji su osnovno obrazovanje o kodiranju stekli kod nas — uključujući i na ključnim regionalnim sveučilištima — zapravo su na istom nivou.
Ili druga priča. Sada u mom timu radi dečko, još mlad, oko 20 godina. Radi u Petersburgu, došao je na staž. On je zaista izvrsan. Kao i obično, daješ osobi zadatke, on ih rješava, a nakon mjesec dana dolazi i govori: riješio sam to, gledam, i čini se da vam je arhitektura loše postavljena. Hajde da to prepravimo. Kod će postati jednostavniji, jasniji. Naravno, pokušao sam ga odvratiti: obim posla je velik, korisnicima ne donosi korist, ali ideja zvuči apsolutno razumno. Osoba se snašla u složenom višedretvenom procesu i predložila poboljšanja — možda i neblagovremena, refaktoring radi refaktoringa. Ali kad god poželite dodatno zakomplicirati taj kod, to poboljšanje se može napraviti. Prošlo je nekoliko mjeseci, i počeli smo se baviti tim zadatkom. S radošću sam ga zaposlio. Svi mi nismo geniji. Možete doći, shvatiti nešto i ukazati nam na naše probleme. To se cijeni.
Miša:
Imamo takve idealne stažiste. Unatoč nedostatku iskustva, oni ne vide zadatak samo na tehničkoj razini, već i na globalnoj. Predlažu principijalna poboljšanja. Imaju razumijevanje kako prenijeti zadatke iz stvarnog svijeta u tehnički, a da pritom ne izgube smisao. Razmišljaju o tome koja je krajnja svrha, trebaju li se sada zaglaviti u detaljima ili mogu potpuno promijeniti pristup zadatku ili čak formulaciju zadatka. To znači da imaju potencial da budu nekoliko razina iznad. Da bi prošli taj put, samo trebaju usavršiti neke vještine i unutarnje alate. Plus, pokrenuti nekoliko uspješnih projekata.

Izvor: habr.com
