
A inscrição para na Yandex continua. Ele abrange cinco áreas: backend, ML, desenvolvimento mobile, frontend e análise. Neste blog, e em outros blogs no Habr e além, pode-se encontrar bastante informação sobre como o estágio acontece. Mas muito desse processo ainda é um mistério para aqueles que não trabalham na empresa. E se olharmos do ponto de vista dos gestores de desenvolvimento, surgem ainda mais questões. Como conduzir o estágio corretamente, como maximizar a utilidade mútua com o estagiário, como conseguir conhecê-lo bem em três meses e ensiná-lo tudo o que é necessário para dar continuidade ao trabalho?
Preparamos este artigo em cinco pessoas. Vamos nos apresentar: Ihnat Kolesnichenko do serviço de tecnologias de computação distribuída, Misha Levin do serviço de inteligência de máquinas do Marketplace, Denis Malykh do serviço de desenvolvimento de aplicativos, Serёzha Berezhnoy do departamento de interfaces de pesquisa e Dima Cherkasov do grupo de desenvolvimento anti-fraude. Cada um de nós representa sua área de estágio. Nós todos somos gestores, precisamos de estagiários e temos alguma experiência trabalhando com eles. Vamos compartilhar um pouco dessa experiência.
Entrevista antes do estágio
Os candidatos enfrentarão várias entrevistas técnicas. O sucesso na entrevista depende menos de soft skills (habilidade de se comunicar efetivamente) e mais de hard skills (habilidades em matemática e programação). No entanto, os gestores avaliam ambos.
Ihnat:
Mesmo que a pessoa seja incrível, mas absolutamente não comunicativa - ela não conseguirá aplicar todas as suas habilidades. Prestamos atenção a isso, mas isso não é motivo para não aceitar alguém para o estágio. Em três meses, tudo pode mudar, além disso, sua primeira impressão pode estar errada. E se tudo estiver certo - será necessário explicar à pessoa e buscar outras equipes para ela. Para os estagiários, a comunicabilidade definitivamente não é um fator chave. Afinal, as habilidades profissionais são muito mais importantes.
Denis:
Eu gosto de pessoas que contam histórias — no bom sentido. A pessoa que pode compartilhar como ela e a equipe lidaram heroicamente com algum problema é sempre interessante. Começo a fazer perguntas adicionais quando tal história surge. Mas isso raramente acontece se pedirmos simplesmente para "contar sobre algo interessante em seus projetos".
Um candidato uma vez pronunciou uma frase maravilhosa que eu até anotei: "Evitei com sucesso a resolução de tarefas tediosas".

Como o tempo para conversa é limitado, o entrevistador tenta obter informações úteis sobre o candidato a cada minuto da reunião. É ótimo se o estagiário pensou com antecedência sobre quais detalhes de sua experiência (que não estão no currículo) ele poderia compartilhar. Deve ser um relato curto e direto ao ponto.
Denis:
Presto atenção se a pessoa diz que experimentou várias linguagens e abordagens. Pessoas com uma visão mais ampla tendem a inventar soluções mais elegantes em um ambiente de batalha. Mas isso é um benefício ambíguo. É possível aprender superficialmente e não realmente dominar nada.
O tempo para as histórias descritas pelo Denis geralmente só fica disponível na entrevista final. Até lá, é preciso demonstrar aqueles conhecimentos fundamentais e práticos que servirão de base para o trabalho futuro. E, claro, será necessário escrever código em um quadro ou em um pedaço de papel.
Misha:
Verificamos o conhecimento de teoria das probabilidades e estatística matemática. Observamos se a pessoa tem experiência com métricas, com algoritmos de aprendizado de máquina, com a configuração de seus parâmetros, com o re-treinamento etc. Esperamos que a pessoa consiga codificar a um nível suficiente para ser um analista.
Denis:
Aqueles que vêm para a entrevista geralmente conhecem as linguagens: temos uma boa escola de linguagens básicas em Yekaterinburg, boas instituições. Mas, para ser honesto, um candidato a estágio com boas habilidades técnicas é um caso raro, pelo menos na nossa vizinhança epsilon. Um exemplo é o Swift. Trabalhar com strings nele é bastante complexo, e há poucas pessoas que podem lidar com isso de cabeça. Esses se destacam imediatamente. Costumo dar uma tarefa relacionada ao processamento de strings em entrevistas. E, em todo esse tempo, houve apenas uma pessoa que conseguiu escrever um código Swift para essa tarefa imediatamente em uma folha de papel. Depois disso, andei contando para todos que alguém finalmente conseguiu resolver essa tarefa no Swift em uma folha.
Verificação de algoritmos na entrevista
Este é um assunto à parte, pois os candidatos ainda costumam questionar — por que sempre avaliamos o conhecimento de algoritmos e estruturas de dados? Mesmo futuros desenvolvedores móveis e front-enders passam por essa verificação.
Misha:
Na entrevista, sempre fazemos alguma tarefa algorítmica. O candidato precisa pensar em como implementá-la em Python, preferencialmente sem erros. É necessário entender como verificar seu programa e corrigi-lo sozinho.

A experiência em algoritmos será útil por três razões. Primeiro, ela será necessária em tarefas algorítmicas — que não ocorrem com frequência, mas ainda assim existem. Em segundo lugar, o desenvolvedor poderá resolver tarefas relacionadas a algoritmos de forma mais eficiente, mesmo que não exijam entender os próprios algoritmos (e há muitas assim). Em terceiro lugar, se você não aprendeu algoritmos na faculdade, mas mesmo assim consegue trabalhar com eles, isso te caracteriza como uma pessoa curiosa e aumentará sua credibilidade aos olhos do entrevistador.
Denis:
A maior parte do desenvolvimento móvel é sobre 'transferir JSON'. Mas de seis em seis meses aparecem casos em que algoritmos são necessários. Atualmente, estou criando mapas bonitos para o Yandex.Weather. E eu precisei implementar um algoritmo de suavização, o algoritmo de Sutherland-Hodgman e o algoritmo de Martinez em uma semana. Se a pessoa não soubesse o que é um hashmap ou uma fila de prioridade, ela demoraria muito com isso e ficaria em dúvida se conseguiria resolver sozinha sem ajuda externa.
Os algoritmos são a base do desenvolvimento. Eles são o que ajuda um desenvolvedor a ser um desenvolvedor. Não importa com o que você está lidando. Eles são necessários mesmo em projetos simples, onde o trabalho principal consiste em 'transferir JSON'. Mesmo que você não escreva os algoritmos, mas use implicitamente algumas estruturas de dados, é melhor entendê-las. Caso contrário, você terá aplicativos que funcionam lentamente ou de forma incorreta.
Existem programadores que entraram no desenvolvimento de maneira acadêmica: ingressaram na universidade, estudaram honestamente por cinco anos e obtiveram um diploma. Eles conhecem algoritmos porque foram ensinados. E o simples conhecimento de algoritmos não caracteriza a visão de mundo da pessoa; é necessário verificar essa visão de mundo de outra forma.
Mas há os autodidatas, dos quais eu me incluo. Sim, formalmente, eu tenho uma formação em TI, um diploma de engenheiro de programação. Mas autodidatas aprenderam a programar 'apesar de'. Eles não tinham um programa universitário. Normalmente, não estão familiarizados com algoritmos – porque nunca enfrentaram a necessidade de estudá-los. E quando uma pessoa assim compreende algoritmos, isso significa que ela dedicou tempo e se aprofundou neles. Depois de terminar a universidade, percebi que tinha lacunas em algoritmos fundamentais – o fato é que a especialização era aplicada. Eu fui e estudei cursos online da Universidade de Princeton, bem conhecida por Robert Sedgewick. Entendi, fiz todos os trabalhos de casa. E quando uma pessoa em uma entrevista conta uma história parecida, eu imediatamente me interesso, surge o desejo de trabalhar com ela ou pelo menos continuar a conversa.

Ihnat:
Quando você entrevista um estagiário, de certa forma, espera até mais do que de um desenvolvedor experiente. Trata-se da habilidade de resolver problemas algorítmicos, de escrever rapidamente algum código correto. O candidato à estagiário ainda está na universidade. Literalmente um ano atrás, ele ouviu tudo sobre algoritmos em detalhes. Espera-se que ele consiga reproduzi-los. Se a pessoa é razoável e assistiu às aulas atentamente, ela simplesmente saberá tudo, acessando da memória.
Quais problemas um estagiário resolve
Normalmente, o programa de estágio pode ser planejado e discutido nas entrevistas finais. No início do trabalho, o estagiário pode receber tarefas de treinamento, cujos resultados não serão utilizados na produção. Além disso, a probabilidade de receber tais tarefas é baixa. Frequentemente, projetos são fornecidos a partir do backlog, ou seja, reconhecidos como dignos de atenção, mas não prioritários e 'separáveis' — para que a implementação deles não dependa de outros componentes. Os líderes se esforçam para distribuí-los de forma que o estagiário conheça diferentes partes do serviço, trabalhando em um ambiente junto com outros membros da equipe.
Ihnat:
Essas são tarefas extremamente úteis. Embora possam não aumentar a utilização do cluster em 10%, não economizem um milhão de dólares para a empresa, elas farão centenas de pessoas felizes. Por exemplo, atualmente temos um estagiário que está lidando com um cliente para iniciar operações em nossos clusters. Antes do início, a operação deve carregar alguns dados no cluster. Normalmente, isso leva de 20 a 40 segundos, e antes acontecia em silêncio: você a iniciava no console e ficava olhando para a tela preta. O estagiário veio e, em duas semanas, criou um recurso: agora é possível ver como os arquivos estão sendo carregados e o que está acontecendo. A tarefa, por um lado, não é complexa de descrever, mas, por outro lado, há muito para explorar, quais bibliotecas verificar. O mais gratificante é que você fez isso, passou uma semana, e já está nos clusters, com as pessoas usando. Você escreve uma postagem na rede interna — e as pessoas agradecem.

Misha:
Os estagiários preparam modelos, coletam dados para eles, criam métricas e realizam experimentos. Gradualmente, começamos a dar mais liberdade e responsabilidade — verificamos se ele está lidando bem. Se sim, ele avança para o próximo nível. Não presumimos que, quando o estagiário chega, ele já sabe disso tudo. O supervisor o ajuda a entender, fornece um link para um recurso interno ou um curso online.
Se o estagiário se destaca, pode receber algo prioritário, importante para o departamento ou outros serviços.
Dima:
O nosso estagiário está atualmente trabalhando em melhorias intensivas de anti-fraude. Este é um sistema que combate diversos tipos de abuso e fraudes nos serviços do Yandex. A princípio, pensávamos em atribuir tarefas que não fossem muito complicadas e que não fossem essenciais para a produção. Tentamos sempre planejar as tarefas do estagiário com antecedência, mas aqui vimos que ele 'brilha', resolvendo as tarefas de forma rápida e eficaz. No final, começamos a confiar a ele o lançamento do anti-fraude para novos serviços.
Além disso, existe uma pequena chance de receber uma tarefa que os colegas não abordaram antes devido ao seu volume.
Dima:
Há um sistema antigo e um novo, ainda em desenvolvimento. Precisamos realizar a migração de um para o outro. A longo prazo, este é um projeto importante, embora com alta incerteza: requer muita comunicação e leitura de código legado confuso. Na última entrevista, dissemos honestamente ao estagiário que a tarefa é desafiadora. Ele respondeu que estava pronto, juntou-se à nossa equipe e teve sucesso. Descobrimos que ele possui qualidades não apenas de desenvolvedor, mas também de gerente. Ele estava disposto a ir atrás, a perguntar, a fazer follow-up.
Mentoria sobre o estagiário
O estagiário precisa de um mentor para se integrar aos processos. Esta é uma pessoa que está ciente não apenas de suas próprias tarefas, mas também das do estagiário. Com o mentor, há uma comunicação regular, e ele sempre pode ser consultado em busca de conselhos. O mentor pode ser o líder do grupo (se for um grupo pequeno) ou alguém da equipe, um membro constante.
Ihnat:
Eu tento pelo menos a cada dois dias me aproximar, perguntar como o estagiário está indo. Se vejo que ele está atolado, tentarei ajudá-lo, perguntar qual é o problema e desenterrar a questão junto com ele. É claro que isso consome minha energia e torna o trabalho do estagiário menos eficiente no geral — afinal, também estou gastando meu tempo. Mas isso permite que ele não se afunde, consiga resultados. E, de qualquer forma, é mais rápido do que se eu estivesse fazendo isso sozinho. Para mim, a tarefa exigiria cerca de 5 horas. O estagiário levaria 5 dias. E sim, eu levaria 2 horas durante esses 5 dias para me comunicar com o estagiário e ajudar. Mas pelo menos 3 horas eu economizaria, e o estagiário ficaria feliz por ter recebido dicas e ajuda. No geral, é importante se comunicar de perto, observar o que a pessoa está fazendo, não perder o contato.

Sérgio:
O estagiário está sempre em contato com seu mentor e se comunica com ele várias vezes ao dia. O mentor revisa o código, pratica programação em pares com o estagiário e ajuda quando surgem problemas. Esse é o método que usamos, uma combinação de assistência do mentor com tarefas reais, para treinar desenvolvedores front-end.
Dima:
Para garantir que o estagiário não se sinta abandonado, discutimos antes da contratação quem será seu mentor. Isso também é uma grande oportunidade para o próprio mentor: uma preparação para o papel de líder de equipe, testando sua capacidade de controlar tanto sua própria tarefa quanto a do estagiário. Há reuniões regulares, às quais às vezes eu mesmo compareço, para estar a par das coisas. Mas é o mentor quem se comunica regularmente com o estagiário. Inicialmente, ele investe muito tempo, mas isso compensa.
No entanto, ter um mentor não significa que todas as questões que surgem sejam resolvidas por ele.
Misha:
Aqui, é comum que as pessoas que encontram um problema peçam conselhos a seus vizinhos ou colegas e rapidamente encontrem ajuda. Quanto mais rápido alguém se desenvolve, mais frequentemente precisa ir aos colegas para aprender algo novo. É até útil conhecer as tarefas dos outros para inventar novas tarefas. Quando o estagiário consegue negociar, entender o que é importante para a outra parte e chegar a um resultado em equipe, ele cresce muito mais rápido do que aquele que depende do líder para fazer isso.
Sérgio:
Há documentação, mas a maior parte das informações está dispersa. Se você absorver isso no início da sua carreira, isso é uma vantagem extra, e podemos focar a pessoa no que realmente precisa ser estudado.
O estagiário ideal é aquele que estagia por alguns meses, se torna um desenvolvedor júnior, depois um desenvolvedor pleno, e assim por diante. Para isso, é necessário ter o arquétipo do aprendiz, que não hesita em perguntar se algo não está claro, mas que ao mesmo tempo é capaz de trabalhar de forma autônoma. Se lhe disserem que pode ler sobre o assunto em determinado local, ele irá, lerá e realmente voltará com novos conhecimentos. Ele pode cometer erros, mas não deve errar mais de uma, no máximo duas vezes no mesmo lugar. O estagiário ideal deve se desenvolver, absorver tudo como uma esponja, aprender e crescer. Aqueles que ficam sentados, tentando resolver tudo sozinhos, se demoram e não fazem perguntas, provavelmente não vão se adequar.
Fim do estágio
Antes de começar a trabalhar, assinamos um contrato temporário com cada estagiário. Naturalmente, o estágio é remunerado, formalizado de acordo com a legislação trabalhista da Rússia, e o estagiário tem os mesmos benefícios que qualquer outro funcionário da Yandex. Após três meses, o programa se encerra — muitos estagiários são então efetivados (com contrato por tempo indeterminado).

Por um lado, é importante para o líder que o desenvolvedor cumpra seu mínimo de estágio. É para isso que o estagiário é guiado desde a entrevista. No entanto, isso é apenas o começo da história. Para nós, o estagiário sempre é um candidato potencial para a equipe efetiva. O programa mínimo para o líder é perceber desde o início uma pessoa que, após três meses, não será uma vergonha recomendar para outros departamentos. O programa máximo é mantê-lo na mesma equipe, efetivando-o. Levando em consideração que um estudante do segundo ou terceiro ano — mesmo que tenha se tornado um estagiário — precisará continuar seus estudos na universidade com a chegada do novo ano letivo.
Sérgio:
Em primeiro lugar, os estagiários para nós são um potencial de mão de obra. Tentamos desenvolver pessoas dentro da Yandex, para que se encaixem perfeitamente nas nossas tarefas. Oferecemos tudo, desde a cultura de comunicação e interação em equipes até conhecimentos enciclopédicos sobre todos os nossos sistemas.
Ihnat:
Ao contratar estagiários, avaliamos imediatamente se eles se encaixam na nossa equipe. E, como regra, o único obstáculo é a falta de vagas. Buscamos estagiários mais jovens. Se uma pessoa tem cinco anos de experiência em desenvolvimento, mas entra na Yandex como estagiário, isso significa que, embora tenha um bom histórico, se ele está se juntando à Yandex com cinco anos de experiência, isso indica que não conseguirá crescer até se tornar um desenvolvedor sênior. Normalmente, isso está relacionado à velocidade: um crescimento lento no passado geralmente indica um crescimento lento conosco. Sim, às vezes a percepção de que a pessoa não está indo bem só surge após três meses. Mas isso é relativamente raro. Em mais da metade dos casos, estamos dispostos a efetivar as pessoas. Não me lembro de ter visto alguém que se desempenhou bem como estagiário, mas não conseguiu passar nas entrevistas para uma posição permanente.
Misha:
Oferecemos a todos os estagiários bem-sucedidos a oportunidade de ficar na empresa. Após o estágio, geralmente contratamos mais da metade deles em tempo integral. A situação é mais complicada com o estágio de verão, pois muitas vezes recebemos estudantes, por exemplo, do terceiro ano, e eles têm dificuldades em conciliar trabalho e estudos.
Dima:
Suponha que um estagiário se saia muito bem nas tarefas e tenha grande potencial para se tornar um bom desenvolvedor — mesmo que atualmente não tenha experiência suficiente. E suponha que não haja vaga para contratação efetiva. Então, é simples: preciso falar com meu chefe e dizer que esta é uma pessoa incrível, precisamos fazer de tudo para mantê-la, vamos oferecer algo a ela, encontrar uma posição para ela.
Histórias de estagiários
Denis:
A moça que começou a estagiar conosco em 2017 era de Perm. Isso fica a cerca de 400 quilômetros a oeste de Ekaterinburg. E ela vinha a cada semana de Perm de trem para a Escola de Desenvolvimento Móvel. Chegava durante o dia, estudava à noite e voltava para casa tarde da noite. Reconhecendo esse empenho, a convidamos para trabalhar, e isso se provou uma boa decisão.
Ihnat:
Há alguns anos, participamos de um programa de intercâmbio de estagiários. Trabalhar com pessoas estrangeiras foi interessante. Mas os estagiários de lá não são mais capacitados do que, por exemplo, os de instituições como a SHAd ou FKNa. Aparentemente, a EPFL está entre as 20 melhores universidades da Europa. Naquele momento — como um entrevistador não muito experiente — eu tinha essa expectativa: inacreditável, estamos entrevistando pessoas da EPFL, elas devem ser incríveis. Mas as pessoas que receberam formação básica em programação conosco — incluindo nas principais universidades regionais — acabam sendo bastante competentes.
Ou outra história. Agora, tenho um rapaz na minha equipe, bem jovem, com cerca de 20 anos. Ele trabalha em São Petersburgo e veio fazer um estágio. Ele é muito competente. Você, como sempre, dá tarefas para a pessoa, ela as resolve e, após um mês, diz: eu resolvi, olho e parece que a sua arquitetura está mal construída. Vamos refazer. O código ficaria mais simples, mais claro. Eu, claro, o desencorajei: o volume de trabalho é grande, não há benefício para os usuários, mas a ideia soa absolutamente razoável. Ele compreendeu um processo complexo de multithreading e sugeriu melhorias — talvez intempestivas, refatoração por refatoração. Mas assim que for necessário complicar esse código, poderemos fazer essa refatoração. De fato, passaram-se alguns meses e começamos a trabalhar nessa tarefa. Fiquei feliz em contratá-lo. Todos nós não somos gênios. É possível chegar, entender algo e nos apontar nossos problemas. Isso é valorizado.
Misha:
Às vezes temos estagiários ideais. Apesar da falta de experiência, eles veem a tarefa não apenas em um nível técnico, mas também em um nível global. Propõem melhorias fundamentais. Eles entendem como traduzir tarefas do mundo real para o técnico, sem perder o sentido. Eles se perguntam qual é o objetivo final, se vale a pena se aprofundar nos detalhes agora ou se pode mudar completamente a abordagem da tarefa ou até mesmo a formulação da tarefa. Isso significa que eles têm potencial para se elevar a vários níveis acima. Para percorrer esse caminho, eles apenas precisam aprimorar algumas habilidades e ferramentas internas. Além disso, lançar alguns projetos bem-sucedidos.

Fonte: habr.com
