Esta é a história de como consegui um emprego no Twitter como engenheiro de software em tempo integral. Vou compartilhar o processo pelo qual passei, como me preparei e por que finalmente decidi ingressar na empresa.

Como comecei minha jornada

Click-clac-clic-clac.

O som dos meus dedos quebrando furiosamente as teclas do teclado reverberou pela noite.

Levantei os olhos da tela do laptop e olhei para um relógio na parede de um apartamento no porão que estava alugando por $ 600 por mês.

Eram 2 da manhã.

Agora você pode pensar que eu estava escrevendo um software ou hackeando algo importante. Por que mais eu estaria acordado de outra forma?

Eu não estava.

Eu estava me preparando para minha próxima entrevista técnica de codificação usando um site chamado Leetcode. A fúria me dominou porque não consegui reverter uma lista vinculada, que foi classificada como Fácil na plataforma (experimente aqui)

Como cheguei lá

Um e-mail de um recrutador do Twitter chegou uma semana antes, perguntando se eu gostaria de agendar uma tela inicial do telefone com um de seus engenheiros.

Eu estava animado, mas também nervoso porque havia me candidatado a um cargo de engenharia de software no Twitter alguns anos atrás, sem sucesso.

O recrutador havia me enviado uma folha de preparação abrangente com links para praticar e aprimorar minhas habilidades de codificação e algoritmos.

Um dos itens da lista de verificação me indicou leetcode.com (um site de desafio de codificação) e foi assim que acabei codificando neste site por horas a fim de me preparar para minha entrevista técnica de codificação.

Não foi fácil se preparar para entrevistas técnicas. Para alguém que já saiu da faculdade há algum tempo, leva um tempo nada trivial para aprimorar as habilidades e os fundamentos necessários para ter sucesso em uma entrevista de codificação técnica.

O recrutador enfatizou explicitamente que nossa entrevista técnica se concentraria especificamente em fundamentos técnicos, como mapas, árvores binárias, listas vinculadas, árvores binárias de pesquisa, gráficos e assim por diante.

Se eu estivesse começando a me preparar do zero hoje, tentaria buscar uma abordagem muito mais estruturada para maximizar meu tempo de preparação.

É por isso que comecei um curso de coaching personalizado, chamado Agindo na entrevista técnica.

Este curso ajuda as pessoas a se prepararem para suas entrevistas da forma mais eficiente possível, para que possam dar certo nas entrevistas técnicas e evitar as armadilhas e armadilhas que tive de aprender da maneira mais difícil.

Muitos outros engenheiros obtiveram sucesso com as abordagens descritas no curso.

Minha experiência

Tive 3 anos de experiência como engenheiro full-stack em uma startup, principalmente com a construção de microsserviços e desenvolvimento de API na pilha AWS.

A pilha estava fortemente focada em PHP, NodeJS, AWS SQS como uma fila de mensagens, Postgres para nosso banco de dados e AWS S3 para armazenamento de longo prazo.

Não tinha nenhuma experiência profissional anterior ou experiência de estágio, e o trabalho na startup foi meu primeiro cargo “real” de engenharia de software.

Tive uma educação formal em ciência da computação – me formei em uma pequena faculdade jesuíta particular no estado de Washington em 4 anos com um diploma de bacharel em ciência da computação.

Olhando para trás, acho que foi uma experiência valiosa ir para a faculdade. Se eu fizesse isso de novo, ainda optaria por uma educação formal em vez de um Bootcamp de codificação. Você pode assista meu video aqui para uma análise de um diploma de 4 anos em ciência da computação versus um Bootcamp de codificação.

Candidatei-me a mais de 30 empresas diferentes, entrevistei 15, fui rejeitado por 6, recebi ofertas de 6, recusei 5 e aceitei 1. Se você está contando, a matemática não se alinha perfeitamente porque algumas empresas desapareceram após o local .

Você pode leia mais aqui se você estiver interessado em saber como consegui ofertas de empresas FAANG de alto nível sem um diploma da Ivy League.

Como me preparei para as entrevistas

Passei a maior parte do meu tempo no Leetcode e com um livro chamado Elementos das entrevistas de programação (altamente recomendado).

Também passei cerca de 10% do meu tempo navegando no YouTube para entrevistas de design de sistemas, como Jack Gabbard e Gauran Sen.

Outro recurso / site que gostei foi DailyCodingProblem.com, que envia uma pergunta de codificação por dia para seu e-mail. Isso permite que você receba novas perguntas o tempo todo.

Tempo de preparação total

Meu tempo de preparação foi em torno de um mês de consistente, ininterrupto prática. É fundamental ter uma programação consistente.

Eu costumava fazer jorros de codificação: 3 horas de codificação hard-core seguidas por uma semana de descanso. Achei isso ineficaz e paguei o alto preço da troca de contexto várias vezes.

No total, eu gastei cerca de 3 horas por dia durante a semana (devido ao trabalho) e 4 a 6 horas nos fins de semana para um total de cerca de ~ 20 horas por semana durante um mês.

Como me inscrevi para empregos

Eu me inscrevi no Twitter por meio da página de carreiras deles. Em retrospectiva, pode ter sido mais eficaz encontrar uma indicação ou recrutador no LinkedIn, porque isso provavelmente teria acelerado o processo de inscrição.

Um currículo bem escrito é fundamental, especialmente quando você está se candidatando por meio de um centro de carreiras online. Sem isso, não acho que teria a oportunidade de entrevistar essas empresas de tecnologia de ponta.

Você pode leia mais aqui sobre como elaborei meu currículo para que os gerentes de contratação me notassem.

Algumas semanas depois, um recrutador finalmente entrou em contato comigo e queria agendar uma tela inicial do telefone.

Cronograma do meu processo de inscrição

  • 10 de fevereiro de 2017 – O recrutador entrou em contato para agendar um TPS
  • 8 de março de 2017 – TPS inicial
  • 13 de abril de 2017 – Segundo TPS
  • 18 de abril de 2017 – no local
  • 2 de maio de 2017 – Oferta estendida
  • 23 de maio de 2017 – Twitter confirmado
  • 24 de julho de 2017 – data de início oficial

As duas primeiras telas técnicas do telefone envolviam codificação em um documento online compartilhado, como o Google Docs. Conversamos sobre diferentes abordagens e compensações e passamos mais de 30 minutos na implementação.

Após as duas primeiras rodadas, fui transferido para a próxima rodada de entrevistas no local no Twitter em Seattle.

O recrutador então me enviou um link para um repositório de codificação online e me pediu para fazer uma revisão do código. Eu precisava fazer sugestões sobre como melhorar o código e discutir isso com os entrevistadores no local.

Levei cerca de um dia para ler o código, imprimi-lo em papel (cerca de 5 páginas em fonte 10pt) e observei áreas de melhoria no papel. Esta provou ser um exercício útil, como eu descobriria mais tarde.

A entrevista no local

O local teve 3 rodadas no total, com um almoço imprensado entre elas (trocadilho intencional):

  • Largura (75 min)
  • Profundidade (75 min)
  • Almoço
  • Classificação superior (90 minutos, Opcional)

Uma coisa a destacar é que as rodadas no site do Twitter tiveram 2 entrevistadores a cada rodada.

A princípio foi intimidador, ser olhado por dois entrevistadores que me julgavam por cada movimento meu. Mas na realidade gostei como parecia muito mais colaborativos e trocamos ideias.

Largura (Design do Sistema)

A entrevista de amplitude (design do sistema) enfoca uma ampla gama de tópicos para que eles possam entender o quanto você sabe sobre projetar um sistema do zero. O objetivo é levar o candidato ao limite e ver até onde ele pode chegar.

Eles fizeram perguntas como esta:

Você é capaz de construir um sistema confiável com um tempo de inatividade razoável de ponta a ponta, desde a configuração da IU até a comunicação por meio de uma API HTTP e a construção de um serviço de back-end?

Gostei da conversa porque sempre gostei de mexer em diferentes tecnologias. Se você gosta de construir coisas, também gostaria desta rodada. Os entrevistadores foram muito legais e educadamente me guiaram durante a entrevista.

Terminamos com uma questão de codificação no final. Sinceramente, não consigo lembrar o que foi, mas não era nada fora do comum.

Profundidade (retomar)

A entrevista de Depth focou muito mais em meus projetos anteriores e experiência. Isso foi, com toda a honestidade, muito mais intenso e desafiador porque o entrevistador mergulhou fundo em cada aspecto dos projetos que eu construí e desafiou minhas decisões de design.

Qual foi o projeto que você construiu recentemente? Por que você o construiu? Quais foram as alternativas consideradas? Funcionou no final?

Vindo de uma experiência de inicialização, fui responsável por construir muitas coisas do zero, como configurar clusters AWS e configurar SQS para tarefas de processamento.

Embora eu estivesse intimamente familiarizado com muitos projetos, esta rodada me levou ao limite. Tive que voltar atrás em minha experiência e contar a história de minha perspectiva – por que projetamos certas coisas de certas maneiras e se pensamos em abordagens melhores / piores. Nenhuma pergunta de codificação para esta rodada.

Melhor classificação / cultural

A Rodada Cultural foi uma entrevista de 90 minutos com o gerente de contratação e a liderança sênior.

Descobri mais tarde que, se você entrar nesta rodada, significa que se saiu bem tecnicamente e que eles estão procurando um ajuste cultural dos dois lados – se você se encaixa na cultura deles e se eles teriam as oportunidades certas para você.

Não há perguntas de codificação para esta rodada também.

Retrospectiva do processo de entrevista

Entrevistas no Twitter foco fortemente nos fundamentos da ciência da computação. Portanto, certifique-se de conhecer suas estruturas de dados de cima para baixo e da esquerda para a direita. Também é uma boa ideia revisar todos os algoritmos básicos que você aprendeu na aula CS101.

Aqui estão algumas outras dicas:

Conheça seus algoritmos em profundidade

Compreendo como a complexidade do tempo e a complexidade do espaço funcionam.

Conheça um idioma muito bem

Conheça e entender um idioma muito bem ajudou tremendamente. Para isso, recomendo algo como Python ou Java ou C ++, pois são linguagens muito usadas.

Eu pessoalmente gosto de usar Python porque é muito fácil de ler, muito fácil de explicar e tem várias estruturas de dados embutidas.

Faça uma revisão do currículo

Certifique-se de revisar os projetos listados no meu currículo. Isso significava

  • compreender todo o design do software Eu era responsável de ponta a ponta,
  • compreender as vantagens e desvantagens que foram feitos no sistema, e
  • tendo razões pelas quais os sistemas foram construídos dessa forma e quais eram as alternativas.

Seja disciplinado em sua preparação

Descubra com antecedência as áreas em que está faltando e estabeleça um cronograma para praticar. É importante ter prática consistente e ininterrupta.

Comecei com o pé errado e desejei ter sabido disso antes, para não perder tempo com as coisas erradas.

Pense nos sistemas com os quais você interage no dia a dia

Descubra os trade-offs, alternativas, prós e contras e como você pode construir um sistema melhor. Essa habilidade o levará muito longe na engenharia de software.

Recursos que recomendo

Você pode ler mais dos meus artigos sobre tecnologia em meu blog pessoal, onde compartilho minha jornada para me tornar um engenheiro de software profissional.

Se você gostou disso, por favor, considere compartilhar isso com alguém que se beneficiaria com isso e me siga no Youtube, LinkedInk e Twitter.

Também estou lançando um novo curso isso inclui o que os entrevistadores estão procurando, como você pode se preparar e como maximizar sua chance de conseguir entrevistas e conseguir o emprego que deseja.





Fonte