Stage in IT: la visione di un manager

Stage in IT: la visione di un manager

Le selezioni per uno stage estivo in Yandex sono aperte. Si articolano in cinque aree: backend, ML, sviluppo mobile, frontend e analisi. In questo blog, così come in altri blog su Habr e oltre, puoi trovare molte informazioni su come si svolge lo stage. Tuttavia, molte cose in questo processo rimangono un mistero per coloro che non lavorano in azienda. E se guardiamo dal punto di vista dei responsabili dello sviluppo, sorgono ancora più domande. Come condurre correttamente uno stage, come massimizzare il reciproco vantaggio con il tirocinante, come riuscire a conoscerlo in tre mesi e insegnargli tutto ciò che è necessario per la continuazione del lavoro?

Abbiamo preparato questo articolo in cinque. Ci presentiamo: Ihnat Kolesnichenko dal servizio di tecnologie di calcolo distribuito, Misha Levin dal servizio di intelligenza artificiale di Marketa, Denis Malykh dal servizio di sviluppo applicazioni, Seryozha Berezhnoy dal dipartimento di sviluppo interfacce di ricerca e Dima Cherkasov dal gruppo di sviluppo anti-frode. Ognuno di noi rappresenta la propria area di tirocinio. Siamo tutti manager, abbiamo bisogno di tirocinanti e abbiamo un po' di esperienza lavorando con loro. Vogliamo condividere alcune di queste esperienze.

Colloquio prima del tirocinio

Ai candidati sono attesi diversi colloqui tecnici. Il successo nel colloquio dipende in misura minore dalle soft skills (capacità di comunicare efficacemente) e in misura maggiore dalle hard skills (competenze in matematica e programmazione). Tuttavia, i manager valutano entrambi.

Ihnat:

Anche se una persona è molto brava, ma completamente priva di capacità comunicative - non potrà applicare tutte le sue abilità. Certo, ci facciamo caso, ma questo non è un motivo per non prendere qualcuno per uno stage. In tre mesi tutto può cambiare e, inoltre, la prima impressione potrebbe rivelarsi errata. E se tutto è corretto - bisognerà spiegare alla persona e cercare altre squadre per lei. Per gli stagisti, la comunicabilità non è sicuramente un fattore chiave. Le abilità professionali rimangono comunque molto più importanti.

Denis:

Mi piacciono le persone che raccontano storie - in senso buono. Una persona che può narrare come lui e il suo team abbiano affrontato con eroismo un qualche problema è interessante. Inizio a fare domande aggiuntive quando emerge una storia del genere. Ma raramente accade se si chiede semplicemente di "parlare di qualcosa di interessante nei tuoi progetti".

Un candidato una volta ha pronunciato una frase meravigliosa che ho persino annotato: "Ho evitato con successo di affrontare compiti noiosi".

Stage in IT: la visione di un manager

Poiché il tempo per comunicare è limitato, l'intervistatore cerca di ottenere informazioni utili sul candidato in ogni minuto dell'incontro. È un vantaggio se lo stagista ha già pensato a quali dettagli della propria esperienza (non inclusi nel CV) potrebbe condividere. Questo dovrebbe essere un racconto breve e focalizzato.

Denis:

Presto attenzione se la persona racconta di aver provato molti linguaggi e approcci. Le persone con una visione più ampia tendono a inventare soluzioni più eleganti in situazioni critiche. Tuttavia, questo è un vantaggio ambiguo. Si può apprendere superficialmente senza mai imparare davvero.

Il tempo per le storie descritte da Denis di solito resta solo per il colloquio finale. Fino ad allora, è necessario dimostrare le conoscenze fondamentali e pratiche che costituiranno la base del lavoro futuro. E, naturalmente, sarà richiesto di scrivere codice su una lavagna o su un foglio di carta.

Misha:

Controlliamo la conoscenza della teoria della probabilità e della statistica matematica. Verifichiamo se la persona ha esperienza con metriche, con algoritmi di machine learning, con la regolazione dei loro parametri, con l'overfitting, ecc. Ci aspettiamo che la persona sia in grado di scrivere codice a un livello sufficiente per diventare un analista.

Denis:

Le persone che si presentano al colloquio conoscono principalmente linguaggi di programmazione: a Ekaterinburg abbiamo ottime scuole per i linguaggi principali, buone università. Ma, a dire il vero, un candidato per uno stage con buone hard skills è un caso raro, almeno nella nostra realtà. Ad esempio, Swift. La gestione delle stringhe è molto complessa, e ci sono poche persone in grado di lavorarci senza pensarci su. Quelli attirano subito l'attenzione. Spesso do compiti nei colloqui che riguardano proprio l'elaborazione delle stringhe. E finora c'è stata solo una persona che, all'improvviso, è riuscita a scrivere quel codice Swift su un foglio. Dopo, ne ho parlato a tutti, che finalmente qualcuno è riuscito a risolvere quel compito in Swift su un foglio.

Verifica degli algoritmi nel colloquio

Questo è un tema a parte, poiché i candidati si chiedono ancora perché valutiamo sempre la conoscenza degli algoritmi e delle strutture dati. Anche i futuri sviluppatori mobili e front-end devono affrontare questa verifica.

Misha:

Durante il colloquio, diamo sempre un compito algoritmico. Il candidato deve pensare a come implementarlo in Python, preferibilmente senza errori. È importante capire come testare il proprio programma e correggerlo autonomamente.

Stage in IT: la visione di un manager

L'esperienza con gli algoritmi sarà utile per tre motivi principali. Innanzitutto, sarà indubbiamente necessaria per le sfide algoritmiche — che non si presentano spesso, ma succede comunque. In secondo luogo, lo sviluppatore sarà in grado di risolvere più efficacemente problemi relativi agli algoritmi, anche se non richiedono di immergersi negli algoritmi stessi (ce ne sono già parecchi). Infine, se non hai studiato algoritmi all'università, ma sei comunque in grado di lavorarci, ciò ti identifica come una persona curiosa e aumenterà il tuo prestigio agli occhi dell'interlocutore.

Denis:

La maggior parte dello sviluppo mobile consiste nel "trasformare JSON". Tuttavia, ogni sei mesi ci sono situazioni in cui gli algoritmi sono necessari. Attualmente sto creando belle mappe per Yandex.Meteo. Nell'ultima settimana ho dovuto implementare un algoritmo di smoothing, l'algoritmo di Sutherland-Hodgman e l'algoritmo di Martinez. Se qualcuno non sa cosa sia una hashmap o una coda di priorità, si ritroverebbe bloccato con questo per un bel po', senza sapere se ce la farebbe o meno senza aiuto esterno.

Gli algoritmi sono la base dello sviluppo. Sono ciò che aiuta un sviluppatore a essere un vero sviluppatore. Non importa di cosa ti occupi. Essi sono necessari anche nei progetti semplici, dove il lavoro principale consiste nel "trasformare JSON". Anche se non scrivi gli algoritmi tu stesso, ma utilizzi implicitamente alcune strutture dati, è meglio capirle. Altrimenti, finirai per creare applicazioni che funzionano lentamente o in modo errato.

Ci sono programmatori che sono entrati nel settore della tecnologia in modo accademico: si sono iscritti all'università, hanno studiato seriamente per cinque anni e hanno conseguito una laurea. Conoscono gli algoritmi, perché sono stati insegnati. Tuttavia, la semplice conoscenza degli algoritmi non riflette necessariamente la formazione culturale di una persona; è necessario verificare questa formazione in altro modo.

Ci sono anche degli autodidatti, tra cui mi considero. Sì, formalmente ho un'istruzione IT, un diploma di ingegnere informatico. Ma gli autodidatti hanno imparato a programmare "nonostante tutto". Non avevano un programma universitario. Di solito non conoscono gli algoritmi, perché non avevano mai affrontato la necessità di studiarli. E quando una persona del genere comprende gli algoritmi, significa che ha dedicato del tempo a studiarli. Dopo aver finito l'università, ho capito che avevo delle lacune in merito agli algoritmi fondamentali, poiché la mia specializzazione era pratico-applicativa. Così ho deciso di seguire i corsi online dell'Università di Princeton, ben conosciuti di Robert Sedgewick. Ho studiato, completato tutti i compiti. E quando una persona durante un colloquio racconta una storia simile, mi interessa subito, nasce il desiderio di lavorare con lui o almeno di continuare la conversazione.

Stage in IT: la visione di un manager

Ihnat:

Quando si intervista un stagista, in un certo senso ci si aspetta persino di più che da un sviluppatore esperto. Si tratta della capacità di risolvere problemi algoritmici e di scrivere rapidamente un codice corretto. Il candidato per lo stage è ancora all'università. Solo un anno fa, gli venivano spiegati in dettaglio gli algoritmi. Ci si aspetta che possa riprodurli. Se la persona è in gamba e ha ascoltato attentamente le lezioni, avrà sicuramente tutto chiaro, pronto da recuperare.

Quali compiti svolge uno stagista

