Uma solução objetiva para avaliar proficiência de pessoas desenvolvedoras

Adriano Croco
5 min readFeb 15, 2022

--

Olá!

Um problema bastante comum que toda pessoa desenvolvedora passa é responder a seguinte pergunta de forma assertiva: qual é o meu nível de proficiência em uma determinada linguagem de programação?

Baseado nisso, porque não utilizar de metodologias conhecidas e medir proficiência em uma linguagem de programação usando de ferramentas já consolidadas de outras áreas do conhecimento?

Como sempre, ressalto a importância da multi-disciplinaridade para sermos profissionais melhores.

Eu não sou linguista, porém, eu acho muito interessante a forma como os seres humanos interagem com suas respectivas línguas e como elas são derivadas uma das outras até chegar na forma que falamos hoje em dia. Só para ilustrar a complexidade que isso pode chegar, gostaria de deixar a seguinte imagem para ilustrar:

Árvore com boa parte das línguas modernas, a partir de um ancestral comum

Se você percebeu que é mais fácil entender um pouco de italiano, romeno, francês ou espanhol se você fala português, por exemplo, é devido ao fato que todas essas línguas possuem ancestrais comuns.

E isso se aplica a linguagens de programação também:

Árvore genealógica de linguagens de programação

C++ e Java são parecidos com C#, pelo mesmo motivo: todas elas vieram de um ancestral comum (a linguagem C).

Uma das formas de se medir a proficiência de alguém em alguma determinada língua é utilizar um método padronizado de avaliação, reconhecido entre os especialistas no assunto. Se você já fez algum teste de proficiência em inglês, provavelmente já teve seu conhecimento classificado em algum nível, utilizando uma metodologia como o TOEFL ou IELTS.

Uma outra metodologia comum para avaliar isso é a Common European Framework of Reference for Languages: Learning, Teaching, Assessment (CEFR), que usa quadrantes (de A1 até C2) para classificar o grau de domínio de alguém em uma língua. O CEFR é um método consolidado de avaliação pela União Europeia.

E porque eu to dizendo tudo isso? bem, eu encontrei esse site aqui, de um cientista da computação holandês chamado Rafael Poss, que fez um trabalho de adaptar a mesma metodologia do CEFR de avaliação de proficiência em uma determinada língua para avaliar proficiência em uma linguagem de programação. E achei uma ideia incrível!

O resultado é uma matriz que mede em 6 níveis os seguintes domínios do conhecimento: Escrita (com as seguintes dimensões: escrita de código, refatoração e embarcação em sistemas maiores), Entendimento (que avalia as capacidades de reutilização de código e explicar/discutir código) e Interação (que considera exploração/auto-didatismo, domínio do ambiente e resolução de problemas).

A matriz completa fica assim:

Teste de proficiência em uma linguagem programação

Porém, é possível deixar isso melhor. O próprio autor disponibilizou essa matriz em forma de uma aplicação web nesse link aqui, na qual reproduzo na seguinte imagem:

print da tela inicial do teste

Basta apenas adicionar a linguagem que quiser e efetuar o teste (de forma sincera, vale frisar). A dica que eu dou é: se você não tem certeza sobre uma determinada pergunta, é melhor responder que não. Além disso, é possível fazer o teste em várias linguagens ao mesmo tempo. Muito útil para comparar seu próprio nível de proficiência entre elas.

E foi o que eu fiz. Eu fiz o teste para duas linguagens ao mesmo tempo: C# (que basicamente é a pedra angular da minha carreira como desenvolvedor, que eu tenho quase 10 anos de experiência) e Go (que estou aprendendo junto com o meu time no meu trabalho atual, porém, não escrevo tanto assim no meu dia-a-dia).

Os resultados obtidos foram:

resultado do meu teste em c#

E fez bastante sentido!

Eu já atuei em cenários bem complexos (de acordo com o critério de complexidade proposto pelo teste, no caso) em C#, como fazer engenharia reversa de código alheio, atuar em bugs não determinísticos, dizer quando o código é idiomático ou até mesmo entender as principais arquiteturas usadas nessa linguagem.

Porém, o reuso de conhecimento tem um limite, no qual mostra o resultado do teste para Go:

resultado do teste para go

Em linhas gerais, o teste mostra que eu conheço a sintaxe básica e conseguiria explorar um pouco da linguagem com ajuda. E só. Todo o restante é reutilização de técnicas que aprendi ao longo da minha carreira e que são aplicáveis a qualquer linguagem (como refatoração e solução de problemas).

Ou seja, eu sou Junior em Go. E tá tudo bem.

Outro ponto: apesar de C# ter surgido de Java, tenho certeza que eu teria um resultado do teste parecido com Go, dado que a proficiência vem de diversos fatores e não somente de sintaxe parecida, dado as outras dimensões que o teste avalia.

Para finalizar, gostaria de propor duas coisas: que você que está lendo faça o teste de forma sincera para ter uma ideia do seu nível de proficiência e onde precisa melhorar. E a outra é quase um estudo antropológico: peça para aquele seu colega de trabalho que se acha Sênior (com 2 anos de experiência) para fazer esse teste e me mostre o resultado, só para eu testar um negócio.

Obrigado por ter me lido até aqui!

Até a próxima!

Você gostou do conteúdo e gostaria de fazer mentoria comigo? Clique aqui e descubra como.

--

--