Case Loft - Como usamos as entrevistas técnicas em Engenharia e como se preparar para elas - PrograMaria

Acompanhe as habilidades testadas em cada entrevista técnica realizada pela Loft e dicas de como você pode se preparar para elas

 

Pensando em trazer cada vez mais mulheres para o mundo da programação, o time de mulheres engenharias da Loft decidiu mostrar os dois lados da moeda na hora de passar por uma entrevista técnica aqui na empresa. Dessa forma, contamos relatos pessoais de como uma pessoa entrevistadora enxerga aquela experiência e como você pode chegar em algumas respostas finais na hora de entregar seu código, e, por outro lado, como uma pessoa entrevistada se sente durante todo esse processo e como pode se preparar para o dia D.

 

VISÃO DA PESSOA ENTREVISTADORA

Durante o processo de uma entrevista, é muito comum que as pessoas candidatas fiquem se perguntando se as coisas estão correndo bem, porque desconhecem o que a pessoa entrevistadora espera ver na entrevista técnica.

Eu sou a Bruna e, desde 2019, conduzo entrevistas técnicas na Loft. Nesse artigo, eu vou falar um pouco sobre essas entrevistas e o objetivo da Loft com cada uma delas.

No processo seletivo da Loft, a fase técnica é dividida em três entrevistas técnicas, cada uma com o objetivo de avaliar habilidades diferentes. Como entrevistadora, meu objetivo é avaliar o nível de conhecimento das pessoas candidatas das habilidades que buscamos. Como o conjunto de habilidades que uma pessoa pode ter é muito extenso, ter deficiência em uma não é motivo para reprovar uma pessoa no processo.

As entrevistas da fase técnica são:

  • Coding Skills (algoritmo)
  • Code Design (organização de código)
  • Arquitetura front-end ou back-end: uma ou outra, de acordo com a vaga para qual a pessoa de candidatou

Aqui eu vou falar das entrevistas de Coding Skills, Code Design e Arquitetura back-end.

 

Coding Skills

Nesse teste, o objetivo é avaliar a habilidade da pessoa candidata em transformar um requisito de negócio em código. Como entrevistadora, eu não passo o problema e espero que você solucione de acordo com um gabarito. Isso porque o problema não tem apenas uma solução correta e eu estou na entrevista para tirar as suas dúvidas e te ajudar a chegar a uma solução. Nessa entrevista, você se comunicar bem é tão importante quanto a solução do problema, pois além de avaliar as suas habilidades, eu quero entender como você tomou as decisões para chegar na solução apresentada.

Tópicos importantes para essa entrevista são:

  • Estruturas de dados: conhecendo as diferentes estruturas e como usá-las pode te ajudar na decisão de qual é melhor para solucionar um determinado problema
  • Lógica de programação: loops e estruturas de decisão
  • Legibilidade de código: o código vai ser escrito apenas uma vez, mas será lido várias vezes. Por isso é importante que classes, funções e variáveis tenham bons nomes que representem exatamente as suas responsabilidades

Alguns materiais que podem te ajudar a estudar ou revisar esses tópicos são:

  • O livro Cracking the Coding Interview (Gayle Laakmann McDowell) aborda algumas estruturas de dados, lógica de programação e também tem exercícios para você praticar
  • O livro Clean Code (Robert C. Martin) é bem famoso no mundo da programação e aborda vários tópicos importantes. Para essa entrevista específica tem um capítulo muito bom que fala sobre como dar nomes para classes, funções, variáveis etc.

 

Code Design

Nesse teste, o objetivo é avaliar a habilidade da pessoa candidata em desenvolver um software testável e de fácil manutenção. Porém, ao invés de escrever código, como no teste de Coding Skills, você vai apresentar a solução através de um desenho (semelhante ao UML) mostrando quais são os componentes (classes ou funções de acordo com o paradigma escolhido), suas responsabilidades e como estes se relacionam. Da mesma forma como ocorre na entrevista de Coding Skills, nesse teste também não há apenas uma maneira certa de resolver o problema e é importante você ter uma boa comunicação, porque queremos entender o seu racional para chegar na solução.

Além da organização do código, nesse teste abordamos outro tópico extremamente importante: testes automatizados. Um software com boa cobertura de testes nos dá segurança para alterar ou adicionar funcionalidades na aplicação. Isso porque se a mudança afetar outra funcionalidade que não deveria, os testes irão avisar. Dessa forma, queremos avaliar o seu conhecimento em testes automatizados e como você aplica os diferentes tipos de testes em cenários diferentes.

Abordamos esses dois pontos nessa entrevista – a organização de código e os testes automatizados – porque os dois estão diretamente conectados: um código bem-organizado deve ser fácil de testar, então, a dificuldade em criar os testes pode ser um sintoma de um código mal organizado.

Tópicos importantes para essa entrevista são:

  • Design Patterns: são soluções para problemas que acontecem com frequência durante o desenvolvimento de um software. Ou seja, ao invés de você precisar inventar um jeito de resolver um determinado problema, pode usar um design pattern e customizar de acordo com o problema. Existem vários patterns, cada um para uma situação, então é interessante você aprender como e quando usá-los
  • SOLID: São princípios para programação orientada a objeto. Esses princípios têm como objetivo deixar o código de fácil manutenção
  • Teste automatizados: existem vários tipos de testes automatizados, cada um com um propósito diferente

Alguns materiais que podem te ajudar a estudar ou revisar esses tópicos são:

  • O site refactoring.guru tem uma página com vários Design Patterns e as indicações de onde e como usá-los.
  • O livro Orientação a Objetos e SOLID para Ninjas (Mauricio Aniche) é bom, caso você não conheça muito sobre SOLID e queira iniciar no tema
  • O livro Princípios, Padrões e Práticas Ágeis (Robert C. Martin) é muito bom caso você queira se aprofundar no assunto SOLID 
  • O livro Test-Driven Development (Mauricio Aniche) fala sobre o processo TDD, que coloca o teste em primeiro lugar. Além disso, mostra os diferentes testes e como utilizá-los

 

Arquitetura back-end

No teste de Code Design, a pessoa candidata desenha a solução de uma aplicação. Em se tratando de Arquitetura back-end é esperado que ela desenhe uma solução de arquitetura de sistemas, na qual os componentes podem ser aplicações, banco de dados além de outras tecnologias e ferramentas.

Nessa entrevista, o objetivo não é avaliar quantas tecnologias e ferramentas você conhece, mas sim como você as usa para solucionar problema. Outro ponto importante que é a sua habilidade de investigação. Diferente dos testes de Coding Skills e Code Design, aqui nem o requisito será passado. Pode ser apenas apresentado o problema e você terá que definir qual vai ser a solução de negócio e a solução técnica. Por isso, é necessário, assim como nos testes anteriores, ter a comunicação clara e não ter medo de perguntar e falar o que está pensando.

Tópicos importantes para essa entrevista são:

  • Arquitetura monolítica e arquitetura em microsserviços: são duas abordagens, cada uma com vantagens e desvantagens. Estudar sobre essas arquiteturas vai te ajudar a escolher a melhor para cada problema
  • Comunicação entre sistemas distribuídos: existem várias maneiras de implementar a comunicação entre sistemas. Nesse tópico, você pode estudar as diferenças entre comunicação síncrona e assíncrona e quando usar cada uma.

Para esses dois tópicos, o livro Building Evolutionary Architectures (Neal Ford, Rebecca Parsons, Patrick Kua) é de grande ajuda. Além disso, a publicação fala sobre como evoluímos arquiteturas de forma sustentável.

 

VISÃO PESSOA ENTREVISTADA

No mundo da tecnologia, o processo das entrevistas técnicas pode se parecer a fazer uma receita de bolo. Você pode tentar se preparar, comprar os ingredientes, separar as vasilhas e seguir passo a passo do processo. Porém, pode ser que o bolo fique solado ou que cresça mais que o esperado, dependendo da temperatura do seu forno. Então, se não podemos ter uma estimativa certeira de como será nosso desempenho na entrevista, como é possível se preparar?

Eu me chamo Evelise, muito prazer. Nesse artigo, vou dar minha visão como candidata a uma vaga. Em meados de 2019 (ou seja, antes da pandemia) decidi me candidatar para uma vaga de desenvolvedora front-end na Loft. Eu não sabia o que iria enfrentar nas etapas nas quais são necessárias habilidades de código. Para tentar prever o imprevisível, conversei com pessoas desenvolvedoras que já estavam há algum tempo trabalhando na empresa para entender exatamente como é feito o processo de entrevista. A ideia aqui não era saber as respostas aos testes, mas entender como a empresa faz para identificar as habilidades de cada candidato. Descobri então que são três etapas: Coding Skills (habilidades de código), Coding Design (podemos dizer algo como habilidades de arquitetura) e Especialidade. Um fator importante aqui é entender que essas três etapas são diferentes de acordo com a sua especialidade (nesse caso preferi me candidatar para uma vaga de front-end, mas poderia ser também para a de back-end).

 

Coding Skills

Aqui, a expectativa da Loft é que você consiga se comunicar bem, demonstrar como você pensa na hora de propor uma solução e como você lida com isso no dia a dia. Essa etapa, inclusive, era a que me dava mais medo durante os processos seletivos, mas como tudo na vida, passa e passa bem rapidinho.

A ideia dessa etapa é simular um dia a dia no ambiente de trabalho. Assim, é apresentado um problema real enfrentado ao longo da jornada da Loft. A missão é entender e resolver da forma que você achar mais conveniente, com código. Esse é o momento de botar em prática tudo que você aprendeu ao longo da sua carreira. Importante frisar que o entrevistador não está ali para julgar a forma que você está resolvendo e sim acompanhar como você pensa e resolve soluções.

Como passei por isso na pele, a dica que eu dou para esse momento (parece e é clichê), mas é manter a calma. Visualize que você está trabalhando naquela empresa, é segunda-feira de manhã, você já tomou um gole do café e tem uma nova tarefa que precisa ser entregue em algumas horas. Imagine que existe um novo integrante no time que não sabe absolutamente nada sobre o projeto e que precisa fazer um pair programming (programação em conjunto) com você para saber como resolver os problemas. O importante aqui é se comunicar de forma clara e trazer tudo o que passa na sua cabeça, além de mostrar como você está tentando solucionar aquele problema. Não tenha medo de falar!

Algumas dicas mais relacionadas à solução do problema podem ser bastante úteis na hora de aplicar seus conhecimentos, bem como estrutura de objetos. Esse método ajuda a ter uma ideia de como utilizar os dados a seu favor e como buscar e filtrar valores dentro dessas estruturas, tornando o exercício mais fácil ao longo do tempo. Além disso, indico o Code Wars (site com exercícios de algoritmo) como maneira de praticar, não só para a entrevista, mas para melhorar o raciocínio lógico ao longo da sua carreira.

 

Coding Design

Nessa etapa, a expectativa da Loft é que você demonstre boas práticas de design de código, bons conhecimentos de código limpo e separação de responsabilidades.

Essa etapa foi uma das mais divertidas para mim, pois eu gosto bastante de desenhar arquiteturas e definir melhor como o projeto poderia ficar antes mesmo de botar a mão no código. Aqui, a ideia é desenhar caixinhas de como poderia ser feita a separação de cada pedacinho do código de acordo com os cenários que o entrevistador te passar. Não existe uma resposta certa, cada pessoa faz diferente de acordo com a sua experiência. Algo que pode ajudar é estudar previamente sobre alguns assuntos que justificam essas separações, bem como os princípios de SOLID. Outros conteúdos muito bons são resumos sobre o Clean Code (livro bastante conhecido no mercado sobre boas práticas de codificação limpa), Clean Architecture (livro que aborda a proposta de uma arquitetura baseada em linguagens orientadas a objetos) e Refactoring Guru (site bastante usado para explicar padrões de códigos independentemente da linguagem de programação).

A sugestão é que você faça um estudo prévio sobre alguns desses princípios. Lembre-se: a base desse exercício é o desenho colocando em prática em um cenário real (sem necessidade de codar, a ideia aqui é separar em pequenas caixinhas e conectá-las de acordo com esses princípios).

 

Especialidade (Frontend)

Aqui a expectativa da Loft é que você tenha bons conhecimentos de HTML semântico, css e javascript. Não tem nenhum requerimento de framework, então, você pode fazer a resolução no que se sentir mais confortável.

A etapa de especialidade foi bem tranquila e senti que foi uma das mais leves durante o processo. O problema a ser resolvido nada mais é do que uma tela com alguns dados e a pergunta é como você, como pessoa desenvolvedora, poderia transformar essa tela em um produto oficial da Loft. O objetivo é botar em prática seu HTML semântico, respeitando os princípios de SEO, uma ideia de css (nada muito avançado, mas apenas o suficiente para alinhar as colunas no meio, centralizar textos, dar nome às configurações). A parte do Javascript, como expliquei, não é presa a nenhum tipo de framework; o melhor, então, é fazer no que você se sente mais segura: React, Angular, Vue ou até javascript puro.

Depois de uma semana esperando ansiosamente por uma resposta, consegui a tão esperada vaga e agora tento ajudar futuras engenheiras de software a entrar para a equipe! Lembrando que seguir a receita de bolo não garante o sucesso, mas ajuda a lidar melhor com o resultado, seja positivo ou negativo. E como todo processo seletivo, você sempre sai ganhando alguma coisa no final. Se não for a vaga, será o aprendizado.

 

Observações importantes

Na Loft, uma pessoa entrevistadora não pode fazer mais de uma entrevista técnica com a mesma pessoa candidata. Isso porque não queremos criar viés com base em apenas uma visão. Além disso, não reprovamos uma pessoa com base em apenas uma das entrevistas técnicas. Assim, uma pessoa pode ir muito bem na entrevista de especialidade e não tão bem na de Coding Skills. Isso não será motivo para reprovação. A decisão é feita com base em todas as entrevistas. 

Após todas essas etapas, o feedback do processo seletivo é enviado em até uma semana com dicas e materiais de estudo, caso o retorno não seja positivo. Lembrando que quem não consegue a vaga sempre pode tentar novamente em três meses.

 

CRÉDITOS

Autoras Bruna Oliveira da Rosa, Staff Software Engineer na Loft É Bacharel em Ciência da Computação, trabalha na área de desenvolvimento há quase 10 anos. Tem passagem por alguns unicórnios brasileiros e atualmente é Engenheira de Software na Loft. https://www.linkedin.com/in/bruna-rosa/

Evelise Dib, Desenvolvedora de Software na Loft Mais conhecida como eevee, é desenvolvedora na Loft e as segundas trabalha como mentora part time na equipe da Laboratoria. Gosta de comer legumes e frutas, faz exercícios todos os dias e mente sobre sua rotina saudável. https://www.linkedin.com/in/evelisevazquez/

Revisora Luciana Fleury, jornalista Formada em Jornalismo pela Cásper Líbero. Tem trabalhado com o desenvolvimento de projetos editoriais, produção de conteúdos e edições de textos. É mãe orgulhosa da Gabriela e coleciona globos de neve.  Redes sociais: https://www.linkedin.com/in/luciana-fleury-1b024083/

Este conteúdo faz parte da PrograMaria Sprint Processos Seletivos em tech.

O que você achou deste conteúdo? Deixe sua avaliação abaixo: