
Najava za v Yandeksu še poteka. Obsega pet področij: backend, ML, mobilni razvoj, frontend in analitika. Na tem blogu, pa tudi v drugih blogih na Habré in zunaj njega, lahko najdete mnogo vpogledov v to, kako poteka praksa. A veliko tega procesa ostaja uganka za tiste, ki ne delajo v podjetju. Če pa pogledamo z vidika vodij razvoja, se pojavijo še dodatna vprašanja. Kako pravilno izvesti prakso, kako maksimizirati medsebojno korist s praktikantom, kako uspeti spoznati osebo v treh mesecih in jo naučiti vsega, kar je potrebno za nadaljnje delo?
Tole besedilo smo pripravili pet. Predstavimo se: Ignat Kolesničenko iz službe tehnologij razporejenih izračunov, Miša Levin iz službe strojne inteligence tržnice, Denis Malyh iz službe razvoja aplikacij, Serjoža Berežnoj iz oddelka za razvoj iskalnih vmesnikov in Dima Čerkasov iz skupine za razvoj protifraud. Vsak od nas zastopa svoje področje prakse. Vsi smo vodje, potrebujemo praktikante in imamo določene izkušnje z njimi. Povedali bomo nekaj iz teh izkušenj.
Usposobitev pred prakso
Kandidate čaka več tehničnih intervjujev. Uspeh na razgovoru je manj odvisen od mehkih veščin (sposobnosti učinkovitega komuniciranja) in bolj od trdnih veščin (znanje matematičnih in programskih veščin). Vendar vodje ocenjujejo oboje.
Ignat:
Čeprav je oseba lahko zelo sposobna, a popolnoma nekomunikativna, ne bo mogla uporabiti vseh svojih veščin. Na to se seveda osredotočamo, vendar to ni razlog, da koga ne vzamemo na prakso. V treh mesecih se lahko vse spremeni, poleg tega je lahko tvoj prvi vtis napačen. Če je vse res, je treba osebi razložiti in poiskati druge ekipe zanj. Za praktikante komunikativnost zagotovo ni ključni dejavnik. Profesionalne veščine so vendarle veliko pomembnejše.
Denis:
Všeč so mi ljudje, ki pripovedujejo zgodbe — v dobrem pomenu besede. Oseba, ki lahko pove, kako so se s svojo ekipo junaku spopadli s kakšno napako, je zanimiva. Začnem postavljati dodatna vprašanja, ko se pojavi takšna zgodba. Ampak to se redko zgodi, če samo vprašam: 'Povej mi kaj zanimivega o svojih projektih.'
En kandidat je nekoč izrekel čudovito misel, ki sem si jo celo zapisoval: 'Uspešno sem se izogibal reševanju dolgočasnih nalog.'

Ker je časa za komunikacijo malo, skuša zaposlovalec vsako minuto srečanja pridobiti koristne informacije o kandidatu. Super je, če se pripravnik vnaprej zamisli o tem, katere podrobnosti iz svojega izkustva (ne iz življenjepisa) bi lahko delil. To mora biti kratek govor strogo po vsebini.
Denis:
Pozoren sem, če oseba pove, da je preizkusila veliko jezikov in pristopov. Ljudje s širšim obzorjem v akciji razvijejo bolj eleganten rešitvi. Vendar to ni vedno pozitivno. Lahko se dotaknejo površine, na resno pa se ničesar ne naučijo.
Čas za zgodbe, ki jih opisuje Denis, običajno ostane le za končno razgovor. Do takrat je potrebno pokazati tiste temeljne in praktične sposobnosti, ki bodo osnova prihodnjega dela. In seveda, potrebno bo pisati kodo na tabli ali na papirju.
Miša:
Preverjamo znanje teorije verjetnosti in matematične statistike. Glejmo, ali ima oseba izkušnje z metričnimi podatki, algoritmi strojnega učenja, nastavitvijo njihovih parametrov, s preučevanjem in tako naprej. Pričakujemo, da oseba lahko napiše kodo v zadostni meri, da postane analitik.
Denis:
Tisti, ki pridejo na razgovor, večinoma poznajo jezike: v Jekatеринburgu imamo dobro šolo osnovnih jezikov, dobre institute. A iskreno, kandidat za prakso z dobrimi hard skills — redek pojav, vsaj v naši epsilonski soseščini. Tu je na primer Swift. Pri njem je delo s stringi zelo zahtevno, ljudi, ki lahko na hitro delajo z njimi, je malo. Taki takoj pritegnejo pozornost. Pogosto v razgovorih dam nalogo, ki je povezana z obdelavo stringov. In v vsem tem času je bil samo en človek, ki je takoj, na papirju, znal napisati tak Swift kodo. Po tem sem hodil okoli in vsem pripovedoval, da je nekdo končno uspel rešiti to nalogo v Swifta na papirju.
Preverjanje algoritmov na razgovoru
To je ločena tema, saj se pri kandidatih še vedno postavlja vprašanje – zakaj vedno ocenjujemo znanje algoritmov in podatkovnih struktur? Tudi bodoči mobilni razvijalci in frontend razvijalci gredo skozi to preverjanje.
Miša:
Na razgovoru obvezno damo kakšno algoritmično nalogo. Kandidat mora pomisliti, kako jo lahko implementira v Python, najbolje brez napak. Treba je razumeti, kako preverjati svoj program in ga samostojno popraviti.

