Acabei de conseguir um emprego de desenvolvedor no Facebook. Foi assim que me preparei para minhas entrevistas.

Acabei de terminar sete entrevistas no local em empresas de tecnologia do Vale do Silício. Por fim, aceitei uma oferta para um emprego de engenharia de software do Facebook.

Veja como me preparei para essas entrevistas e o que aprendi ao longo do caminho.

Minha jornada de vários anos em direção ao Vale do Silício

Quando eu estava estudando Ciência da Computação na minha universidade na Austrália, sempre imaginei meu futuro como engenheiro de software no Vale do Silício.

Adorei a ideia de estar no centro de todas as inovações da indústria de tecnologia – bem como de seus erros. Esse objetivo me manteve motivado. Isso me manteve focado.

Deixei meu p ost como engenheiro líder de iOS em uma empresa incrível em Melbourne e voltei para a minha cidade natal, Perth, a fim de estudar. Lá eu me prepararia para o processo de entrevista à minha frente no Vale do Silício. Eu sabia que seria incrivelmente difícil e árduo.

Se você mencionar o processo de entrevista técnica para uma sala de engenheiros de software, muitos se manifestarão contra as práticas comuns de entrevista. Muito do argumento vem do raciocínio de que resolver algoritmos em um quadro branco não representa realmente, ou se traduz nas tarefas do dia a dia de um engenheiro de software.

Por causa deste artigo, não irei entrar nessa conversa. Em vez disso, explorarei esses diferentes tipos de práticas de entrevista da perspectiva de um candidato, também vou me concentrar no que aprendi com o processo.

Entrevistar é uma habilidade

Durante a minha preparação, sempre soube que entrevistar seria um desafio. Mas, honestamente, não tinha ideia de como seria difícil até que estava mergulhado na minha primeira entrevista.

Antes das entrevistas, usei serviços pagos e gratuitos, que simulavam entrevistas de codificação e quadro de comunicações por telefone com pessoas com experiência no setor para entrevistar candidatos. Essas entrevistas práticas foram essenciais para me preparar para a pressão envolvida. Mas, como percebi mais tarde, eles representavam apenas uma fração do que consiste uma entrevista real.

Eu não aconselho a entrevistar no emprego dos seus sonhos sem ter algumas entrevistas simuladas ou reais em seu currículo. O nervosismo pode ser incrivelmente opressor e só pode ser atenuado com a prática.

Como acontece com muitas outras coisas na vida, a prática aumentará sua confiança.

Os diferentes tipos de entrevista que encontrei

Se você se preparar e se apresentar bem nas telas preliminares do telefone, terá a oportunidade de ir ao local e conduzir dias inteiros de entrevistas. Essas entrevistas geralmente duram de quatro a seis horas, dependendo da empresa para a qual você está entrevistando.

Durante minha viagem ao Vale do Silício, consegui alinhar sete entrevistas no local no total. Isso me deu uma perspectiva única do cenário atual para entrevistas.

Normalmente, um local cobre três assuntos principais: algoritmo, projeto de arquitetura e comportamento, que foi o que estudei e me preparei. No entanto, existem algumas empresas que parecem estar contrariando essa tendência e expandindo suas entrevistas para cobrir habilidades mais práticas.

Vou revisar rapidamente cada um dos tópicos que encontrei.

Entrevistas de algoritmo

O tipo de entrevista mais comum que você encontrará. O entrevistador pedirá que você resolva um problema em um quadro branco que avaliará seu conhecimento sobre estruturas de dados, algoritmos de classificação, recursão, análise de complexidade de tempo / espaço, bem como reconhecimento de padrões e casos extremos. Nesta entrevista, você normalmente vai chegar a uma solução de força bruta e, em seguida, tentar melhorar essa solução e discutir as compensações, se houver, com as diferentes soluções que você propõe.

Este foi o pão com manteiga da minha preparação, todos os dias durante seis semanas, resolvi algoritmos em um quadro branco barato, analisei sua complexidade de tempo / espaço e também tentei realmente entender o que acontece em cada linha de código .

Pessoalmente, gosto muito de algoritmos de quadro branco porque não tenho necessariamente que me preocupar em escrever sintaxe compilável (na maioria das vezes), o que me permite focar exclusivamente no problema em questão. Outras pessoas podem não gostar do quadro branco, mas para elas, eu diria para praticá-lo de forma consistente e isso pode mudar de ideia.

Entrevistas de projeto de arquitetura

Esta é uma entrevista interessante e que subestimei profundamente. O entrevistador pedirá que você projete um sistema (em um quadro branco, é claro), como um sistema de bilheteria para estacionamento, chat messenger, feed do Twitter, entre outros sistemas comuns.

Você está sendo avaliado em como pega um conceito amplo e projeta um sistema que atende a todos os requisitos e restrições. Mas cabe ao candidato fazer as perguntas certas, que definem os requisitos e restrições. Esta entrevista é mais uma conversa misturada com alguns diagramas de desenho e talvez até mesmo estruturação de classe. Tudo é de alto nível, então você não escreverá nenhum código de implementação real.

Naturalmente, você deve direcionar a conversa para cobrir seu conhecimento de como os sistemas funcionam. Se você for um engenheiro de back-end, não entraria realmente na mecânica dos detalhes do aplicativo cliente, a menos que tivesse algum conhecimento prévio nessa área. Eu sou um engenheiro de iOS, então falei sobre padrões de arquitetura, modularização de funcionalidade, padrões de design em vez de como dimensionar os endpoints de API, adicionando trabalhadores, AWS e outros.

Entrevistas comportamentais

O entrevistador fará perguntas sobre você e como você lida com certos tipos de situações. A preparação para este não é tão difícil quanto para os outros, mas requer muita introspecção de sua parte.

As perguntas geralmente são as seguintes:
Como você lida com falhas?
Qual é a sua maior fraqueza?
Como você resolve conflitos?
O que você faria de diferente?

Acho que seria muito difícil bagunçar isso, mas já ouvi muita gente fazer isso. Eles tentam disfarçar seus pontos fortes como fraquezas, projetar sua resposta a algo que eles acham que o entrevistador gostaria de ouvir ou mesmo apenas passar a culpa de projetos fracassados ​​para outras pessoas.
“Meu ponto fraco é que eu ‘ estou muito focado ”
“ Foi tudo culpa de Jerry, ele ficou doente durante a maior parte do projeto ”

Esses entrevistadores são treinados e calibrados para identificar pessoas ruins e têm grande atenção às besteiras. É uma maneira rápida de jogar sua candidatura pela janela. Basta ser genuíno, mostrar paixão pelo seu trabalho, reconhecer suas falhas, mostrar iniciativa para melhorar e você se sairá bem.

Adequação à cultura

Geralmente, ela é combinada com a entrevista comportamental e tem como objetivo descobrir se você está alinhado com os valores da empresa. Por exemplo, o Facebook segue a cultura hacker de ser ousado e enviar novas ideias, teste por experimentação, sem medo de quebrar as coisas. Considerando que o Airbnb quer criar um mundo onde as pessoas sintam que pertencem a qualquer lugar a que vão, então elas procuram pessoas com ótimas habilidades em hospitalidade.

Muitas das grandes empresas de tecnologia colocam muita ênfase na cultura e contratam pessoas com base no alinhamento dessas pessoas com seus valores. Se você estiver entrevistando em uma dessas empresas, é importante que pesquise seus valores e encontre experiências anteriores que você possa relatar e comunicar ao seu entrevistador.

Programação em pares

Uma categoria interessante para a qual você será emparelhado com outro engenheiro na frente de um computador que foi configurado com um ambiente de desenvolvimento, muito parecido com o que você usaria no mundo real. Você recebe uma tarefa básica com uma lista de requisitos que você deve completar, à medida que termina cada tarefa, o entrevistador pedirá que você implemente mais funcionalidades até que o limite de tempo seja atingido. Você está livre para usar os recursos que quiser, como Stack Overflow ou documentação online.

Acho que muito do sucesso de um candidato nesta entrevista seria determinado pela exposição a experiências do mundo real. Ao contrário do quadro branco, é necessário escrever código sintaticamente correto, então você deve conhecer sua linguagem e ambiente por dentro e por fora, porque não quer gastar muito tempo na Internet ou documentação procurando por respostas.

Durante minha função anterior, eu escreveria um código limpo enquanto estava trabalhando em uma tarefa, seguido pela otimização quando sentisse que a tarefa estava concluída. Esse tipo de fluxo de trabalho não foi benéfico para esse tipo de entrevista. Eu consegui limpar meu código em um canto, otimizando muito cedo, o que tornava a recuperação mais difícil. Descobri que escrever código fragmentário e mencionar ao entrevistador que faria isso de maneira diferente na produção foi considerado suficiente do que escrever limpo e otimizado.

Encontrando e corrigindo bugs

Muito do que fazemos como engenheiros gira em torno de encontrar e corrigir bugs que são relatados para nós de várias fontes. Nesta entrevista, você receberá uma lista de bugs para encontrar e corrigir, bem como identificar outro código potencialmente problemático ao longo do caminho.

Eu só vi uma instância desse tipo de entrevista e acho que seria muito difícil para alguém se preparar de verdade, especialmente se for um júnior. Cada ambiente de codificação tem suas próprias peculiaridades e nuances, muito do patchwork que fiz veio de experiências anteriores com o IDE (ambiente de desenvolvimento integrado) e as estruturas relacionadas que acumulei ao longo dos anos.

Teste de conhecimento de domínio

A programação é fundamentalmente a mesma na maioria das linguagens comuns que vemos hoje. Provavelmente, se você conhece programação orientada a objetos em uma linguagem, essas habilidades serão transferidas principalmente para outra.

No entanto, esta entrevista foca nos aspectos que não podem ser transferidos entre linguagens ou frameworks. Você será entrevistado sobre as especificidades do ambiente relacionadas à API, gerenciamento de memória, recursos, restrições, histórico e assim por diante.

Praticar pode ser um desafio para este tópico específico. Semelhante à entrevista de localização e correção de bug, acho que muitas das respostas viriam de experiências anteriores. Dependendo do nível da função para a qual você está se candidatando, as respostas que você fornece podem ter pesos diferentes. Por exemplo, se alguém que está se inscrevendo para uma função júnior não conhece a história de por que uma API é estruturada de uma maneira particular, ele pode receber uma concessão. No entanto, se um candidato que está se inscrevendo para uma função sênior não souber, ele pode ser marcado com mais severidade.

Compreendendo os sistemas operacionais

Dependendo da função ou da equipe para a qual você está entrevistando, você pode fazer uma entrevista que se concentre apenas em sistemas operacionais. Nesta entrevista, você receberá perguntas que avaliarão sua compreensão da mecânica de nível inferior do sistema operacional de um computador.

É certo que esta entrevista me pegou desprevenido. Sistemas operacionais foi algo que aprendi durante os primeiros anos na universidade, mas meu conhecimento desde então se tornou nebuloso sobre o assunto, o que se refletiu em meu desempenho.

Como você deve se preparar

Como escrevi anteriormente, entrevistar é uma habilidade própria. Mesmo se você já for um ótimo programador em seu trabalho diário ou tirando ótimas notas em seus estudos, essas habilidades não serão exatamente transferidas de 1: 1 quando você estiver em uma pequena sala de entrevista. Persistência, repetição e consistência na preparação e prática da entrevista serão os principais fatores determinantes do seu resultado.

Conhecimento mínimo

Se alguém me perguntasse quais seriam as áreas nas quais eu deveria me concentrar, sugeriria o seguinte:

Quando começar

Dependendo do seu cronograma, você pode querer começar mais cedo ou mais tarde. Muitas das empresas com as quais entrevistei tiveram um período de resfriamento de 12 meses antes que um candidato reprovado pudesse se inscrever novamente. Por outro lado, se você sabe que não estará pronto dentro de um ano, pode muito bem iniciar o processo agora e ter uma pequena amostra de como é passar pelo processo de entrevista para que, quando estiver pronto, ele ganhe. ser quase tão assustador.

Não se preocupe

Você acertou.

<✓Recursos

Entrevistas simuladas

Algoritmos

Sistemas operacionais

Projeto de Arquitetura

Comportamental

Se gostou do que leu hoje pode conferir nossos outros artigos sobre desenvolvimento para iOS e Swift, ou se quiser entrar em contato, envie-me um tweet ou siga-me no Twitter @andyyhope, realmente faz o meu dia. Também estou construindo um aplicativo de comparação de texto para macOS. Certifique-se de acompanhar seu desenvolvimento, <”@SameSame_app