
Zaposlovanje naprej Proces pripravništva pri Yandexu se nadaljuje. Razteza se na pet področij: backend, strojno učenje, razvoj mobilnih naprav, frontend in analitika. Ta blog, skupaj z drugimi blogi na Habrju in drugod, ponuja bogat vpogled v proces pripravništva. Vendar pa velik del procesa ostaja skrivnost za tiste zunaj podjetja. Z vidika vodij razvoja se pojavlja še več vprašanj. Kako naj se praksa pravilno izvaja, kako lahko s pripravnikom povečamo obojestransko korist, kako ga lahko spoznamo v treh mesecih in ga naučimo vsega, kar potrebuje za nadaljevanje kariere?
Ta članek nas je pripravilo pet. Naj se predstavimo: Ignat Kolesničenko iz Službe za distribuirane računalniške tehnologije, Miša Levin iz Službe za tržno strojno inteligenco, Denis Malih iz Službe za razvoj aplikacij, Sergej Berežnoj iz oddelka za razvoj iskalnega vmesnika in Dima Čerkasov iz skupine za razvoj boja proti goljufijam. Vsak od nas predstavlja drugačno področje prakse. Vsi smo vodje, potrebujemo praktikante in imamo nekaj izkušenj z delom z njimi. Naj delimo nekaj teh izkušenj.
Predhodni razgovor za pripravništvo
Kandidati bodo imeli več tehničnih razgovorov. Uspeh na razgovoru je manj odvisen od mehkih veščin (učinkovita komunikacija) in bolj od trdih veščin (matematične in programerske sposobnosti). Vendar pa vodje ocenjujejo oboje.
Ignat:
Tudi če je nekdo neverjetno nadarjen, a popolnoma nekomunikativen, ne bo mogel dobro izkoristiti vseh svojih veščin. To zagotovo upoštevamo, vendar to ni razlog, da nekoga ne bi zaposlili za prakso. Vse se lahko spremeni v treh mesecih, poleg tega pa je lahko vaš prvi vtis napačen. In če je pravilen, jim boste morali stvari razložiti in poiskati druge ekipe. Za praktikante komunikacijske veščine zagotovo niso ključni dejavnik. Profesionalne veščine so veliko pomembnejše.
Denis:
Všeč so mi ljudje, ki pripovedujejo zgodbe – na dober način. Nekdo, ki lahko pove zgodbo o tem, kako so se oni in njihova ekipa junaško spopadli z neko napako, je zanimiv. Ko se pojavi takšna zgodba, začnem postavljati dodatna vprašanja. Ampak to se redko zgodi, ko preprosto vprašam: "Povej mi kaj zanimivega o svojih projektih."
En kandidat je nekoč izrekel čudovit stavek, ki sem si ga celo zapisal: »Uspešno se je izognil reševanju dolgočasnih problemov.«

Ker je čas za komunikacijo omejen, si anketar vsako minuto sestanka prizadeva zbrati koristne informacije o kandidatu. Odlično je, če je praktikant vnaprej premislil, katere podrobnosti o svojih izkušnjah (ne iz življenjepisa) lahko deli. To naj bo kratko in jedrnato.
Denis:
Pozoren sem, ko ljudje rečejo, da so preizkusili že veliko jezikov in pristopov. Ljudje s širšo perspektivo se v trenutku domislijo elegantnejših rešitev. Ampak to je mešan blagoslov. Lahko preletiš površino, a se zares ne naučiš ničesar.
Čas za zgodbe, ki jih opisuje Denis, običajno ostane le še med zadnjim razgovorom. Do takrat morate pokazati temeljno in praktično znanje, ki bo osnova vašega prihodnjega dela. In seveda boste morali napisati kodo na belo tablo ali list papirja.
Miša:
Preverjamo znanje kandidatov s področja teorije verjetnosti in matematične statistike. Iščemo tudi izkušnje z metrikami, algoritmi strojnega učenja, uglaševanjem parametrov, prekvalifikacijo in tako naprej. Pričakujemo, da bodo znali programirati dovolj dobro, da bodo postali analitiki.
Denis:
Tisti, ki pridejo na razgovore, običajno poznajo jezike: v Jekaterinburgu imamo dobro šolo za glavne jezike in dobre univerze. Ampak, če sem iskren, je kandidat za prakso z dobrimi trdimi znanji redek, vsaj v naši epsilon soseski. Vzemimo za primer Swift. Ima zelo zapleteno obdelavo nizov in ljudi, ki to znajo rešiti na pamet, je malo. To so tisti, ki mi takoj padejo v oči. Pogosto na razgovorih dam problem, ki je povezan z obdelavo nizov. In po vseh mojih izkušnjah je le ena oseba znala napisati takšno kodo Swift kar naenkrat, na list papirja. Potem sem vsem pripovedoval, da je nekdo končno rešil ta problem v Swiftu na list papirja.
Testiranje algoritmov med razgovorom
To je ločena tema, saj se kandidati še vedno sprašujejo: zakaj vedno ocenjujemo znanje algoritmov in podatkovnih struktur? Ta preizkus opravijo celo bodoči razvijalci mobilnih aplikacij in razvijalci front-enda.
Miša:
Med razgovorom vedno dodelimo nekakšen algoritmični problem. Kandidat mora ugotoviti, kako ga implementirati v Pythonu, po možnosti brez napak. Razumeti mora, kako preizkusiti svoj program in ga samostojno popraviti.

Izkušnje z algoritmi so koristne iz treh razlogov. Prvič, očitno bodo potrebne za algoritmične probleme – ki so redki, a se še vedno dogajajo. Drugič, razvijalec bo lahko učinkoviteje reševal probleme, povezane z algoritmi, tudi če ne zahtevajo poglabljanja v same algoritme (in teh je kar nekaj). Tretjič, če se na fakulteti niste učili algoritmov, a še vedno znate delati z njimi, vas to označuje kot radovedno osebo in bo povečalo vašo verodostojnost pri anketarju.
Denis:
Večina razvoja mobilnih aplikacij je zgolj "prevajanje JSON-a". Toda vsakih šest mesecev pridejo časi, ko so potrebni algoritmi. Trenutno ustvarjam čudovite zemljevide za Yandex.Weather. V samo enem tednu sem moral implementirati algoritem za glajenje, Sutherland-Hodgmanov algoritem in Martinezov algoritem. Če nekdo ne bi vedel, kaj je hashmap ali čakalna vrsta s prednostmi, bi se dolgo časa spraševal, ali bi to lahko obvladal brez pomoči.
Algoritmi so temelj razvoja. So tisto, kar razvijalcu pomaga, da je razvijalec. Ni pomembno, kaj počnete. Bistveni so tudi za preproste projekte, kjer je glavno delo "prevajanje JSON-a". Tudi če algoritmov ne pišete sami, ampak implicitno uporabljate nekatere podatkovne strukture, je najbolje, da jih razumete. V nasprotnem primeru boste na koncu dobili aplikacije, ki so počasne ali delujejo nepravilno.
Obstajajo programerji, ki so se v razvoj programske opreme podali akademsko: vpisali so se na univerzo, pet let pridno študirali in pridobili diplomo. Poznajo algoritme, ker so se jih naučili. Poleg tega samo poznavanje algoritmov ne odraža širine človekovega znanja; to širino znanja je treba preizkusiti na druge načine.
Potem so tu še samouki, med katere spadam tudi sam. Da, formalno imam IT-izobrazbo, diplomo iz programskega inženirstva. Ampak samouki so se naučili programirati "kljub sebi". Niso imeli univerzitetnega programa. Običajno algoritmov ne poznajo, ker se jih niso nikoli morali učiti. In ko takšna oseba razume algoritme, pomeni, da je porabila čas in jih dojela. Po diplomi na univerzi sem ugotovil, da imam nekaj slepih peg pri temeljnih algoritmih – stvar je v tem, da je bil moj glavni predmet prijavni predmet. Obiskoval sem spletne tečaje Univerze Princeton, ki jih je vodil znani Robert Sedgwick. Ugotovil sem in naredil vse domače naloge. In ko nekdo v intervjuju pove podobno zgodbo, me takoj začne zanimati in želim z njim sodelovati ali vsaj nadaljevati pogovor.

Ignat:
Ko se pogovarjate s pripravnikom, pričakujete še več kot od izkušenega razvijalca. Gre za sposobnost reševanja algoritmičnih problemov in hitrega pisanja vsaj nekaj pravilne kode. Kandidat za pripravnika je navsezadnje še vedno na univerzi. Še pred enim letom so ga podrobno učili o algoritmih. Pričakuje se, da jih zna reproducirati. Če je kompetenten in je pozorno poslušal predavanja, bo preprosto vse vedel in si to zapomnil.
Katere naloge rešuje pripravnik?
Program pripravništva se običajno lahko oriše in obravnava med končnimi razgovori. Šele na samem začetku dela se pripravniku lahko dodelijo naloge usposabljanja, katerih rezultati ne bodo uporabljeni v proizvodnji. Poleg tega je verjetnost prejema takšnih nalog majhna. Najpogosteje se projekti dodelijo v produkcijski zaostanek – tisti, ki so vredni pozornosti, vendar niso prednostno razvrščeni in "ločljivi" – tako da njihova izvedba ni odvisna od drugih komponent. Vodje jih poskušajo razporediti tako, da se pripravnik seznani z različnimi deli storitve in dela v istem okolju z drugimi člani ekipe.
Ignat:
To so izjemno koristne naloge. Morda ne bodo povečale izkoriščenosti grozdov za 10 % ali podjetju prihranile milijon dolarjev, bodo pa osrečile stotine ljudi. Na primer, trenutno imamo pripravnika, ki dela pri naši stranki, ki izvaja operacije na naših grozdih. Pred zagonom mora operacija naložiti nekaj podatkov v grozd. To običajno traja 20–40 sekund, prej pa se je dogajalo tiho: zagnali ste jo v konzoli in nato strmeli v črn zaslon. Prišel je pripravnik in v dveh tednih razvil funkcijo: zdaj lahko vidite, kako se datoteke nalagajo in kaj se dogaja. Po eni strani je nalogo preprosto opisati, po drugi strani pa je treba veliko raziskati, nekaj knjižnic, ki si jih je treba ogledati. Najboljše pri tem je, da ste to storili, minil je teden dni, deluje na grozdih in ljudje to že uporabljajo. Objavite na intranetu – zahvalijo se vam.

Miša:
Praktikanti razvijajo modele, zbirajo podatke zanje, razvijajo metrike in izvajajo poskuse. Postopoma jim preprosto začnemo dajati več svobode in odgovornosti – preverjamo, ali so kos nalogi. Če so, preidejo na naslednjo raven. Ne predvidevamo, da praktikant ob pridružitvi zmore vse. Vodja jim pomaga ugotoviti, tako da jim zagotovi povezavo do internega vira ali spletnega tečaja.
Če praktikant pokaže odlično delo, mu lahko dodelijo prednostno delovno mesto, ki je pomembno za oddelek ali druge službe.
Dima:
Naš praktikant trenutno dela na izboljšavah sistema za boj proti goljufijam. Gre za sistem, ki se bori proti širokemu naboru zlorab in goljufij v storitvah Yandex. Sprva smo razmišljali o tem, da bi mu dodelili preprostejše in manj produkcijsko kritične naloge. Praktikantove naloge poskušamo premisliti vnaprej, nato pa smo videli, da je pravi profesionalec, ki hitro in učinkovito rešuje težave. Posledično smo mu začeli dodeljevati nalogo uvajanja sistemov za boj proti goljufijam za nove storitve.
Poleg tega obstaja majhna verjetnost, da boste prejeli nalogo, ki se je kolegi zaradi njenega obsega prej niso lotili.
Dima:
Obstaja en star sistem in obstaja nov, ki še ni dokončan. Moramo se preseliti iz enega v drugega. To je dolgoročno velik projekt, čeprav z veliko negotovostjo: zahteva veliko komunikacije in branja nerazumljive starejše kode. Med zadnjim razgovorom smo praktikantu iskreno povedali, da je naloga zahtevna. Odgovoril je, da je pripravljen, se pridružil naši ekipi in vse je dobro izšlo. Izkazalo se je, da ima lastnosti ne le razvijalca, ampak tudi vodje. Bil je pripravljen osebno iti ven, ugotoviti in preveriti.
Mentorstvo pripravniku
Da bi se praktikant lahko poglobil v procese, potrebuje mentorja. To je nekdo, ki pozna ne le svoje naloge, temveč tudi naloge praktikanta. Z mentorjem se vzpostavi redna komunikacija in vedno se je mogoče posvetovati z njim. Mentor je lahko vodja skupine (če gre za majhno skupino) ali kolega oziroma redni član ekipe.
Ignat:
Poskušam se oglasiti vsaj vsak drugi dan in vprašati, kako se praktikant počuti. Če vidim, da je v zastoju, mu poskušam pomagati, ga vprašati, v čem je težava, in skupaj z njim sodelujem pri njeni rešitvi. Seveda mi to izčrpava energijo in na splošno zmanjšuje učinkovitost praktikantovega dela – s tem tudi zapravljam svoj čas. Vendar mu to omogoča, da se izogne obtičanju in doseže rezultate. In še vedno je hitreje, kot če bi to naredil sam. Za dokončanje naloge potrebujem približno 5 ur. Praktikant jo bo opravil v 5 dneh. In ja, v teh 5 dneh bom 2 uri porabil za pogovor s praktikantom in mu pomagal. Prihranil pa bom vsaj 3 ure, praktikant pa bo zadovoljen, da je prejel nasvet in pomoč. V bistvu je treba le tesno komunicirati, spremljati, kaj oseba počne, in vzdrževati stik.

Serjoža:
Praktikant je v nenehnem stiku s svojim mentorjem in z njim komunicira večkrat na dan. Mentor pregleda kodo, povezuje programe s praktikantom in pomaga, ko se pojavijo morebitne težave. Ta kombinacija mentorske podpore in izzivov iz resničnega sveta je način, kako usposabljamo razvijalce front-end aplikacij.
Dima:
Da se praktikant ne bi počutil zapuščenega, se o tem, kdo ga bo mentoriral, pogovorimo že pred zaposlitvijo. To je tudi pomemben razvojni korak za samega mentorja: pripravi ga na vlogo vodje ekipe in preizkusi njegovo sposobnost, da ima v mislih tako svojo nalogo kot nalogo praktikanta. Redno se sestajamo, ki se jih včasih udeležim, da ostanem na tekočem. Vendar pa je mentor tisti, ki najredeje komunicira s praktikantom. Na začetku vloži veliko časa, vendar se to obrestuje.
Vendar pa imeti mentorja ne pomeni, da se vsa vprašanja, ki se pojavijo, rešijo prek njega.
Miša:
Za ljudi, ki se soočajo s težavo, je običajno, da prosijo sosede in sodelavce za nasvet in hitro najdejo pomoč. Hitreje ko nekdo raste, pogosteje mora prositi sodelavce za nasvet. Koristno je celo, da se preprosto seznanijo z nalogami drugih ljudi, da si lažje zamislijo nove. Ko se praktikant zna pogajati, razumeti, kaj je pomembno za drugo stran, in dosegati rezultate kot ekipa, bo rasel veliko hitreje kot nekdo, ki se mora zanašati na vodjo, da vse to opravi namesto njega.
Serjoža:
Dokumentacija obstaja, vendar je večina informacij le zamegljena. Če jih vsrkate na začetku svoje kariere, je to dodatna prednost in lahko ljudi osredotočimo na tisto, kar se morajo naučiti.
Idealni pripravnik je nekdo, ki opravlja večmesečno prakso, postane mlajši razvijalec, nato razvijalec, nato vodja ekipe in tako naprej. To zahteva arhetip učenca, ki se ne boji postavljati vprašanj, če nečesa ne razume, hkrati pa je sposoben tudi samostojnega dela. Če mu rečejo, da lahko o tem nekje prebere, bo šel, prebral in se dejansko vrnil z novim znanjem. Morda bo naredil napake, vendar jih ne sme narediti več kot enkrat ali največ dvakrat na istem mestu. Idealni pripravnik bi se moral razvijati, vpijati vse kot goba, se učiti in rasti. Nekdo, ki sedi naokoli in poskuša vse ugotoviti sam, se predolgo igra naokoli, ne da bi postavil kakršna koli vprašanja, verjetno ne bo uspeval.
Konec prakse
Pred začetkom dela z vsakim pripravnikom podpišemo pogodbo za določen čas. Seveda je praksa plačana, formalizirana v skladu z ruskim delovnim zakonikom, pripravnik pa uživa enake ugodnosti kot kateri koli drug zaposleni v Yandexu. Po treh mesecih se program konča in mnogi pripravniki so nato premeščeni na delovna mesta s polnim delovnim časom (na pogodbe za nedoločen čas).

Po eni strani je za vodjo pomembno, da razvijalec izpolnjuje minimalne zahteve za pripravništvo. Prav k temu vodijo pripravnika, začenši z razgovorom. Vendar je to šele začetek. Za nas je pripravnik vedno potencialni kandidat za polni delovni čas. Minimalni cilj vodje je, da že na začetku prepozna nekoga, ki ga bo po treh mesecih z veseljem priporočil drugim oddelkom. Maksimalni cilj je, da ga obdržimo v isti ekipi tako, da ga zaposlimo za polni delovni čas. Upoštevamo tudi, da bo moral študent drugega ali tretjega letnika – tudi če je pripravnik – nadaljevati izobraževanje na univerzi, ko se bo začelo študijsko leto.
Serjoža:
Najprej in predvsem so praktikanti naš bazen talentov. Prizadevamo si, da bi ljudi znotraj Yandexa razvijali tako, da bi bili idealno primerni za naše naloge. Zagotavljamo jim vse od kulture komunikacije in timskega dela do enciklopedičnega poznavanja vseh naših sistemov.
Ignat:
Ko zaposlimo pripravnika, ga takoj ocenimo za pridružitev naši ekipi. Običajno je edina ovira pomanjkanje prostih delovnih mest. Za pripravnike poskušamo zaposliti dokaj mlade ljudi. Če ima nekdo pet let izkušenj z razvojem in se pridruži Yandexu kot pripravnik, to za nas žal pomeni, da – čeprav je odličen razvijalec za pridružitev Yandexu s petimi leti izkušenj – ne bo mogel napredovati v višjega razvijalca. Običajno gre za vprašanje hitrosti: počasna rast v preteklosti bo pomenila počasno rast tudi pri nas. Da, včasih šele po treh mesecih ugotovimo, da oseba ne dosega ciljev. Ampak to je precej redko. V več kot polovici primerov smo pripravljeni zaposliti ga za polni delovni čas. Še nikoli nisem videl nikogar, ki bi uspešno opravil pripravništvo, a se ni udeležil razgovora za delovno mesto s polnim delovnim časom.
Miša:
Vsem uspešnim pripravnikom ponujamo zaposlitev v podjetju. Po končani praksi jih običajno več kot polovico zaposlimo za polni delovni čas. Poletne prakse so bolj zahtevne, ker imamo pogosto študente, na primer v tretjem letniku, ki težko usklajujejo delo in študij.
Dima:
Recimo, da pripravnik opravlja odlično delo in ima veliko potenciala, da se razvije v odličnega razvijalca, tudi če je trenutno neizkušen. In recimo, da ni odprtega delovnega mesta za nedoločen čas. Potem je preprosto: moram iti k svojemu vodji in mu reči: "To je res odlična oseba, vsekakor bi jo morali obdržati. Ponudimo mu nekaj, našli mu bomo mesto."
Zgodbe pripravnikov
Denis:
Dekle, ki se nam je pridružilo na praksi leta 2017, je bilo iz Perma, približno 400 kilometrov zahodno od Jekaterinburga. Vsak teden se je z vlakom vozila iz Perma v Mobilno razvojno šolo. Prišla je čez dan, se zvečer učila in se nato pozno ponoči vrnila. Ker smo prepoznali njeno strast, smo ji ponudili mesto in to se je obrestovalo.
Ignat:
Pred nekaj leti smo sodelovali v programu izmenjave praktikantov. Delo s tujimi študenti je bilo zanimivo. Vendar praktikanti od tam niso bili nič močnejši od, recimo, tistih s Fakultete za analizo podatkov ali Fakultete za računalništvo. Zdelo se je, da je EPFL med 20 najboljšimi univerzami v Evropi. Takrat sem kot neizkušen anketar imel tole pričakovanje: neverjetno, intervjuvamo ljudi z EPFL; bodo super kul. Ampak ljudje, ki so tukaj pridobili osnovno izobrazbo programiranja, tudi na ključnih regionalnih univerzah, so se izkazali za precej sposobne.
Ali pa druga zgodba. Trenutno imam v ekipi fanta, zelo mladega, starega približno 20 let. Dela v Sankt Peterburgu in je prišel sem na prakso. Res je kul. Kot ponavadi nekomu daš težave, jih reši, mesec dni kasneje pa se vrne in reče: Rešil sem jih, in pogledam, in zdi se, da je vaša arhitektura slabo zasnovana. Predelajmo jo. Koda bo preprostejša, bolj razumljiva. Seveda sem ga prepričal, naj se ne odloči: količina dela je velika, za uporabnike ni nobene koristi, ampak ideja se sliši povsem razumna. Fant je ugotovil zapleten večnitni proces in predlagal izboljšave – morda nepravočasno, refaktoriranje zaradi refaktoriranja. Ampak takoj, ko želiš kodo narediti bolj zapleteno, lahko to refaktoriranje še vedno narediš. Pravzaprav je minilo nekaj mesecev in smo se lotili te naloge. Z veseljem sem ga zaposlil. Nismo vsi geniji. Lahko pride, nekaj ugotovi in opozori na naše težave. To je cenjeno.
Miša:
Imamo nekaj idealnih pripravnikov. Kljub pomanjkanju izkušenj vidijo problem ne le na tehnični ravni, temveč tudi na globalni ravni. Predlagajo temeljne izboljšave. Razumejo, kako prevesti naloge iz resničnega sveta v tehnične, ne da bi pri tem izgubili svoj pomen. Upoštevajo končni cilj, ali se splača zdaj poglobiti v podrobnosti ali pa je mogoče popolnoma spremeniti pristop k nalogi ali celo opredelitev problema. To pomeni, da imajo potencial, da se dvignejo za več ravni. Da bi to dosegli, morajo le izpiliti nekaj veščin in notranjih orodij ter začeti nekaj uspešnih projektov.

Vir: www.habr.com