Izkušnje z algoritmi bodo koristne po treh razlogih. Prvič, očitno bodo potrebne pri algoritmičnih nalogah — ki jih je redko, a se vseeno pojavijo. Drugič, razvijalec bo lahko učinkoviteje reševal naloge, povezane z algoritmi, tudi če ne zahtevajo poseganja v same algoritme (takih je že kar veliko). Tretjič, če vam algoritmov niso poučevali na fakulteti, a vseeno znate delati z njimi, to kaže, da ste radovedna oseba in dvigne vaš ugled v očeh sogovornika.
Denis:
Večina mobilne razvojne naloge je 'prelaganje JSON-a'. Ampak enkrat na pol leta se zgodijo primeri, ko so algoritmi potrebni. Zdaj risam lepe karte za Yandex.Vreme. In v enem tednu sem moral implementirati algoritem za gladjenje, algoritem Sutherland-Hodgman in algoritem Martinez. Če nekdo ne bi vedel, kaj je hash mapa ali prioritetna vrsta, bi se s tem ukvarjal dolgo in ni jasno, ali bi lahko to rešili brez tuje pomoči.
Algoritmi so osnova razvoja. To je tisto, kar pomaga razvijalcu, da postane razvijalec. Nič ni pomembno, s čim se ukvarjate. Potrebni so tudi pri enostavnih projektih, kjer je glavna naloga le "premikanje JSON". Tudi če ne pišete algoritmov sami, ampak nevede uporabljate kakšne podatkovne strukture, je bolje, da jih razumete. V nasprotnem primeru boste imeli aplikacije, ki delujejo počasi ali napačno.
Obstajajo programerji, ki so prišli v razvoj akademsko: vpisali so se na univerzo, pošteno študirali pet let in pridobili poklic. Poznajo algoritme, ker so jih naučili. In ta sama znanja o algoritmih ne kažejo na obzorje posameznika, zato je treba to obzorje preveriti na drugačen način.
Obstajajo pa tudi avtošolci, v katere prištevam tudi sebe. Da, formalno imam izobrazbo s področja IT, diplomo inženirja-programerja. A avtošolci so se naučili programirati "kljub temu". Niso imeli univerzitetnega programa. Običajno niso seznanjeni z algoritmi, saj se nikoli niso srečali z potrebo po njihovem učenju. In ko tak človek razume algoritme, to pomeni, da je preživel čas in se v njih poglobil. Po končanju univerze sem spoznal, da imam bele lise v znanju temeljenih algoritmov — težava je bila v tem, da je bila specialnost aplikativna. Odšel sem in študiral spletne tečaje Univerze Princeton, znanega Roberta Sedgewicka. Razumel sem, naredil vse naloge. In ko na razgovoru za službo nekdo pripoveduje podobno zgodbo, me to takoj zanima, pojavi se želja, da bi delal z njim ali vsaj nadaljeval pogovor.

Ignat:
Ko skušaš zaposliti pripravnika, na določen način pričakuješ celo več, kot od izkušenega razvijalca. Gre za sposobnost reševanja algoritmičnih nalog, hitro pisanje vsaj nekega pravilnega kode. Kandidat za prakso — še vedno je na univerzi. Še pred enim letom so mu o algoritmih podrobno pripovedovali. Pričakuje se, da jih lahko reproducira. Če je človek razumen in je pozorno poslušal predavanja, bo preprosto vse vedel, segal bo po znanju.
Katere naloge rešuje pripravnik
Običajno se program prakse lahko začrta in razpravlja na končnih razgovorih. Praksa se na začetku dela lahko srečuje s trening nalogami, katerih rezultati ne bodo vključeni v produkcijo. Poleg tega je verjetnost, da bi dobili takšne naloge, majhna. Pogosteje se dodelijo operativni projekti iz bazo nalog, torej tisti, ki so priznani kot vredni pozornosti, vendar niso prednostni in "ločljivi" — tako da njihova izvedba ne vpliva na druge komponente. Vodje poskušajo razporejati naloge tako, da se praksa seznani z različnimi deli storitve in dela v istem okolju kot drugi člani ekipe.
Ignat:
To so izjemno koristne naloge. Morda ne bodo povečale izrabe gruč na 10%, ne bodo prihranile milijon dolarjev podjetju, a bodo osrečili na stotine ljudi. Na primer, imamo trenutno prakso, ki se ukvarja z našim klientom pri zagonu operacij na naših grozdih. Pred zagonom mora operacija naložiti določene podatke na grozd. To običajno traja 20–40 sekund in prej se je to dogajalo tiho: zagnali smo jo v konzoli in smo se usedli, gledali v črn ekran. Praktikant je prišel in v dveh tednih razvil funkcijo: zdaj je videti, kako se datoteke nalagajo in kaj se dogaja. Naloga je s ene strani enostavna za opis, na drugi strani pa je dovolj raziskovanja in gledanja, katere knjižnice preučiti. Najlepše je, da si to naredil, teden je minil, in to je že na grozdih, ljudje to že uporabljajo. Napišeš objavo v notranjo mrežo — in ti rečejo hvala.

Miša:
Praktikanti pripravljajo modele, zbirajo podatke zanje, izumljajo metrike in izvajajo eksperimente. Počasi mu preprosto začnemo dajati več svobode in odgovornosti — preverjamo, ali se zmore. Če da — preide na naslednjo raven. Ne domnevamo, da ko praktikant pride, vse to že zna. Vodja mu pomaga, da se znajde, mu da povezavo do notranjega vira ali spletnega tečaja.
Če praktikant pokaže odlične rezultate — mu lahko dodelijo nekaj prednostnega, pomembnega za oddelek ali druge storitve.
Dima:
Naš praktikant trenutno dela na kompleksnih nadgradnjah proti prevaram. To je sistem, ki se bori z različnimi zlorabami in goljufijami na storitvah Yandexa. Sprva smo razmišljali o dodelitvi nalog, ki niso bile preveč zapletene in pomembne za proizvodnjo. Vnaprej se trudimo razmisliti o nalogah praktikanata, toda videli smo, da oseba 'žari', hitro in dobro rešuje naloge. Na koncu smo mu zaupali zagon anti-prevar za nove storitve.
Poleg tega obstaja majhna možnost, da pridobi nalogo, ki se je prej kolegi niso lotili zaradi njene obsežnosti.
Dima:
Obstaja ena stara sistem, druga pa nova, ki še ni končana. Potrebno bo izvesti prenos z enega na drugega. V prihodnosti je to pomemben projekt, kljub visoki negotovosti: potrebno je veliko komunicirati in brati zapleteno legacijsko kodo. Na končnem razgovoru smo pošteno povedali praktikantu, da je naloga zahtevna. Odgovoril je, da je pripravljen, prišel je k nam v ekipo in mu je vse uspelo. Izkazalo se je, da ima lastnosti ne le razvijalca, temveč tudi vodje. Bil je pripravljen sam raziskovati, spraševati in kontakti.
Mentorstvo nad praktikantom
Praktikantu za potapljanje v procese potrebujemo mentorja. To je oseba, ki je seznanjena ne le s svojimi nalogami, temveč tudi z nalogami praktikanta. Z mentorjem imamo vzpostavljeno redno komunikacijo, nanj se lahko vedno obrneš po nasvet. Mentor je lahko bodisi vodja skupine (če gre za majhno skupino) bodisi nekdo iz kolegov, stalnih članov ekipe.
Ignat:
Trudim se vsaj vsak drugi dan pristopiti, vprašati, kako se ima praktikant. Če opazim, da je zakopan, se trudim, da mu pomagam, vprašam, v čem je težava, in skupaj odkrijemo rešitev. Jasno je, da to vzame moje moči in dela delo praktikanta manj učinkovito kot celota — tudi jaz porabim svoj čas. A to mu omogoča, da ne obupa, in doseže rezultate. Kljub temu je to hitreje, kot če bi to delal sam. Sam bi potreboval za nalogo približno 5 ur. Praktikant jo bo opravil v 5 dneh. In ja, v teh 5 dneh bi porabil 2 uri za komunikacijo s praktikantom in pomoč. A vsaj 3 ure bom prihranil, praktikant pa bo vesel, da mu je bila dana pomoč. Splošno je treba močno komunicirati, opazovati, kaj oseba počne, in ne izgubiti stika.

Serjoža:
Tudi pripravnik je nenehno v stiku s svojim mentorjem in se z njim pogovarja večkrat na dan. Mentor pregleda kodo, se ukvarja s parnim programiranjem s pripravnikom in mu pomaga, ko nastanejo kakšne težave. Na ta način, s kombinacijo pomoči mentorja in resničnimi nalogami, učimo frontend razvijalce.
Dima:
Da pripravnik ne bi ostal sam, že pred zaposlitvijo razpravljamo, kdo ga bo mentoriziral. To je tudi velika priložnost za samega mentorja: priprava na vlogo vodje skupine, preverjanje sposobnosti obvladovanja tako svoje naloge kot naloge pripravnika. Imamo redne sestanke, na katere včasih pridem tudi jaz, da sem na tekočem. A redno se s pripravnikom srečuje ravno mentor. Sprva porabi zelo veliko časa, a se to izplača.
Vendar pa prisotnost mentorja ne pomeni, da se vse nastale težave rešujejo preko njega.
Miša:
Pri nas je običajno, da se ljudje, ki naletijo na problem, za nasvet obrnejo k sosedom, kolegom in hitro najdejo pomoč. Bolj kot človek raste, pogosteje mora iti k kolegom po informacije. Koristno je celo spoznavati naloge drugih ljudi, da si zamisli nove naloge. Ko pripravnik sam spozna, kako se dogovoriti, razumeti, kaj je pomembno drugi strani, in doseči rezultat v ekipi, bo hitreje napredoval kot tisti, za katerega mora to vse doseči vodja.
Serjoža:
Obstaja dokumentacija, toda večina informacij je razpršena. Če jo vpijaš na začetku svoje kariere, je to dodatna prednost, mi pa lahko usmerimo osebo na tisto, kar je potrebno raziskati.
Idealni praktikant je onaj koji se pripravlja nekoliko mjeseci, postaje mlađi programer, zatim programer, a potom vođa tima itd. Za to je potreban arhetip učenika koji se ne ustručava postavljati pitanja kada nešto ne razumije, ali istovremeno može raditi samostalno. Ako mu kažu da o tome može pročitati na nekom mjestu, on će otići, pročitati i stvarno se vratiti s novim znanjem. Može griješiti, ali ne bi trebao griješiti više od jednom, najviše dvaput na istom mjestu. Idealni praktikant treba se razvijati, upijati sve kao spužva, učiti i rasti. Onaj tko sjedi, pokušava sam sve shvatiti, dugo se bavi svime, ne postavlja pitanja, vjerojatno će teško opstati.
Kraj pripravništva
Prije početka rada potpisujemo s svakim praktikantom ugovor na određeno vrijeme. Naravno, pripravništvo je plaćeno, uređeno po Zakonu o radu Ruske Federacije, i praktikant dobiva iste pogodnosti kao i bilo koji drugi zaposlenik Yandexa. Nakon tri mjeseca program se završava - mnoge praktikante potom prebacujemo u stalni radni odnos.

S jedne strane, vođi je važno da programer ispuni svoj minimalni praksu. To je ono na što se praktikant usmjerava počevši od razgovora za posao. Međutim, to je samo početak priče. Praktikant je za nas uvijek potencijalni kandidat za stalni rad. Minimalni cilj za vođu je već na samom početku prepoznati takvu osobu koju nakon tri mjeseca neće biti sram preporučiti drugim odjelima. Maksimalni cilj je zadržati ga u istom timu, zaposliti ga. Pri tome uzimamo u obzir da će student druge ili treće godine, čak i ako je postao praktikant, s početkom akademske godine morati nastaviti obrazovanje na sveučilištu.
Serjoža:
Prvo i najvažnije, praktikanti su za nas - kadrovski potencijal. Pokušavamo odgajati ljude unutar Yandexa kako bi savršeno odgovarali našim zadacima. Dajemo im sve, počevši od kulture komunikacije i suradnje u timovima do enciklopedijskih znanja o svim našim sistemima.
Ignat:
Ko pridobivanju pripravnika takoj ugotovimo, ali bo ustrezal naši ekipi. Običajno je edina ovira pomanjkanje prostih delovnih mest. Prizadevamo si, da zaposlujemo mlade ljudi. Če ima nekdo pet let izkušenj pri razvoju in pride v Yandex kot pripravnik, to pomeni, da, četudi je dober, ne bo mogel napredovati do starejšega razvijalca. Običajno je težava v hitrosti: počasen napredek v preteklosti pomeni počasen napredek tudi pri nas. Da, včasih spoznanje, da nekdo ni usposobljen, pride šele po treh mesecih. A to se redko zgodi. V več kot polovici primerov smo pripravljeni vključiti ljudi v ekipo. Ne spomnim se, da bi kdo uspešno opravljal pripravništvo, a nato ne bi opravil razgovora za stalno delovno mesto.
Miša:
Vsem uspešnim pripravnikom ponujamo ostati v podjetju. Po pripravništvu običajno zaposlimo več kot polovico. Poletna pripravništva so težja, ker pogosto pridejo k nam študenti, na primer, tretjega letnika, in jim je težko usklajevati delo s študijem.
Dima:
Recimo, da pripravnik odlično opravlja naloge in ima velike možnosti, da postane dober razvijalec - četudi mu trenutno primanjkuje izkušenj. In recimo, da ni prostega delovnega mesta za nedoločen čas. Potem je preprosto: moram iti k svojemu vodji in mu povedati - to je res odlična oseba, ki jo moramo z vsemi močmi zadržati, dajmo ji ponuditi nekaj, da jo namestimo.
Zgodbe o pripravnikih
Denis:
Dekle, ki se je k nam pridružilo na pripravništvu leta 2017, je bilo iz Pervija. To je približno 400 km zahodno od Jekaterinburga. Vsak teden je prišla k nam iz Pervija z vlakom v šolo mobilnega razvoja. Čez dan je prišla, zvečer se je učila in pozno zvečer se je vrnila nazaj. Ko smo ocenili to vnemo, smo jo povabili, da dela pri nas, in to se je obrestovalo.
Ignat:
Pred nekaj leti smo sodelovali v programu izmenjave študentov. Delo z mednarodnimi mladimi je bilo zanimivo. Toda študenti od tam niso boljši kot na primer iz ŠADA ali FKN-a. Zdelo bi se, da je EPFL med najboljšimi 20 univerzami v Evropi. Takrat sem imel — kot najet manj izkušen razgovarjalec — takšno pričakovanje: neverjetno, razgovarjamo se z ljudmi iz EPFL, bodo super kul. Toda ljudje, ki so dobili osnovno izobrazbo o kodiranju pri nas — vključno z ključnimi regionalnimi univerzami — se izkažejo za povsem primerljive.
Ali druga zgodba. Trenutno imam v službi fanta, zelo mladega, okoli 20 let. Dela v Sankt Peterburgu, prišel je na prakso. Zelo je kul. Kot ponavadi mu dodeliš naloge, jih reši, po mesecu pa prijde in reče: rešil sem, gledam, in zdi se, da imate slabo zgrajeno arhitekturo. Dajmo to predelati. Koda bo preprostejša, jasnejša. Seveda sem ga odvrnil: obseg dela je velik, dobiček za uporabnike ni, a ideja se sliši povsem smiselno. Oseba se je spoprimila s kompleksnim večnitnim procesom in predlagala izboljšave — morda niso na mestu, refaktorizacija zaradi refaktorizacije. Ampak ko bo potrebno to kodo zapletati, bo možno to refaktorizacijo vseeno izvesti. Po pravici je minilo nekaj mesecev in začeli smo se ukvarjati s to nalogo. Z veseljem sem ga sprejel v ekipo. Nismo vsi geniji. Lahko prideš, razumeš stvari in nam pokažeš naše težave. To je cenjeno.
Miša:
Imamo take idealne praktikante. Kljub pomanjkanju izkušenj vidijo nalogo ne samo na tehnični, temveč tudi na globalni ravni. Predlagajo principielne izboljšave. Imajo razumevanje, kako prenesti naloge iz stvarnega sveta v tehničnega, ne da bi izgubili smisel. Razmišljajo, kakšen je končni cilj, ali se je vredno poglabljati v podrobnosti ali pa lahko popolnoma spremenimo pristop k nalogi ali celo postavitev naloge. To pomeni, da imajo potencial, da postanejo nekaj ravni višje. Da prehodijo to pot, morajo samo razviti določene sposobnosti in notranje orodje. Poleg tega zagnati več uspešnih projektov.

Izvor: habr.com
