Selecionando os melhores programadores?

Conversando com um amigo no ICQ há pouco tempo atrás tive uma discussão bem interessante sobre qual a melhor maneira de contratar um profissional.

Já tive de fazer algumas entrevistas em candidatos, todos muito bons, para uma vaga, e sei como essa é uma tarefa complicadíssima. Quais as “melhores práticas” pra isso?

Hummmm … eu ainda não precisei selecionar ninguem, mas ja fiz muitas entrevistas :lol:

O estilo que eu mais gosto é:

  1. Perfil psicológico (inclui emocional): verifica se o candidato se encaixa psicologicamente na vaga (tipo, alguns trabalhos sao macantes, um puta programador pode ou nao gostar de fazer coisas repetidas … no meu caso prefiro ter um projeto diferente do outro, se só fizesse trabalhinhos com banco de dados eu morria, outros não)
  2. Habilidade técnica: primeiro com uma conversa com um tecnico pq isso pode mostrar muito mais do que uma prova … e depois se necessario (depende da vaga) uma provinha.

testar o candidado na prática, passando um pequeno problema (mas que faça ele pensar bastante) pra ele resolver na frente do micro (sem pizza, nem coca-cola)

pede pra ele te levar o melhor e pior codigo que ele ja escreveu.

ve se ele documenta, faz tudo bonitnho, usa interfaces.

ai voce pede pra ele fazer algo bem idiota
um sistema web de cadastro de usuarios e depois lista os usuarios. ele pode escolher o banco de dados, se vai saur ejb/jdo/jdbc etc e como vai ser a camada de apresentacao, que pode ser tosca.

vc da 4 horas pro cara. matou. vai ter nenguinho fazendo em 30 min com as ferramentas certas. vai ter nenguinho que vai estar no javadoc do jdbc. ai voce ve o perfil que voce quer.

isso é [muito] ruim?

Naaaaaaaaaaaaaaaaaao pergunta isso … o Paulo vai ficar escrevendo sobre o Hibernate horas a fio eheheheh

Não concordo com essa tática do Paulo.

Nem sempre as pessoas podem aplicar no seu dia a dia tudo quanto é ferramenta e técnicas.

O importante pra mim é o cara saber MUITO lógica de programação, saber se virar pra aprender a usar ferramentas, conhecer as técnicas existentes e ter idéia de como usar (pra nao demorar muito pra aplicar em um projeto) e por ai vai.

claro que depende do perfil … se vc tem um projeto usando determinada tecnica e quer um cara experiente essa prova vale muito, mas se precisa de um programador pra acrescentar a sua equipe acho que vale mais o perfil do cara pra aprender e desenvolver-se do que exatamente o que ele já fez.

[quote=“smota”]Naaaaaaaaaaaaaaaaaao pergunta isso … o Paulo vai ficar escrevendo sobre o Hibernate horas a fio eheheheh
[/quote]

hehehe, eu perguntei porque acho que olhar a API (seja qual for ela) é um “hábito sadio”, sempre.
Tanto que um bom teste seria apresentar uma API estranha para o candidato e pedir à ele que faça algo útil com ela.

Tb nunca selecionei ninguem, mas fiz muitas entrevistas.

e acho q colocar o cara para programar é uma péssima ideia, ainda mais se o cara estiver desempregado. Pois, pode acontecer do cara ser um ótimo profissional, mas devido a sua situaçao atual e a entrevista em sí, pode fazer alguma besteira, ou simplesmente não programar da “melhor” maneira.

acho q é melhor ter uma conversa amigavel, com colaboração de ambas as partes, com o entrevistador querendo realmente achar um profissional qualificado e não querendo deixar o entrevistado em má situacao.

Obs: tb acho q consultar o doc é um “hábito sadio”. E não a diferença entre o bom e o mal profissional. Ao contrario do q o nosso amigo disse, deve contar pontos a favor.

Taí, gostei :smiley:

Melhorando um pouquinho a idéia, se a vaga pretende que o cara mexa com uma API especifica (Servlets, JDBC, etc), pedir pra ele enumerar alguns defeitos que ele vê na API também faz o cara pensar bastante. E se ele afirmar categoricamente que a API não tem defeitos, é bom que ele (e vc, lógico :D) tenha argumentos pra provar isso.

Lógica de programação, por si só, não faz nada. Dá pra pegar a primeira pessoa que aparecer na frente na rua e ensinar lógica de programação em algumas semanas. O que geralmente se quer, mascarado na forma de ‘lógica de programação’, é habilidade em resolver problemas.

E, infelizmente, não dá pra ensinar qqer um na rua a resolver problemas rápido. Mas, se é assim, então como saber se o candidato sabe resolver problemas? Botar um cubo mágico na frente dele ou fazer pegadinhas de programação não adianta. E é por isso que eu gostei da idéia do Paulo - o cara tem que resolver o problema, não escrever uma tese sobre o modelo MVC.

O Joel Spolsky (http://www.joelonsoftware.com) uma vez postou um artigo muito interessante sobre isso. Não é sobre contratar os melhores programadores que já existiram na face da Terra, é contratar os melhores resolvedores de problemas, que por acaso sabem programar. Eis a URL:

Existe um livro interessante que trata do assunto…

IT Problem Management…

http://www.oziel.com.br/ebooks.html

O teste do Paulo é legal, mais depende do contexto.

Se minha empresa ja trabalha com tecnologias XYZ e tem um projeto para iniciar em uma semana, e quero alguem experiênte nelas para iniciar rapidamente os trabalhos, o teste será com elas(não acho legal contratar no desespero mais ja vi isso acontecer).

Caso o desejo seja conseguir alguem para somar a equipe de desenvolvedores, uma pessoa que seja dinâmica e que aprenda rápido.
Eu faria o teste do Paulo porém, acrescentava o seguinte:

Ele teria um caso de uso para resolver e teria liberdade para escolher quais tecnologias usar para isso(assim como o Paulo recomendou), ao final além do programa estar rodando, o candidato deveria justificar cada tecnologia empregada na solução, o porque disso etc. Também seria levado em conta o tempo para resolver o problema, ou seja, ele tb poderia justificar que outra solução seria melhor mais como seria necessário mais tempo ele optou por uma outra solução.

Outro tipo de teste é mostrar um sistema para ele e pedir para que ele aponte os defeitos e indique que soluções devem ser usadas e porque.

Bem nunca fiz teste com ninguem, mais acho que esse levaria em conta a criatividade e conhecimento técnico do candidato.

A teoria toda é muito legal.

Na verdade acredito que o ideal mesmo é o feeling, nada como conversar com a pessoa e sentir até onde ela é capaz de ir.

Aplicar provas, em certas ocasiões é interessante, porém, como já dito anteriormente, o profissional pode estar passando por algum problema no dia e não apresentar o melhor que pode.

Conversando com a pessoa e olhando o nível de evolução dela (o quanto agregou de conhecimento em determinado período), o que já fez anteriormente (se for possível ver o projeto), deve ser uma boa saída pois assim você sabe do que ela foi capaz e tem como estimar o que será capaz de fazer.

Concordam?

Eu nunca avaliei ninguém, porém, creio que esta seja uma idéia pelo menos boa… (desde que quem entrevista tenha os conhecimentos necessários para tanto, o que muitas vezes não acontece).

[]'s

isso é [muito] ruim?[/quote]

opa
soh para deixar claro
consultar o javadoc eh MUITO bom. mas apos quatro horas de programacao, se ele ainda estiver procurando coisas no javadoc da conexao para fazer o insert, ai eh sinal de que: o cara tinha nenhuma ou pouca experiencia com jdbc, ou o cara eh ruim.

ter muita logica de programacao nao adianta muito nao. eu considero que eu tenho bastante, mas se um cara quer um programdor de C++ pra hoje, eu nao vou ser de muita ajuda a ele.

Eu acho que a prova prática deve ser critério de “desempate”. Se o cara passou ileso pela análise de curriculo e pelo bate-papo (onde se pode avaliar um monte de coisa, jogando assuntos para vc sentir até onde vai o conhecimento do cara, em design, arquitetura, onde ele busca atualização, etc e tal), uma prova prática cai bem, se vc tem mais opções do que vagas.

Nesse caso, acho que colocar o candidato numa situação adversa é um bom teste. Uma aplicação mal-desenhada, para o candidato “resolver” o problema, e vc avaliar como ele se comporta. Talvez até num micro lento, só pra sentir a paciência do cara! :stuck_out_tongue: Acho que colocar o candidato pra fazer uma aplicação “do zero” é fria, todo mundo com um minimo de material na mão não começa nada do zero. Isso pode atrapalhar a avaliação.

Isso me faz lembrar lembrar o episodio onde, somente para verificar se o cara tinha um minimo de logica e conhecimento, pedi para ele que escrevesse um algoritmo ( da maneira que achasse melhor ) para escrever uma palavra ao contrario. Simplemente ridiculo nao? … bom, soh para deixar um pouco mais emocionamente troquei as letras “A” por “K” e coloquei no problme “Dica: comece substituindo as letras K por A”…

Teve nego que implementou bubble-sort … 8)

Rafael

[quote=“Paulo Silveira”]opa
soh para deixar claro
consultar o javadoc eh MUITO bom.
[/quote]

Ok, acho que nisso estamos todos de acordo :slight_smile:

Muito boa essa discusão, é ótimo saber como vcs pensam! :smiley:

na minha visão de estudante buscando estágio, acho que bons programadores não podem ser testados em algumas horas, o máximo que pode acontecer é excluir os “maus programadores”, e mesmo assim tendo muito cuidado.
Oq deve analizar um teste desses é apenas se o cara realmente conhece Java no nível desejado. Se o cara tem um bom nível de Java, conhece as tecnologias com qual a empresa trabalha e esta acostumado com as abordagens de programação usadas pela equipe, não dá para definir com um critério confiavel quem é o melhor programador, cada um é um e tem suas qualidades e defeitos que são impossíveis de serem percebidas em uma conversa de alguns minutos.

Eu acho que a principal parte de uma entrevista é antes da entrevista, quando o responsável define o perfil do profissional que está procurando, se o entrevistador souber quem ele esta procurando vai saber quando encontrar!
Ai a entrevista se torna fácil, ou o cara está no seu perfil ou não. Se ele não esta cai fora, se está pronto, acabou a seleção. E se tem mais de um no perfil, ai não importa qual seja o escolhido, todos servem, pode ate mandar eles jogarem WAR para decidir, “…quem conquistar a Europa primeiro fica” :smiley:

Uma coisa que odeio nas entrevistas é quando o entrevistador da área tecnológica decide traçar o perfil psicológico do entrevistado. É lógico que ele vai errar completamente, o cara nunca estudou psicologia. E o pior é q isso acontece bastante.
Eu acho importante saber o perfil psicologico do entrevistado para saber se ele se enquadra no perfil da empresa, mas esse perfil TEM que ser traçado por um psicologo treinado para isso, senão só atrapalha!

E a propósito, já que temos tantos entrevistadores aki, se alguem estiver procurando um estagiário de Java, estudante da PD na FATEC-SP, com conclusão em 06/2004, estou disponível :smiley:

Concordo plenamente com nosso amigo danieltaranta quando ele diz:
“…a principal parte de uma entrevista é antes da entrevista…”, pois acontece, muitas das vezes, q nem os próprios responsaveis pela entrvista sabem o q querem.

Procuram um Profissional Java q sejam DBA’s, ou q saibam PhotoShop, e seja um ótimo programador em VB ou Delphi, por exemplo.

E muitas das vezes, ao final da entrevista nos pergundamos: O que ele quer afinal? Programador Java, Prog. VB, Delphi, DBA ou Designer???

Êpa… vou requerir direitos autorais dessa sugestão… :lol: