Recentemente precisei procurar sobre perguntas à serem feitas em um processo seletivo para desenvolvedores sêniores, pois estava procurando maneiras diferentes e melhores de como realizar o processo seletivo com desenvolvedores e tinha percebido que na contratação de devs sêniores, eu precisava entrar mais a fundo com perguntas técnicas e conseguir ter uma visibilidade maior do que o candidato possui de fortalezas e fraquezas.
Felizmente, encontrei vários assuntos e tópicos sobre o assunto, inclusive esse post do hanselman ( https://www.hanselman.com/blog/NewInterviewQuestionsForSeniorSoftwareEngineers.aspx ) que fala sobre perguntas para se realizar para sêniores e após a leitura deste post e outros, cheguei à uma conclusão ( e muito óbvia ) que as perguntas que eu faço na entrevista, são perguntas que todo dev que assume aquele posto deveria saber, obviamente para passar na entrevista.
Segue a lista de perguntas na qual eu julgo muito pertinentes todo desenvolvedor de software que se julga sênior, saber:
- O que você fez para melhorar como desenvolvedor em sua carreira?
- O que é o SOLID para você?
- Por que o Princípio da Responsabilidade Única é importante?
- O que é inversão de controle? Como isso se relaciona à injeção de dependência?
- Por que as interfaces são importantes?
- Conhece sobre o pattern Repository? O Factory? Por que os patterns são importantes?
- Quais são alguns exemplos de antipadrões?
- O você entende por Clean Architecture?
- O que você entende por Clean Code?
- Quais tipos de testes de software você conhece? Quando utilizá-los?
- Qual é a sua opinião sobre microserviços e monólitos?
- O que é Gang of Four? Por que você deveria se importar? Consegue me citar alguns exemplos?
- Como os padrões MVP, MVC e MVVM se relacionam? Quando eles são apropriados?
- Você acabou de ser encarregado de um projeto de código legado com problemas de manutenção. Que tipo de coisas você gostaria de melhorar para colocar o projeto em uma base estável?
- Quais são algumas maneiras alternativas de armazenar dados além de um banco de dados relacional? Por que você faria isso e quais são as vantagens e desvantagens?
- O que você sabe sobre 12 factor app?
- Discuta as diferenças entre Mocks e Stubs/Fakes e onde você pode usá-las
- Você ainda está escrevendo código? O quanto gosta de fazer isso?
- Você acabou de ser designado para um projeto em uma nova tecnologia, como você começa?
- O que você faz para ficar a par das mais recentes tecnologias e ferramentas?
- O que é CI e CD? Você já usou e por que é importante?
- Como você reage às pessoas que criticam seu código/documentos?
- Conte-me sobre alguns de seus projetos de hobby que você escreveu no seu tempo livre.
- Qual é o último livro de programação que você leu?
- Você conhece algum método de criptografia? Se sim, pode me falar sobre alguma vez que já utilizou algum?
- Descreva, com o máximo de detalhes que achar relevante, o mais profundamente possível, o que acontece quando digito “google.com.br” em um navegador e pressiono “Ir”.
- O que você faz quando fica com um problema que não pode resolver?
- Se o seu banco de dados estava sob muita pressão, quais são as primeiras coisas que você pode considerar para agilizá-lo?
- O que é SQL injection?
- Qual é a diferença entre teste de unidade e teste de integração?
- Diga-me três vezes que você falhou.
- O que é refatoração? Você já usou? Acha importante? Cite três refatorações comuns.
- Quando você sabe que seu código está pronto para produção?
Óbviamente, essas não são as únicas perguntas que um desenvolvedor precisa saber e também não desqualifica ninguém caso não saiba alguma.
Atualizações
Ao longo desses quase 5 anos após criação deste artigo, vou adicionar mais perguntas que na minha opinião são tão importantes quanto a principal lista de perguntas:
- Como você lida com conflitos em uma equipe de desenvolvimento?
- Avalia habilidades interpessoais, de liderança e a capacidade de manter um ambiente de trabalho produtivo e harmonioso.
- Como você gerencia e prioriza tarefas em um projeto com prazos apertados?
- Esta pergunta avalia a capacidade de organização, gestão de tempo e habilidades de priorização do desenvolvedor, essenciais para cumprir prazos e entregar projetos de alta qualidade.
- Pode me falar sobre uma vez em que você teve que aprender uma nova tecnologia rapidamente? Como você abordou isso?
- Avalia a capacidade de aprendizado rápido e adaptação a novas tecnologias, algo crucial em um campo que está em constante evolução.
- Como você garante a qualidade do código que você escreve e revisa?
- Avalia a atenção do desenvolvedor à qualidade do código, incluindo práticas de teste, revisão de código, e adesão a padrões de codificação.
- Qual é a sua abordagem para mentoring de desenvolvedores juniores na equipe?
- Avalia a disposição e a habilidade do desenvolvedor sênior para guiar e ensinar membros menos experientes da equipe, contribuindo para o crescimento e desenvolvimento da equipe como um todo.
- Como você aborda a refatoração de código em um projeto existente?
- Avalia a compreensão do desenvolvedor sobre a importância da refatoração e como ele equilibra isso com a entrega de novas funcionalidades.
- Qual foi o maior desafio técnico que você já enfrentou e como você o superou?
- Avalia a capacidade do desenvolvedor de resolver problemas complexos e aprender com experiências passadas.
- Como você garante que seu código seja seguro contra vulnerabilidades?
- Avalia o conhecimento do desenvolvedor em práticas de segurança e sua aplicação no desenvolvimento de software.
- Como você mede o sucesso de um projeto de software?
- Avalia a capacidade do desenvolvedor de definir métricas e indicadores de desempenho para avaliar o sucesso de um projeto.
- Pode descrever uma situação em que você teve que trabalhar com uma equipe multifuncional? Como foi a experiência?
- Avalia a habilidade de colaboração do desenvolvedor com equipes de diferentes disciplinas.
- Qual é a sua abordagem para lidar com débitos técnicos em um projeto?
- Avalia a capacidade de identificar, priorizar e resolver débitos técnicos sem comprometer a entrega de valor.
- Você já teve que defender uma escolha técnica que não era popular? Como você fez isso?
- Avalia a habilidade do desenvolvedor de comunicar e justificar decisões técnicas.
- Como você aborda a documentação de código e de projetos?
- Avalia a importância que o desenvolvedor dá à documentação para garantir a manutenção e a continuidade dos projetos.
Este post serve apenas como provocação para você que se acha desenvolvedor sênior, fazer um auto julgamento e para os mais inexperientes poderem ver como guia (na minha opinião) de pontos a evoluir.
Ainda ressalto, que o conceito de senioridade é algo muito complexo de ser tratado, ainda mais quando falamos de times de desenvolvimento onde uma pessoa pode ser sênior em assunto X e ser muito júnior em assunto Y e isso não é problema ou demérito nenhum, apenas prova o fato que somos humanos e não máquinas.
Também gostaria de deixar uma última provocação, que infelizmente, não acredito que uma pessoa pode se julgar sênior com 1 ou 2 anos de carreira. Adquirir conhecimento suficiente para responder todas aquelas perguntas acima, leva tempo, muito tempo! Pois exige além do conhecimento teórico, o conhecimento prático e preferencialmente com projetos diferentes.
Ainda poderíamos desdobrar MUITO sobre este assunto, mas escrevi esse post apenas como um ponto de reflexão, para servir de termômetro para que as pessoas façam uma auto avaliação de si mesmos.
Um grande abraço!