Di solito, il programma di stage può essere delineato e discusso durante i colloqui finali. All'inizio del suo lavoro, lo stagista potrebbe ricevere solo compiti di esercitazione, i cui risultati non saranno utilizzati in produzione. Inoltre, la probabilità di ricevere tali compiti è bassa. Più frequentemente vengono assegnati progetti attivi dal backlog, ovvero progetti considerati meritevoli di attenzione, ma non prioritari e 'separabili' — in modo che il loro completamento non dipenda da altri componenti. I responsabili cercano di distribuirli in modo tale che lo stagista possa familiarizzare con diverse parti del servizio e lavorare nello stesso ambiente con altri membri del team.

Ihnat:

Queste sono attività estremamente utili. Potrebbero non aumentare l'utilizzo del cluster del 10% e non risparmiare un milione di dollari all'azienda, ma renderanno felici centinaia di persone. Ad esempio, attualmente abbiamo uno stagista che si occupa di un nostro cliente per avviare operazioni sui nostri cluster. Prima di avviare l'operazione, devono essere caricati alcuni dati sul cluster. Di solito ciò richiede 20-40 secondi, e prima avveniva in silenzio: la si avviava in console e si aspettava guardando lo schermo nero. Lo stagista è venuto e in due settimane ha creato una funzionalità: ora è possibile vedere cosa sta accadendo durante il caricamento dei file. L'attività, da un lato, non è complicata da descrivere, ma dall'altro c'è molto da esplorare, quali librerie controllare. La cosa più bella è che l'hai realizzata, è passata una settimana, ed è già sui cluster, le persone la stanno utilizzando. Scrivi un post nella rete interna e ti ringraziano.

Stage in IT: la visione di un manager

Misha:

Gli stagisti preparano modelli, raccolgono dati per essi, inventano metriche e conducono esperimenti. Gradualmente iniziamo semplicemente a dargli più libertà e responsabilità — controlliamo se se la cava. Se sì, passa al livello successivo. Non ci aspettiamo che quando uno stagista arriva, sappia già fare tutto. Il suo supervisore lo aiuta a orientarsi, fornendogli un link a risorse interne o corsi online.

Se lo stagista si dimostra all'altezza, può ricevere compiti prioritari, importanti per il dipartimento o per altri servizi.

Dima:

Il nostro stagista attualmente sta lavorando su modifiche hardcore per il sistema antifrode. Questa è una sistema che combatte vari tipi di abuso e frode nei servizi di Yandex. Inizialmente pensavamo di dargli compiti non molto complessi e poco importanti per la produzione. Cerchiamo di pianificare in anticipo i compiti dello stagista, ma qui abbiamo visto che la persona 'brilla', risolvendo rapidamente e bene le sfide. Alla fine, abbiamo iniziato ad affidargli il lancio dell'antifrode per nuovi servizi.

Inoltre, esiste una piccola possibilità di ricevere un compito a cui i colleghi non si sono mai avvicinati a causa della sua complessità.

Dima:

Esiste un vecchio sistema e uno nuovo, ancora incompleto. È necessario effettuare il trasloco da uno all'altro. In prospettiva, si tratta di un progetto importante, anche se con alta incertezza: bisogna comunicare molto, leggere codice legacy difficile da comprendere. Durante il colloquio finale, abbiamo onestamente detto al tirocinante che il compito è complesso. Lui ha risposto di essere pronto, è entrato nel nostro team e ce l'ha fatta. Si è rivelato avere qualità non solo da sviluppatore, ma anche da manager. Era disposto a informarsi, a chiedere, a pingare.

Mentorship per il tirocinante

Per un'immersione nei processi, il tirocinante ha bisogno di un mentore. Questa è una persona che è aggiornata non solo sui propri compiti, ma anche su quelli del tirocinante. Con il mentore è stabilita una comunicazione regolare, a cui ci si può sempre rivolgere per un consiglio. Il mentore può essere il responsabile del gruppo (se si tratta di un piccolo gruppo) oppure qualcuno tra i colleghi, membri permanenti del team.

Ihnat:

Cerco di avvicinarmi almeno ogni due giorni per chiedere come sta lo stagista. Se vedo che ha incontrato delle difficoltà, mi impegno ad aiutarlo, chiedendo qual è il problema e scavando insieme per trovarne la soluzione. È ovvio che questo mi richiede tempo e rende il lavoro dello stagista meno efficace nel complesso — anche io sto spendendo il mio tempo. Tuttavia, ciò permette a lui di non perdersi e di ottenere risultati. E comunque, è più veloce che se lo facessi io stesso. A me servirebbero circa 5 ore per completare il compito. Lo stagista lo farebbe in 5 giorni. E sì, spenderò 2 ore in questi 5 giorni per parlare con lui e aiutarlo. Ma alla fine risparmierò almeno 3 ore, e lo stagista apprezzerà il supporto ricevuto. In generale, è importante comunicare attivamente, vedere cosa fa la persona e mantenere il contatto.

Stage in IT: la visione di un manager

Sergej:

Lo stagista è costantemente in contatto con il suo mentore e comunica con lui diverse volte al giorno. Il mentore revisiona il codice, si occupa della programmazione in coppia con lo stagista e fornisce aiuto quando sorgono problemi. È proprio in questo modo, combinando l'assistenza del mentore con compiti reali, che formiamo i front-end developer.

Dima:

Affinché lo stagista non si senta abbandonato, discutiamo già prima dell'assunzione chi sarà il suo mentore. Questo è anche un'ottima opportunità di crescita per il mentore stesso: si prepara a diventare team leader, testando la sua capacità di gestire sia il proprio compito che quelle dello stagista. Ci sono incontri regolari, ai quali a volte partecipo anche io per restare aggiornato. Tuttavia, è il mentore a interagire regolarmente con lo stagista. All'inizio dedica molto tempo, ma ne vale la pena.

Tuttavia, avere un mentore non significa che tutte le domande vengano risolte tramite lui.

Misha:

Da noi è consuetudine che le persone che affrontano un problema chiedano consiglio ai colleghi vicini e trovino rapidamente aiuto. Più velocemente cresce una persona, più spesso ha bisogno di chiedere aiuto ai colleghi per apprendere nuove informazioni. È utile anche semplicemente conoscere le attività degli altri per ideare nuove sfide. Quando uno stagista riesce a negoziare, capire cosa è importante per l'altra parte e raggiungere risultati in squadra, cresce molto più rapidamente di chi ha bisogno che il proprio manager faccia tutto questo.

Sergej:

Esiste documentazione, ma gran parte delle informazioni è dispersa. Se la assorbi all'inizio della tua carriera, è un vantaggio aggiuntivo e possiamo concentrare la persona su cosa deve studiare.

Il tirocinante ideale è colui che fa uno stage per alcuni mesi, diventa sviluppatore junior, poi semplicemente sviluppatore, poi team leader e così via. Per questo è necessario un archeotipo di studente che non ha paura di chiedere se qualcosa non gli è chiaro, ma è anche in grado di lavorare in modo autonomo. Se gli viene detto che può leggere di questo da qualche parte, andrà, leggerà e tornerà effettivamente con nuove conoscenze. Può commettere errori, ma non deve sbagliare più di una, al massimo due volte nello stesso posto. Il tirocinante ideale deve crescere, assorbire tutto come una spugna, imparare e progredire. Chi rimane seduto, cerca di capire tutto da solo, si dilunga e non fa domande, difficilmente si adatterà.

Fine del tirocinio

Prima di iniziare a lavorare, firmiamo un contratto a termine con ciascun tirocinante. Naturalmente, il tirocinio è retribuito, regolato dal Codice del Lavoro russo, e il tirocinante gode degli stessi vantaggi di qualsiasi altro dipendente di Yandex. Dopo tre mesi, il programma termina e molti tirocinanti vengono poi assunti a tempo indeterminato.

Stage in IT: la visione di un manager

Da un lato, è importante per il manager che lo sviluppatore rispetti i requisiti minimi del tirocinio. È esattamente questo che cerchiamo di fare sin dal colloquio. Tuttavia, questo è solo l'inizio della nostra storia. Il tirocinante è sempre considerato un potenziale candidato per un'assunzione. L'obiettivo minimo per il manager è riconoscere, fin dall'inizio, una persona che, dopo tre mesi, sarà meritevole di essere raccomandata ad altri reparti. L'obiettivo massimo è tenerlo nello stesso team, facendolo assumere. Teniamo presente che uno studente del secondo o terzo anno, anche se è diventato un tirocinante, avrà bisogno di proseguire gli studi universitari all'inizio dell'anno accademico.

Sergej:

Prima di tutto, per noi gli stagisti rappresentano un potenziale umano. Cerchiamo di far crescere le persone all'interno di Yandex, affinché siano perfettamente adatte alle nostre necessità. Offriamo loro tutto, dalla cultura della comunicazione e del lavoro di squadra a conoscenze enciclopediche su tutti i nostri sistemi.

Ihnat:

Quando prendiamo uno stagista, lo valutiamo immediatamente per inserirlo nel nostro team. E di solito, l'unico ostacolo è la mancanza di posizioni disponibili. Cerchiamo di reclutare ragazzi abbastanza giovani come stagisti. Se una persona ha cinque anni di esperienza nello sviluppo e entra in Yandex come stagista, purtroppo, per noi questo significa che, anche se è un talentuoso, se cerca lavoro in Yandex con cinque anni di esperienza, non sarà in grado di crescere fino al livello di sviluppatore senior. Di solito, si tratta di velocità: una crescita lenta in passato porterà a una crescita lenta anche qui da noi. Sì, a volte si capisce solo dopo tre mesi che la persona non ce la fa, ma questo accade piuttosto raramente. In più della metà dei casi siamo disposti ad assumere le persone stabilmente. Nella mia esperienza, non è mai successo che una persona abbia svolto uno stage con successo ma non sia riuscita a superare i colloqui per una posizione stabile.

Misha:

A tutti i tirocinanti di successo, offriamo l'opportunità di rimanere in azienda. Dopo il tirocinio, di solito assumiamo più della metà a tempo pieno. Con i tirocini estivi è più difficile, perché spesso riceviamo studenti, ad esempio, del terzo anno che faticano a conciliare lavoro e studio.

Dima:

Supponiamo che il tirocinante gestisca eccellentemente i compiti e abbia molte prospettive per crescere come sviluppatore — anche se attualmente ha poca esperienza. E supponiamo che non ci siano offerte per un contratto a tempo indeterminato. Allora è semplice: devo andare dal mio supervisore e dirgli — ecco una persona fantastica, dobbiamo fare di tutto per trattenerla, proponiamole qualcosa, troviamo un modo per integrarla.

Storie sui tirocinanti

Denis:

Una ragazza che ha iniziato un tirocinio con noi nel 2017 veniva da Perm. È a circa 400 chilometri a ovest di Ekaterinburg. E ogni settimana veniva da noi in treno per la Scuola di Sviluppo Mobile. Arrivava di giorno, studiava di sera e tornava indietro la sera tardi. Apprezzando tale impegno, l'abbiamo invitata a lavorare con noi, e si è dimostrata una scelta vincente.

Ihnat:

Qualche anno fa abbiamo partecipato a un programma di scambio per tirocinanti. Lavorare con ragazzi stranieri è stato interessante. Tuttavia, i tirocinanti che provenivano da lì non erano più competenti rispetto a quelli di istituti come il SHAD o il FKN. Potrebbe sembrare strano, dato che l'EPFL si trova tra le prime 20 università d'Europa. In quel momento, come un selezionatore non molto esperto, avevo questa aspettativa: incredibile, stiamo intervistando persone dell'EPFL, saranno super competenti. Ma le persone che hanno ricevuto una formazione di base nel coding da noi — inclusi atenei regionali di rilievo — risultano essere all'altezza.

Oppure un'altra storia. Attualmente ho un ragazzo nel mio team, è molto giovane, circa 20 anni. Lavora a San Pietroburgo, è venuto per uno stage. È davvero in gamba. Come al solito, dai compiti a qualcuno e lui li risolve, e dopo un mese viene e dice: ho risolto, guardo, e sembra che la vostra architettura sia mal costruita. Facciamo una revisione. Il codice diventerà più semplice e chiaro. Certo, l'ho dissuaso: il carico di lavoro è grande, non c'è vantaggio per gli utenti, ma l'idea suona assolutamente ragionevole. La persona ha compreso un processo multithreading complesso e ha proposto miglioramenti — forse anche non tempestivi, rifattorizzare per il gusto di rifattorizzare. Ma quando si vorrà rendere questo codice più complesso, si potrà comunque procedere con quella rifattorizzazione. In effetti sono passati diversi mesi e ci siamo dedicati a questo compito. L'ho accolto con piacere nel team. Non siamo tutti geni. È possibile arrivare, capire qualcosa e farci notare i nostri problemi. Questo è molto apprezzato.

Misha:

Abbiamo stagisti così perfetti. Nonostante la mancanza di esperienza, comprendono il compito non solo a livello tecnico, ma anche globale. Propongono miglioramenti fondamentali. Hanno la capacità di tradurre le sfide del mondo reale in compiti tecnici senza perdere il significato. Riflettono sull'obiettivo finale, se è il momento giusto per approfondire nei dettagli oppure se è possibile modificare completamente l'approccio al compito o addirittura la formulazione del compito stesso. Questo significa che hanno il potenziale per salire a livelli superiori. Per fare questo percorso, devono semplicemente sviluppare alcune competenze e strumenti interni. Inoltre, occorre avviare alcuni progetti di successo.

Stage in IT: la visione di un manager

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster