Modelo de prova para seleção de programador

O conceito de desenvolvimento é o que é entendido do negócio para a implementação[/quote]

Aliás, o que o meu comentário tem a ver com o conceito de desenvolvimento???

Seria dificil numa prova, ou mesmo numa entrevista, dizer se a pessoa consegue “entender regras de negócio”. Isso, infelizmente, você só verá com o tempo. A prova e a entrevista, embora imperfeitas, podem ajudar a selecionar baseados no que pelo menos podemos mensurar de maneira mais objetiva.

Mas, desenvolver é, no final das contas, transformar essas regras de negócio em um programa de computador. Preferencialmente, num que possa ser mantido depois, por pessoas diferentes. Por isso digo que, no final das contas, o cara tem que saber sentar e escrever algumas linhas de código. E nisso, a prova realmente ajuda a selecionar.

Aqui onde trabalho, nosso código também é muito focado em implementação, por isso talvez esse modelo funcione tão bem.
Faz parte do perfil de aplicações que temos.

[quote=ViniGodoy][quote=Marcio Duran]O conceito de desenvolvimento é o que é entendido do negócio para a implementação , e não ao contrário, poderia lhe questionar uma prova aplicando algo tão simples e um ambiente extremamente desconhecido, e isso não me iria somar em nada.
[/quote]

Ok, mas do que adianta você contratar um programador se nem a sintaxe básica da linguagem ele sabe?[/quote]]

Você aplica um problema, e pede para resolvê-lo com a tecnologia que sua empresa emprega ae(No caso java, não sei). Aqui aplicamos problemas de análise de imagens digitais, e deixamos os candidatos resolverem em qualquer linguagem que utilizamos em nossos projetos(c/c++, java ou pascal). Se o candidato resolve, ele tem gabarito para trabalhar.

[quote=peczenyj]Uma prova não significa nada.

Veja como ele reage sob pressão: coloque toda a equipe a fazer perguntas que vcs achem pertinentes e peça pra ele falar de si.[/quote]

Steve Jobs style!

[quote=ViniGodoy]Aqui aplicamos prova + entrevista.

Porém, fazemos uma prova beeem diferente da encontrada na certificação. Ela é dividida em três tipos de pergunta, em ordem aleatória:

  1. Perguntas que testam conhecimento da sintaxe, nos principais elementos da sintaxe que usamos: “Crie um tipo enumerado, para representar as operações de SOMA, SUBTRAÇÃO E DIVISÃO, e faça um método/função aplicar() que, dado um enum, realize a operação”.

  2. Perguntas conceituais, relacionados ao projeto de classes, ou a problemas comuns de programação:
    “Qual é o erro do código abaixo? Podemos dizer que ele viola o encapsulamento?”

[code]public class ClasseComMatriz {
private int[] matriz;

public ClasseComMatriz(int[] matriz) {
     this.matriz = matriz;
}

public int[] getMatriz() {
     return matriz;

}
[/code]

  1. Perguntas de conhecimento específico que nos interessam: collections, threads e sockets, por exemplo.

O que não tem na prova: Pegadinhas de sintaxe, análise de códigos rebuscados (se tiver análise de código, seria de um que escreveríamos na prática), etc. A idéia é que a prova não faça o candidato se sentir um palhaço. Aliás, alguns que vão mal até elogiam o conteúdo da prova e pedem dicas de onde se pode estudar o seu conteúdo!

A correção também não se resume em certo/errado. Analisamos o código produzido, as observações do candidato e os cuidados que eles tomam na prova. Por exemplo, há candidatos que validam a entrada lançando exceções, outros mostram claramente que não sabem qual collection usar em cada situação (embora as vezes gerem um código funcional, mas pouco eficiente).

Na última prova, também deixamos a documentação de uma classe mais “exótica” e pedimos para o candidato fazer algo com ela. Só um conseguiu responder a questão e ganhou pontos na entrevista ao dizer que também não conhecia a classe, só soube ler o javadoc e o trail da Sun.

A prova faz a filtragem “básica”. É impressionante o número de pessoas que simplesmente abandonam a prova, ou erram todas as questões, inclusive as fáceis, ou que mostram desconhecer a sintaxe do Java 5+.

Depois disso, fazemos uma entrevista com os mais bem colocados para ver o perfil da pessoa, sociabilidade, interesses, planos, etc.

O processo tem funcionado muito bem, até hoje. Curiosamente, profissionais certificados tem ido tão mal quanto os não certificados. Eles dificilmente erram as questões de sintaxe, mas não raro produzem códigos tão rebuscados quanto o das provas que eles estudaram tanto para passar. Não temos um espaço amostral grande o suficiente para dizer que isso é uma regra, mas já é um indício que ter um certificado pode não ser garantia de sucesso na contratação, caso estejam sabendo alguém que saiba programar.[/quote]

Só por curiosidade…

A 1)

