Guia Final: Obtendo um Nível de Entrada Função de Engenharia de Software

A engenharia de software pode ser uma carreira incrivelmente gratificante. Mas sem a preparação correta, pode ser difícil conseguir o trabalho de engenharia de software que você tem em mente. Eu aprendi isso, quando eu estava fazendo cursos de ciências da computação na faculdade para conseguir uma função de engenharia de software (SWE).
Fui entrevistado para uma dúzia de cargos de software na maioria das empresas de tecnologia que você pode nomear: Google, Apple, Microsoft e startups (na época) como Snapchat e Uber. Aqui eu resumo meus aprendizados, da minha preparação de trabalho e experiências em entrevistas, para ajudar a prepará-lo em sua jornada no mundo da engenharia de software: de brainstorming a que empresas candidatar-se, enviando uma mensagem fria para um recrutador no LinkedIn, aperfeiçoando seu currículo, como as entrevistas geralmente são, e que tópicos de ciência da computação a estudar.
Esse é o único guia que você precisa para conseguir um trabalho de engenharia de software de nível básico.

Aplicando para empresas

Muitas grandes empresas contratam engenheiros de nível básico. Normalmente, estes são novos cargos genéricos de graduação (você não está entrevistando para ser especificamente um desenvolvedor iOS). Também não faça descontos para empresas sem tecnologia. Toda indústria está à procura de talentos tecnológicos, e a tecnologia está abalando todas as áreas de forma emocionante.
Você pode encontrar essas funções na feira de carreira da sua faculdade falando com um recrutador, ou através do Google-ing estas palavras-chave: nome da empresa + carreiras universitárias.
Se você não é um estudante, mas sim transitar para a tecnologia, seja através de um campo de treinamento de codificação ou ensinando-se a codificar, este também é um bom lugar para começar. Há muitas vezes empregos de nível básico postados ao lado desses empregos de estudante. No entanto, se você estiver fazendo uma transição no meio da carreira, talvez você precise fazer um pouco mais de networking (através de amigos, eventos ou recrutadores de mensagens frias).
Aqui estão algumas ideias para onde começar a procurar:

  • Grande tecnologia (Facebook, Apple, Amazon, Google, IBM, Cisco)
  • Tech startups (Snowflake, DoorDash)
  • Finance (Goldman Sachs, Visa, Robinhood)
  • Entertainment (Disney, Viacom)
  • Retail (Macy’s, Target, Walmart)
  • Defesa/Aeroespacial (Boeing, Northrop Grumman)

A Perfeita Mensagem Fria do LinkedIn

Inevitavelmente, haverá empresas que não voltarão para você, mesmo depois de você ter aplicado diretamente. Para tentar fazer a bola rolar, tente fazer o seu caminho em rede para uma entrevista. Isto pode vir na forma de alcançar aqueles na sua rede (ex-alunos ou amigos) ou alcançar os próprios recrutadores.
Estas são as minhas 5 regras para uma mensagem fria do LinkedIn:

  1. Veja se uma ligação mútua pode apresentá-lo – É menos provável que as pessoas ignorem aqueles que já conhecem.
  2. Continua a ser sucinto – As pessoas estão ocupadas. Não lhes dê uma desculpa para lerem parcialmente sua mensagem antes de descartá-la.
  3. Conheça um terreno comum – Se ambos foram para a mesma escola ou trabalharam na mesma empresa, mencione esse fato para obter familiaridade.
  4. Sê directo – Não batas à volta do mato tentando fazer conversa fiada. Este não é o lugar para isso.
  5. Show credibility – Se você tem experiência relevante, diga isso. Se você tem conhecimentos particulares, dê-lhes um gostinho.

Aqui está um modelo de mensagem fria do LinkedIn para começar:
Hey, muito interessado em juntar-se e ver se há um ajuste mútuo! Eu sou um antigo @ . . Adoraria conversar.
Exemplo:
Hey, muito interessado em juntar-se ao Roblox e ver se existe um encaixe mútuo! Eu sou um ex-PM @ Rockstar Games. Adoro o conceito de jogo social não estruturado. Adoraria conversar.

Resume

Escrever um bom currículo é uma forma de arte, que se resume a duas coisas: formato e conteúdo.
O maior erro que as pessoas cometem com o formato é adicionar muita informação, com o currículo acabando sendo de duas ou até três páginas. Isso é desnecessário. Mantenha-o simples. O seu currículo deve ser apenas uma página. Use itálico e formatação em negrito estrategicamente; eles realmente só devem ser usados para ajudar o recrutador ou gerente de contratação a entender quem você é e o que você traz para a tabela (por exemplo, usando-o apenas para seções em negrito e nomes de empresas).
Quando se trata de conteúdo, certifique-se de dizer mais dizendo menos. Corte a palha e use números quantitativos em seu lugar. Os números irão fornecer provas concretas das suas contribuições. Tente concentrar-se em suas habilidades duras. Não há necessidade de dizer desnecessariamente ao recrutador que você é um grande jogador de equipe, um visionário, ou um trabalhador duro. Qualquer pessoa pode dizer isto. Ao invés disso, mostre através de ação como você ajudou sua equipe.
Para mais informações, confira esta lista de verificação para ter certeza de que seu currículo de engenharia de software está polido e pronto.

A Entrevista Típica

Das minhas experiências, o processo para entrevistas de engenharia de software é mais ou menos o mesmo em todas as empresas, seja no Google ou em uma pequena inicialização que acabou de levantar sua série B. Isto é o que você pode razoavelmente esperar no processo de entrevista.

Comportamental

A rodada comportamental normalmente é feita por telefone com um recrutador ou o gerente de contratação para a função. Nesta conversa, a empresa quer descobrir se você seria uma boa pessoa para o papel, tanto com base nas suas experiências como na sua capacidade de comunicação (e para que eles avaliem se você pode ser uma pessoa problemática para trabalhar). Seja bem versado em seu currículo, pois é provável que o recrutador ou gerente de contratação lhe pergunte sobre as experiências listadas em seu currículo nesta conversa.

  • Mais perguntas comportamentais: https://www.tryexponent.com/courses/software-engineering/common-behavioral-questions

Desafio de codificação

Após a entrevista comportamental, você poderá ter um desafio de codificação para completar em seu próprio tempo. Isto pode significar obter uma lista de requisitos e um código de esqueleto. Você então seria solicitado a completar o código e enviá-lo após completar o código em seu próprio ambiente.
Mais comumente, empresas têm usado Hackerrank (ou ferramentas como essa). Este é um ambiente de codificação online, baseado em navegador. Eu sugiro que você se inscreva em uma conta e pratique usando-a enquanto se prepara para entrevistas, para se familiarizar com o ambiente.
Em alguns casos, as empresas podem querer que você complete o desafio de codificação primeiro antes mesmo de chamá-lo para a rodada comportamental. Isto porque podem ter muitos candidatos no topo do funil, e têm alguma forma automatizada de filtrar candidatos cujo código não passa em casos de teste suficientes.

  • Tente este problema de “diferença de matrizes”: https://www.tryexponent.com/courses/software-engineering/difference-of-arrays

Entrevista Telefônica/Vídeo

Você pode encontrar de 1 a 3 entrevistas telefônicas. Estas são tipicamente sobre estruturas de dados e/ou algoritmos.
Tipicamente, você obteria um link de documento compartilhável (como o Google doc ou CodePen). Com estes, tanto você como seu entrevistador poderiam ver o que você está digitando em tempo real. Você seria confrontado com um problema de codificação e ao escrever seu código, o entrevistador seria capaz de ver seu progresso.
Esteja preparado para implementar estruturas de dados e algoritmos comuns. Estude questões de Leetcode fácil/médio.
Você deve sempre dar a solução ingênua primeiro. Como desenvolvedores de software, nós queremos sempre escrever o código mais otimizado. Mas em uma entrevista, é possível que o tempo se esgote antes de você terminar sua solução ideal. Você ganhará pelo menos alguns pontos na entrevista se o tempo se esgotar ao escrever sua solução ótima, mas você já apresentou a força bruta/código ingênuo.
Por vezes, você enfrentará questões de design do sistema também nestas entrevistas telefônicas.

  • Prática de design da arquitetura da Reddit: https://www.tryexponent.com/courses/software-engineering/design-reddit

No local

As perguntas no local são semelhantes às perguntas da entrevista por telefone. Se você chegou até aqui, dê a si mesmo um tapinha nas costas. Você está quase lá! Nesta rodada final, você provavelmente estará codificando em um quadro branco — então pratique fazendo isso antes de entrar na entrevista (algumas empresas como a Snapchat podem deixar você/pedir que você traga seu próprio laptop para codificar no local).
Existe também tipicamente uma rodada de almoço onde você pode almoçar com a equipe.

O que estudar

Seja muito confortável codificando tanto em um ambiente de desenvolvimento quanto em um quadro branco. Aqui vou detalhar os tópicos de codificação que você deve estudar.

Comportamental

Estas questões surgirão no seu telefonema inicial, mas à medida que você passar pelo processo de entrevista, é inevitável que estas questões surjam novamente (por exemplo, durante o almoço no seu local). Tente ser sucinto, fale com confiança (terminando suas frases com uma inflexão para baixo em seu tom) e elimine palavras de preenchimento (uh, um, como) de seu vocabulário.

  • Conta-me sobre você mesmo.
  • Por que engenharia de software?
  • Conta-me um erro.
  • Conta-me o teu projecto, x, e o que contribuiste.

Línguas de Programação

Pela minha experiência, as empresas permitem-te codificar em qualquer língua com a qual te sintas mais confortável. Nos meus cursos universitários de informática (na UCLA), todos nós fomos ensinados C++. Entretanto, eu fiz todas as minhas entrevistas em Java ou Python. Achei muito fácil pegar outras linguagens uma vez que me familiarizei com sua sintaxe.
Eu sugeriria perguntar ao recrutador ou gerente de contratação se as entrevistas requerem alguma linguagem específica. Caso contrário, vá com a linguagem com a qual é menos provável que você cometa erros.

Estruturas de Dados

Esteja familiarizado com questões de codificação em torno destas estruturas de dados. Também esteja familiarizado com tradeoffs, bem como com a complexidade de tempo e espaço para cada um.

  • Array
  • Linked List
  • Tree/Graph
  • Hash Table
  • Stack/Queue
  • Heap

Algoritmos

Esteja familiarizado com questões de codificação envolvendo estes algoritmos. Também esteja familiarizado com tradeoffs, bem como com a complexidade de tempo e espaço para cada um.

  • Pesquisa (e pesquisa gráfica)
  • Ordenar
  • Programação dinâmica

Dependente do papel e da empresa, também lhe poderão ser perguntados problemas de manipulação de bits.

Recursos

Felizmente, existe uma infinidade de recursos online para o ajudar na sua viagem. Estes são os que eu recomendo.

Leetcode

A maioria das suas perguntas de codificação podem ser encontradas em Leetcode. Se você se tornar muito bom nestas perguntas de quadro branco, você deve estar pronto. Esteja preparado para perguntas fáceis/médias, mas tente as perguntas mais difíceis também — especialmente à medida que avança para as rondas no local.

Exponent

O curso de Engenharia de Software da Exponent é o único curso que você precisa. Ele tem guiado artigos e vídeos para ajudá-lo a atualizar seus conhecimentos/reaprender as estruturas de dados e algoritmos que você precisa para sua entrevista — tudo em um só lugar. Além disso, a Exponent adicionou um curso abrangente de entrevista de design de sistemas para algumas das perguntas mais difíceis de design de sistemas.

GeeksforGeeks

GeeksforGeeks tem as melhores soluções para perguntas de codificação. Para a maioria das perguntas de entrevista, você pode enfrentar, GeeksforGeeks não só mostra a implementação ingênua, mas também uma solução otimizada, bem como a complexidade de tempo e espaço.

r/CSCareerQuestions

Esta página Reddit (subreddit), r/CSCareerQuestions, é uma comunidade de aspirantes e experientes engenheiros de software. Você pode usar isso para ler sobre as experiências de outros em entrevistas em empresas específicas ou para fazer perguntas a si mesmo. Uma palavra de precaução: os membros deste subreddit são muito obcecados com o prestígio e a compensação da empresa. É bom apontar para as grandes empresas de alta tecnologia FAANG, mas lembre-se sempre de estar de castigo — há um mundo fora da tecnologia!

Brapping Up

Muitas pessoas escolhem a engenharia de software como carreira por uma ou mais de muitas razões. Você pode querer se tornar um engenheiro de software porque você gosta de construir coisas. Ou talvez você esteja inspirado pela forma como a tecnologia está mudando o mundo. Ou talvez você só queira uma carreira sólida com bom potencial de ganhos (nada de errado com isso!).
Disponha um calendário de estudos consistente (por exemplo, faça 1 pergunta de Leetcode dia sim, dia não) e mantenha-se fiel a ele.
Como você trabalha na preparação da sua entrevista, a Exponent está sempre aqui para ajudar quando necessário. Se você precisar de uma atualização, o único recurso que eu recomendaria é o Curso de Entrevista de Engenharia de Software, que foi realizado por engenheiros de software que trabalharam em algumas das maiores empresas de tecnologia do setor.

Deixe um comentário