Não sou recrutador de grandes empresas, mas tenho muita experiência em pequenas empresas e um pouco de bom senso.
Em 2013, executei uma campanha de contratação de muito sucesso no AboutEcho.com, que resultou na contratação de nove engenheiros seniores. Meus leitores que falam russo podem ler sobre isso aqui .
Tudo isso me dá confiança para criticar os métodos que os gigantes da Internet usam para contratar engenheiros até hoje.
Não busque a melhor solução
Quando você chega para uma entrevista, o entrevistador apresenta um problema para você e espera uma solução em 0–2 minutos. Se você dedicar mais tempo, eles ficarão realmente entusiasmados e pedirão que digam algo.
Isso é compreensível - afinal, eles têm apenas 45 minutos e querem discutir muitas coisas com você.
Não consigo entender como você é julgado pela qualidade da solução que surgiu em dois minutos. Porque não é assim que a criatividade humana funciona. É fácil ter muitas ideias, mas é estranho esperar que o melhor esteja sempre em primeiro lugar. Mesmo os gênios não podem gerar as melhores ideias do mundo em um curto espaço de tempo.
Criatividade é a capacidade de avaliar e filtrar o fluxo de ideias que você apresenta. Se você está realmente interessado nisso, por que não pedir a outra pessoa para comparar e avaliar várias ideias? Verifique se uma pessoa pode avaliar as propriedades da solução proposta? Se ele vê claramente os prós e os contras?
E se você pedir para encontrar a melhor solução em dois minutos, então você está testando sua sorte, nada mais. Você está no negócio de contratar funcionários de sucesso? Ou capaz?
Não pergunte quebra-cabeças
Como posso verificar se uma lista vinculada possui um loop? Uma caixa N-dimensional se encaixa em outra caixa N-dimensional? Você pode trocar duas variáveis sem a terceira? Como encontrar a menor distância entre dois navios em movimento? Encontrar todas as permutações de N elementos executando apenas N-1 permutações?
É divertido conversar sobre esses quebra-cabeças e suas soluções podem ser muito úteis. Quando criança, adorava que muitos deles lessem Matemática Diversão e Ensaios . Não me interpretem mal, eles são hilários.
No entanto, por mais engraçados que sejam, são apenas anedotas. A propriedade de um quebra-cabeça é que você sabe a resposta para ele ou não. Isso não diz mais nada. Não tem nada a ver com desempenho futuro, habilidade, habilidade ou qualquer outra coisa. Saber uma resposta específica não significa que você tenha um aparato para resolver problemas reais de maneira geral e previsível. A única coisa que isso indica é que a pessoa estava nessa situação e alguém compartilhou uma solução com ela. Nem mais nem menos. Apenas pare já.
Como ser salvo antes que a vela queime a corda?
Esteja aberto a alternativas
Isso é um tanto esperado, mas as grandes empresas ainda parecem cair nessa. Se o entrevistado oferece uma solução alternativa, você, como entrevistador, tem a chance de aprender algo. Essa também é uma boa chance para uma discussão mais profunda se a solução proposta se revelar impossível ou ruim.
No entanto, fui despedido por uma vez, propondo uma solução alternativa da mesma complexidade (e sobrecarregado com uma palestra sobre "a única abordagem verdadeira para este problema"), e em outra ocasião levei estritamente a uma solução específica. No último caso, o entrevistador realmente queria ignorar todas as minhas preocupações e discutir apenas o que ele via como uma solução para o problema, e depois deixou uma crítica "nada impressionante" sobre mim.
Ninguém sabe tudo. Esta aberto. Ouvir. Meditar. Sim, mesmo que você esteja entrevistando alguém.
Seja tolerante com as falhas
Erros únicos são amplamente reconhecidos como um dos problemas mais difíceis em CS por uma razão - todos os cometem. Os erros fazem parte da vida do programador, não algo do qual se livrar. Um bom programador sabe apenas o que fazer a respeito. A qualidade de um programador NÃO é determinada pelo número de erros que ele comete.
Agora, se você selecionar apenas pessoas que não cometeram erros durante a entrevista, magicamente não terá uma equipe de programadores que sempre escrevem código perfeito. Você simplesmente não sabe como eles se comportarão quando inevitavelmente cometerem erros.
Portanto, os erros são realmente bons, porque você aprenderá como essa pessoa os corrige. Não julgue os erros, avalie como o interlocutor os trata:
- código simples,
- dividir para reinar,
- auto-testes,
- invariantes,
- demonstração,
- compilando e executando,
- testando.
Oh, desculpe pelos dois últimos. Esqueci que você não os deixa rodar seus programas. Bem, o que você esperava então?
Deixe-me ver!
Sério, o que é escrever um programa em um quadro branco?
Quer dizer, estou feliz em discutir algoritmos - já que discutir coisas abstratas é mais eficiente.
Mas escrever programas para programadores reais em um notebook? Sem nem mesmo executá-los? Qual é o ponto? Obter o primeiro rascunho do código é apenas um décimo de todo o processo, seguido pela compilação, validação, ajuste, teste, validação e assim por diante. Essas são partes essenciais do fluxo de trabalho de qualquer programador. É útil olhar para o código apenas quando ele já tiver passado por tudo isso, e não antes.
É como pedir ao artista para desenhar um cavalo e, em seguida, interrompê-lo no meio do primeiro esboço, quando você vê as quatro linhas verticais das pernas e as avalia. Quanto você aprende sobre ela?
Explore mais a fundo
Cinco entrevistas curtas? Ou dois longos?
Com cinco, você obtém cinco opiniões independentes, o que é melhor do que duas. Mas quão profundo você consegue mergulhar em 45 minutos? A prática mostra que é suficiente escrever 20-30 linhas de código e fazer algumas perguntas realmente simples (qual é a dificuldade? Como testar?).
O próximo entrevistador simplesmente repete o mesmo processo até o anterior. Isso não vai durar muito. Não por muito tempo.
Por que não torná-los dois e torná-los realmente sólidos? Por exemplo, um antes do almoço e outro depois? Três horas também não é muito, mas pelo menos você tem a chance de ver como uma pessoa testa o código, como o altera, como trabalha com os requisitos - tudo dentro do contexto já estabelecido, sem redefinir e começar do zero a cada 45 minutos ...
Com tanto tempo, você pode até mesmo pedir a ele para escrever o código como se fosse parte de um sistema, não apenas um problema algorítmico abstrato no vácuo, e aprender mais algumas coisas sobre suas características reais.
E se você quiser mais opiniões? Coloque alguns entrevistadores na sala para que eles discutam mais tarde.
Explore o fundo
Tenho quatorze anos de experiência (até o momento, 2019). Eu ficaria feliz em falar sobre programação funcional, sistemas distribuídos, consenso, replicação, coautoria, CRDT, arquiteturas paralelas, estruturas de interface de usuário, processos de equipe, design de produto, experiência do usuário. Tenho experiência prática e de pesquisa em todas essas áreas. Todos eles são de interesse direto para mais ou menos qualquer gigante da Internet que entrevistei.
Eu já fui questionado sobre isso? Não.
Eu recebo "Imagine que você tem uma função que recebe uma lista ..." cinco vezes consecutivas. As cinco tarefas de nível escolar devem lhe dar uma ideia adequada de quê? Eu li de perto Cormen et al.? Para ser honesto, eles também raramente são questionados sobre eles.
Em vez disso, personalize sua entrevista com base na experiência do candidato. Fale sobre o que ele faz bem. Você terá a oportunidade de fazer perguntas profundas e aprender mais sobre o nível de experiência e os benefícios que isso trará para sua empresa.
Facilite o processo
Direção errada? Ingressos atrasados? O formulário de inscrição requer que o Adobe Reader original seja instalado especificamente? Um ultrabook barato com um layout de teclado desconhecido e um editor web ruim, sem nenhum atalho que fica lento mesmo em uma máquina local? Desculpe, estou no escritório da empresa de TI mais capacitada do mundo, certo?
No meu caso, um recrutador estava dando cinco entrevistas por dia. Cinco pessoas todos os dias. Multiplicado pelo número de recrutadores nesta empresa. Imagine que todos esses candidatos estão ligeiramente frustrados com o processo. Todos os dias. Ano após ano.
Você pode pensar que não importa. Depende. Teve um episódio do programa de TV "Louis" onde o nome do quadrinho estava escrito na porta. Portanto, ele argumentou: sim, esse erro é fácil de cometer, mas também é fácil de consertar. Não importa, é só por um dia, se você estiver até um pouco preocupado, faça certo.
Sim, acredito que qualquer pessoa pode fazer melhor.
Finalmente
Se você contratar engenheiros de software, os profissionais de grandes empresas não serão seus amigos. Bom senso, justiça, tolerância, interesse real e mente aberta são amigos.
Boa contratação!