Executando verificação de segurança...
1
ozono
10 min de leitura ·

Crítica e comentário sobre validação técnica

Neste artigo, abordarei as principais práticas para validar as habilidades e conhecimentos técnicos de programadores e desenvolvedores de software durante o processo de recrutamento.

Read it in english here.

Conteúdo considerado nesse artigo

voltar ao topo

Ferramenta de validação técnica

HackerRank e assemelhados

São ferramentas úteis para avaliar o conhecimento técnico de programadores e desenvolvedores de software. No entanto, a restrição de tempo rígida presente na maioria dos testes pode ser um problema, pois impede que o candidato entregue o trabalho e, consequentemente, não permite avaliar o seu desempenho.

Ao menos algumas das plataformas permitem concluir os testes dentro de 24 horas, com duração específica para cada teste. Isso proporciona maior flexibilidade e evita a existência de testes contínuos de 120 minutos, por exemplo.

Apesar de a maioria dos testes serem interessantes e desafiadores, tanto o tipo de problema quanto a restrição de tempo não condizem com a realidade diária de quem trabalha com programação e, portanto, não avaliam de forma adequada as habilidades do candidato.

Prós

  • Os testes costumam ser rápidos;
  • Inclui testes de banco de dados além de testes de código e de lógica.

Contras

  • Tem limitação estrita de tempo e alguns teste chegam a somar 180 minutos;
  • O teste é limitado, tornando-o superficial e insuficiente;
  • O teste é realizado via web, o que é muito ruim;
  • Não avalia as reais habilidades utilizadas no dia a dia da maior parte dos programadores ou das empresas.

voltar ao topo

Projeto completo compartilhado com repositório Git

Também conhecido como desafio de código, é uma forma flexível de avaliar o conhecimento técnico dos candidatos. A equipe técnica fornece uma descrição do que deve ser desenvolvido e o candidato compartilha o resultado usando ferramentas de versionamento de código, como o Github.

Embora essa avaliação seja abrangente, ela pode ser lenta e demorar cerca de uma semana. Isso pode tanto desestimular o candidato quanto gerar sobrecarga no volume de trabalho, especialmente se ele estiver em processos de recrutamento simultâneos. Além disso, é possível que o candidato já tenha desenvolvido algo semelhante em um desafio anterior, o que pode tornar a avaliação menos eficaz. Por isso, é recomendável verificar o histórico do candidato no Github antes de iniciar o processo, tal como descrito aqui. Analisar os repositórios compartilhados pelo candidato pode tornar o processo de recrutamento muito mais rápido sem renunciar a requerimentos técnicos.

Ainda sobre esse tipo de validação, é importante lembrar que nada garante que o código compartilhado foi de fato escrito pelo candidato, podendo ser cópia de um outro repositório qualquer ou, como vimos recentemente, de ferramentas de geração de código.

Prós

  • Enorme flexibilidade;
  • Possibilidade de aferir com profundidade conhecimento tão somente dos tópicos de interesse.

Contras

  • Avaliação lenta;
  • Possível desestímulo em razão da demora;
  • Possível sensação de tempo desperdiçado ao final da avaliação;
  • Possível sobrecarga do candidato;
  • Possibilidade do candidato já ter feito algo semelhante antes e apenas repetir e adaptar;
  • Possibilidade do candidato simplemente copiar de uma fonte qualquer.

voltar ao topo

Codificação ao vivo (live coding)

Modalidade de desafio em que o candidato é convidado a escrever código junto com seus avaliadores e à medida que é feito o teste o avaliador faz perguntas chave para aferir o grau de conhecimento do candidato além da sua fluência na tecnologia em questão.

Entrevistas como essa costumam ser rápidas e seriam algo semelhante a uma mescla entre a Entrevista Técnica e o Projeto completo, feitas as ressalvas de complexidade e tempo do desafio.

A avaliação ao vivo também pode ser útil para aferir a capacidade do candidato de se comunicar e trabalhar em equipe, além de sua capacidade de lidar com pressão e adaptabilidade. No entanto, é importante que o avaliador tenha habilidades de comunicação e feedback eficazes para evitar que o candidato se sinta desconfortável ou pressionado demais. Além disso, é recomendável que o desafio seja projetado para ser realista e coerente com o trabalho diário do programador, de modo a fornecer uma avaliação precisa e justa.

Por ser opção com tempo limitado, também pode se tornar incoerente com o dia a dia de trabalho.

Prós

  • Entrevista relativamente curta;
  • Permite aferir a capacidade de lidar com pressão e adaptabilidade.

Contras

  • Dada a limitação de tempo torna-se difícil abordar aspectos técnicos avançados;
  • Exige cautela do avaliador para evitar demasiada pressão no candidato;
  • Pode não fazer sentido caso pair programming não faça parte do dia a dia dos desenvolvedores da empresa;
  • Em geral as tarefas reais não possuem prazo de minutos ou horas sendo, portanto, mais flexiveis do que o que é abordado no teste.

voltar ao topo

Entrevista Técnica

Entrevista direta com pessoa reconhecida pela empresa por ter mais experiência e conhecimento de tecnologia e desenvolvimento. Via de regra aborda as tecnologias e desafios que fazem parte do dia a dia da empresa.

A entrevista técnica normalmente é realizada pelo chamado tech lead, profissional com mais tempo de carreira e com vivência nas tecnologias e problemas que fazem parte do negócio da empresa. Infelizmente essa entrevista é por demais subjetiva e não necessariamente reflete o verdadeiro grau de conhecimento e experiências do candidato, o que pode possibilitar uma contratação fadada ao fracasso e à frustração de todas as partes bem como a dispensa precoce de um bom candidato.

Por sua vez, o entrevistador tem a oportunidade de abordar desafios que são impossíveis de contemplar em desafio de código, tais como concorrência, uso otimizado de recursos, desafios particulares da empresa, segurança sob diversos aspectos entre tantos outros.

Prós

  • Costuma ser rápida, durando em média 1h;
  • Permite ao entrevistador questionar detalhes que via de regra não tem como ser abordados em desafios de código.

Contras

  • Depende da leitura subjetiva do entrevistador.

voltar ao topo

Editar código em projeto iniciado

Edição de código já iniciado e funcional, implementando alguma nova regra de negócio ou funcionalidade de acordo com a descrição do desafio.

Nesse formato, o candidato recebe um repositório já pronto e funcional e cabe a este implementar algo novo conforme solicitado. Esse tipo de desafio é o que mais se aproxima do dia a dia de desenvolvimento em que é preciso navegar por código legado e, mais importante, entender o que está escrito e encontrar um caminho para implementar o que é pedido. Se bem elaborado, haverá a necessidade de entender de diversas tecnologias e conceitos, tais como git, banco de dados, testes automatizados ou REST, bem como a compreensão de paradigmas de desenvolvimento como MVC ou talvez algum design pattern. Esse formato também seria um híbrido entre ferramentas online de avaliação técnica, dado que não é preciso construir um projeto do zero, e desafio de código compartilhado, que está próximo do dia a dia da própria empresa que está recrutando. Abrange, portanto, vantagens das duas abordagens.

Por ser o tipo mais direcionado de validação, exige cuidado para que não se torne um teste superficial.

Prós

  • O desafio costuma ser rapido, durando em média 1h;
  • Possibilidade de avaliar importantes conhecimentos acessórios como git, banco de dados, REST, MVC, design patterns, testes automatizados;
  • Avalia capacidade de compreensão de código legado e de implementação de novas funciodalidades.

Contras

  • Direcionamento do teste pode torná-lo superficial.

voltar ao topo

Avaliação de repositórios públicos

Acessar e avaliar repositórios públicos escritos e mantidos pelo candidato a fim de aferir sua abrangência de conhecimento.

Nesse formato, o candidato na verdade não faz nada, dado que supostamente já está tudo feito em projetos nos quais atuou no passado e que deixou público em seu perfil em plataformas como o Github. Cabe, portanto, a um tech lead ler o código e validar se o candidato tem o conhecimento necessário.

O resultado se assemelha ao do desafio de código, afinal pode ser exatamente um projeto derivado de um desafio anterior. Caso seja necessário aferir mais alguma habilidade ou conhecimento, pode ser feito um teste direcionado para a o tópico específico. Acrescente-se às desvantagens o fato de que um candidato pode tão somente copiar o código de qualquer fonte ou usar um gerador de código.

Prós

  • Avaliação sem demanda de esforço por parte do candidato;
  • Se necessário, permite que se faça apenas a avaliação de habilidade ou conhecimento específico;
  • Avaliação rápida.

Contras

  • Possibilidade do candidato simplemente copiar de uma fonte qualquer.

voltar ao topo

Aos recrutadores

Um desempenho ruim em um teste de validação, especialmente nos mais superficiais, não significa que o candidato possui habilidades ou conhecimentos insuficientes. Ademais, é importante saber quais requisitos são realmentes necessários para o exercício da função e quais são secundários. Nos dias de hoje, existem muitas formas de resolver problemas complexos, graças à infinidade de fontes de conhecimento disponíveis e ao conhecimento consolidado e compartilhado. Portanto, compõe o leque de habilidades importantes de um desenvolvedor de software saber fazer a pergunta certa a fim de encontrar a resposta de que precisa, tornando dispensável ter tudo na ponta da língua.

Ademais, aos recrutadores e tech leads que participam dos processos seletivos, fica o convite para que, além de aplicar qualquer dos formatos de validação técnica, incluam também ao processo alguma devolutiva, o famoso feedback, nesse caso feedback técnico, a fim de que o candidato possa, se for o caso, conhecer as próprias falhas e também se preparar melhor para as próximas oportunidades que surgirem. Esse feedback não precisa ser detalhado e completo; pode ser apenas um resumo ou mesmo as notas feitas pelo entrevistador que o levou a concluir negativamente a respeito do candidato.

voltar ao topo


Opinião

Após já ter sido submetido a todos esses tipos de avaliação, acredito que a melhor forma de aferir o conhecimento de um desenvolvedor de software consiste na soma de algum teste técnico, seguido de entrevista técnica de modo que é possível avaliar tanto a fluência na linguagem em que se pretende trabalhar quanto a compreensão acerca dos desafios mais comuns ao se manter um código com alta complexidade e demanda, bem como permite fazer a revisão do código submetido a fim de compreender a forma como o candidato raciocina e resolve problemas.

Pessoalmente eu escolheria a avaliação de repositórios públicos compartilhados e mantidos pelo candidato ou o desafio de código com projeto seguido de entrevista técnica. Essa combinação tem as melhores chances de conhecer a profundidade do conhecimento do candidato bem como a capacidade de resolver problemas e ainda aferir domínios não técnicos como auto-controle e comunicação.

voltar ao topo

Uso de Inteligências Artificiais

Ou outras ferramentas dentre as tantas que existem

Na esteira das inovações tecnológicas, surgem as IAs linguísticas, com destaque para o ChatGPT, que sugerem código razoável a partir de uma descrição simples, e sugerem código completo caso a solicitação seja abrangente e bem feita. Inclusive, nada impede seu uso junto a qualquer dos tipos de validação técnica citados até aqui. Em vista disso, as validações técnicas precisam, mais do que nunca, considerar a existência e o uso dessas novas ferramentas, pois agora o ChatGPT já possui treinamento suficiente para ser aprovado em recrutamento do Google.
Ou seja, esse artigo envelhecerá muito rápido e as validações técnicas e processos que não se modernizarem, envelhecerão junto.

Isso também levanta a questão: quais ferramentas fazem ou devem fazer parte da rotina diária de programadores, e quais devem ser consideradas durante uma validação técnica?

voltar ao topo


Esse texto também foi publicado no Linkedin e foi esboçado no GitHub.

Carregando publicação patrocinada...