public enum Operador{
ADICAO{
public double aplicar(double fator1, double fator2){
return fator1 + fator2;
}
},SUBTRACAO{
public double aplicar(double fator1, double fator2){
return fator1 - fator2;
}
},DIVISAO{
public double aplicar(double fator1, double fator2){
return fator1 / fator2;
}
}

public abstract double aplicar(double fator1, double fator2);
public double aplica(Operador operador, double fator1, fator2){
return operador.aplicar(fator1, fator2);
}
}

Pelo que entendi da pergunta seria isso.

Sim… pois ao guardar a referencia a matriz ao inves de copiar seu valor para o atributo, qualquer alteração na matriz original modificara também a matriz na classe.

Passei perto?

E perguntaria algo do tipo:

Estamos montando com sets e gets vários objetos de tipo Pessoa ao mesmo tempo que os adicionamos a uma lista, porém todos as pessoas dessa lista acabam sendo a mesma pessoa do último adicionado. O que pode estar acontecendo?

[size=7]Dica: É um problema de mutabilidade.[/size]

Eu acho essencial testar o conhecimento do candidato. Pois gente pagando de bonzão que não sabe programar e só faz lero-lero tem aos montes.

Na prova, seria interessante colocar, além de perguntas que testam os conhecimentos, algumas perguntas que pedem coisas sem sentido ou sobre alguma coisa que não existe, para avaliar que tipo de resposta o candidato dá.

[quote=ViniGodoy]Aqui aplicamos prova + entrevista.
[/quote]

Tô careca de ver Certificado que não sabe nada sobre Arquitetura de Sistemas… Persistência… tratamento de interface Web…

Não ajuda muito fica esmiuçando se o cara lembra o comando tal ou sintaxe tal…

Para resolver problemas… o candidato tem que ter discernimento, inteligência…

Por exemplo: esse problema com o Enum… alguns gostam de utilizar o padrão: Polimorfismo:

Justamente para não encher o programa de ifs (procedural)…

Como tratar condicionais com base no tipo: Polimorfismo… dai o cara pode nem usar enum exaustamente… mesmo sendo um profissional que poderia acrescentar a equipe… não vai passar no teste…

De um aspecto comum, não há apenas uma forma de resolver o problema…

Acho que uma boa conversa, indo em detalhes, ajuda.

O problema ai, é que tem gente que não gosta de “argumentar”, principamente com um candidato.

:cry:

[quote=victorwss]Eu acho essencial testar o conhecimento do candidato. Pois gente pagando de bonzão que não sabe programar e só faz lero-lero tem aos montes.

Na prova, seria interessante colocar, além de perguntas que testam os conhecimentos, algumas perguntas que pedem coisas sem sentido ou sobre alguma coisa que não existe, para avaliar que tipo de resposta o candidato dá.[/quote]

- Quem é apto a dar qualquer prova ?

[quote=victorwss]Eu acho essencial testar o conhecimento do candidato. Pois gente pagando de bonzão que não sabe programar e só faz lero-lero tem aos montes.

Na prova, seria interessante colocar, além de perguntas que testam os conhecimentos, algumas perguntas que pedem coisas sem sentido ou sobre alguma coisa que não existe, para avaliar que tipo de resposta o candidato dá.[/quote]

Reposta:
Isso non ecziste!

[quote=Maracuja]Só fazendo um comentário aqui, nada melhor para selecionar um desenvolvedor, ver se ele realmente sabe desenvolver algo… como? Acho interessante pedir que ele desenvolva um projeto, ai dependendo do perfil que vc procura, peça um projeto específico, por exemplo:

  • Fazer um projeto WEB utilizando JSF que faça uma Pesquisa utilizando os Serviços estilos REST providos pelo yahoo, mostrar os resultado na tela, disponibilizar um botão que exporte os resultados para um arquivo texto. De uns dois dias para que ele desenvolva o projetinho em casa.

Bom ai vai da sua imaginação.

Peça para te entregarem o projeto, talvez com um arquivo de buid do ANT para o projeto, todo o Javadoc e assim em diante. Depois vc ainda pode qustionar o desenvolvedor a respeito das escolhas feitas para o projeto, por que fez em camadas ou não e outras coisas deste tipo.

Espero que ajude.

[]'s[/quote]

O profissional precisa só de treinamento, e ter afinidade sobre tecnologia, o resto é resto.

Você já fez ensino fundamental, ensino médio, vestibular, faculdade, alguns treinamentos por aí e talvez mais que isso. Então você já sabe a resposta.

O resto é caro, demorado e nem sempre é garantido.

Faça como a HashRocket do Obie Fernandez, e a primeira empresa que trabalhei, selecione os candidatos com entrevistas com RH, equipe técnica, e depois coloque-o para ficar um tempo produzindo, e veja como ele se vira ( é um modelo bastante difícil de aplicar, porém muito objetivo), pode ter certeza que manter um cara 1 mês produzindo para avalia-lo é menos custoso que fazer enormes processos seletivos, e contratar um “CHARADA”.

A sugestão do pac-man é muito interessante também e se encaixa. É fácil notar a capacidade do profissional em uma boa conversa.

Agora não adianta colocar uma prova com fatorial, questões de Thread, e assuntos dos blue prints, se a realidade que o cara vai ter para trabalhar é um ambiente distribuído com alta regras de negócio e dados seguros(banco de seguro), e o cara se desespera quando tiver que fazer a primeira troca de mensagens com jms; :wink:

Um exemplo simples é a “dúvida cretina”, a galera nem procurou nos docs do framework, fóruns, mailslist, no google, e dizem que simplesmente tem uma dúvida, esses podem muito bem passar em uma prova de emprego.

Já vi pessoas sem experência nenhuma dar conta de problemas realmente grandes.

Eu costumo falar que você tem que ser visto(leia-se PAGO) não pelo que faz, mas pelo que tem capacidade de fazer.

Abraços

Fazer uma prova é coisa de nerd.

Só pergunta se ele toma cerveja… Caso sim, pode contratar!

Regra: Todo programador toma cerveja.

[quote=Maracuja]Só fazendo um comentário aqui, nada melhor para selecionar um desenvolvedor, ver se ele realmente sabe desenvolver algo… como? Acho interessante pedir que ele desenvolva um projeto, ai dependendo do perfil que vc procura, peça um projeto específico, por exemplo:

  • Fazer um projeto WEB utilizando JSF que faça uma Pesquisa utilizando os Serviços estilos REST providos pelo yahoo, mostrar os resultado na tela, disponibilizar um botão que exporte os resultados para um arquivo texto. De uns dois dias para que ele desenvolva o projetinho em casa.

Bom ai vai da sua imaginação.

Peça para te entregarem o projeto, talvez com um arquivo de buid do ANT para o projeto, todo o Javadoc e assim em diante. Depois vc ainda pode qustionar o desenvolvedor a respeito das escolhas feitas para o projeto, por que fez em camadas ou não e outras coisas deste tipo.

Espero que ajude.

[]'s[/quote]

Eu acho que pegaria muito tempo do cara.
Dependendo da empresa eu não perderia tempo com fazendo um projeto desses só pra ve se ela ia gostar de mim. Acho que tem que ser mais objetivo.

Eu particularmente acho que uma prova pode filtrar alguns dentre muitos candidatos, se for o caso, mas ainda acho que depende do perfil de profissional que voce quer contratar. Eu faria uma entrevista apenas conversando com o profissional, pediria para que ele falasse dos projetos que trabalhou, tecnologias empregadas, etc. Dentre essas tecnologias, escolheria umas duas ou tres e pediria a ele que fizesse algum pequeno projeto, aproveitando a ideia do maracuja, de uns dois dias e entao peca a ele que apresente o projeto e explique tudo que fez, veja os codigos, etc. mas como disse, depende do tipo de profissional q voce quer, fazer isso para contratar um programador jr. nao seria nada facil… ja para um pleno ou senior, poderia funcionar.

[quote=Maracuja][quote=ivo costa][quote=Maracuja]Só fazendo um comentário aqui, nada melhor para selecionar um desenvolvedor, ver se ele realmente sabe desenvolver algo… como? Acho interessante pedir que ele desenvolva um projeto, ai dependendo do perfil que vc procura, peça um projeto específico, por exemplo:

  • Fazer um projeto WEB utilizando JSF que faça uma Pesquisa utilizando os Serviços estilos REST providos pelo yahoo, mostrar os resultado na tela, disponibilizar um botão que exporte os resultados para um arquivo texto. De uns dois dias para que ele desenvolva o projetinho em casa.

Bom ai vai da sua imaginação.

Peça para te entregarem o projeto, talvez com um arquivo de buid do ANT para o projeto, todo o Javadoc e assim em diante. Depois vc ainda pode qustionar o desenvolvedor a respeito das escolhas feitas para o projeto, por que fez em camadas ou não e outras coisas deste tipo.

Espero que ajude.

[]'s[/quote]

Eu acho que pegaria muito tempo do cara.
Dependendo da empresa eu não perderia tempo com fazendo um projeto desses só pra ve se ela ia gostar de mim. Acho que tem que ser mais objetivo.[/quote]

Bom, ai são outros 500. Mas que dessa forma é possível filtrar os code monkeys e fakes dos profissionais bons, isso é.

ps: pra fazer o projetinho acima, um profissional não gastaria mais que 4 horas.

[]'s[/quote]

?uma andorinha só não faz verão?

[quote=Maracuja][quote=Marcio Duran][quote=Maracuja]Só fazendo um comentário aqui, nada melhor para selecionar um desenvolvedor, ver se ele realmente sabe desenvolver algo… como? Acho interessante pedir que ele desenvolva um projeto, ai dependendo do perfil que vc procura, peça um projeto específico, por exemplo:

  • Fazer um projeto WEB utilizando JSF que faça uma Pesquisa utilizando os Serviços estilos REST providos pelo yahoo, mostrar os resultado na tela, disponibilizar um botão que exporte os resultados para um arquivo texto. De uns dois dias para que ele desenvolva o projetinho em casa.

Bom ai vai da sua imaginação.

Peça para te entregarem o projeto, talvez com um arquivo de buid do ANT para o projeto, todo o Javadoc e assim em diante. Depois vc ainda pode qustionar o desenvolvedor a respeito das escolhas feitas para o projeto, por que fez em camadas ou não e outras coisas deste tipo.

Espero que ajude.

[]'s[/quote]

O profissional precisa só de treinamento, e ter afinidade sobre tecnologia, o resto é resto.[/quote]

Se eu quisesse alguém com este pefil contrataria um estagiário, e não um profissional.[/quote]

Profissional não faz prova, resolve.

Se for mulher faça o teste do sofa, caso tronario acho que a da cerveja já resolve.

Bom agora falando sério, acho que as provas são importantes pra o profissional ao menos saber o que ele vai ter que enfrentar na empresa (as vezes os anuncios enganam), e para empresa saber se o profissional tem alguma noção do serviço (as vezes os curriculos enganam).

Eu por exemplo fiz uma provinha basica de HTML, Javascript e lógica em java , daquelas valor X entra no método quanto é o valor de X ao sair dele.
Até hoje não sei se fui muito bem na prova, mas estou aqui empregado e fazendo meu serviço.

[quote=Maracuja]Pensei que o tópio era sobre:

Modelo de prova para seleção de programador.

Ja desvirtuou, só espero que tenha ajudado o autor em alguma coisa.

[]'s[/quote]
Não desvirtuou, o problema é o que estamos discutindo, onde nisso temos opiniões baseados em contradições do que se julga e como de proceder avaliação de um profissional(candidato), sempre foi um paradigma, pior no setor de Tecnologia da informação.