Da minha experiência em minha empresa, onde fiz muitas entrevistas, há uma boa chance de a pessoa entrevistada não ter idéia de como fazer isso corretamente. Então, eles prepararam um conjunto de perguntas técnicas, calcularam uma pontuação e fizeram disso seu currículo. No entanto, isso tem muitas desvantagens e não deve ser feito pelos seguintes motivos:
Você pede conhecimento pontual. Se o programador nunca fez algo nessa área, ele ainda pode ser um excelente colega de trabalho, mas simplesmente não conhece essa resposta específica. Por outro lado: se alguém se preparou para a entrevista e encontrou a resposta para essa pergunta específica na rede, você obtém a resposta certa, mas essa pessoa pode não ter idéia do tópico real.
As pessoas estão nervosas nas entrevistas de emprego. O cérebro tem esse ótimo recurso para desligar muitas áreas de nível superior (como a lógica) se estiver em pânico, o que significa: se você estiver nervoso, poderá não fornecer a qualidade das respostas que faria em uma situação cotidiana. Algumas pessoas podem lidar com uma situação estressante como uma entrevista, muitas não conseguem.
Com uma resposta única e correta, você testa as habilidades dessas pessoas para encontrar essa resposta específica. Essa é uma das muitas habilidades que um colega de trabalho precisa, mas não a única e única necessária. Portanto, uma ou duas dessas perguntas devem ser suficientes para testar essa área do conhecimento e, em seguida, outras habilidades devem ser consultadas. Uma entrevista que contém apenas perguntas para solucionar problemas testa a mesma habilidade repetidamente.
Quais são as perguntas sobre as boas tarefas de programação?
As famosas perguntas "Você pode escrever um programa curto" têm o enorme problema de que a maioria dos programadores não consegue escrever uma única linha de código sem que o IDE os ajude. Mas isso não é problema nas situações do dia-a-dia, porque o programador sempre tem seu IDE ajudando-o. Então, perguntar coisas como "Encontre o erro", "Escreva 50 linhas de código que funcionem ..." ou até mesmo perguntas simples precisam levar em conta, para que o solicitante não tenha suas ferramentas (IDE, Google) disponíveis.
Por exemplo, posso responder a você basicamente qualquer pergunta em um minuto, se o Google estiver me ajudando, mas sem conexão à Internet, pareço desamparado. Eu chamo isso de memória terceirizada e, em vez de me atrapalhar, me ajuda muito a focar no que é realmente importante - entender a mecânica subjacente - porque todo o resto pode ser procurado. Mas não me pergunte sobre os detalhes de nenhuma API aleatória, porque não os conheço, tenho o Google para isso.
Dito isto, uma boa questão de tarefa de programação não deve se concentrar em conhecer APIs ou em habilidades especiais de codificação, a menos que este seja um requisito absoluto para o trabalho. O conhecimento pode ser adquirido, portanto, é melhor descobrir o quanto essa pessoa é boa em adquirir conhecimento do que perguntar o que ela já sabe.
Uma boa pergunta para uma tarefa de programação deve ser curta, simples, capaz de ser codificada em todas as linguagens com apenas algumas linhas de código e, principalmente, deve informar o máximo possível sobre como a pessoa trabalha e encontra respostas. Exemplo:
"Escreva uma função no idioma de sua escolha que pegue uma matriz de números inteiros e reordene-os de uma maneira que o primeiro inteiro seja depois o último e todos os outros mudem de acordo."
O primeiro que qualquer candidato deve perguntar neste momento é: "Desculpe ... você pode explicar a tarefa?". Porque nenhum programador recebeu uma descrição clara do que fazer. Isso é seguido pela explicação de que o código nas perguntas deve fazer um deslocamento para a esquerda do conteúdo da matriz com o excesso sendo adicionado à direita.
Essa tarefa é tão simples que qualquer pessoa que se formou em qualquer forma de nível de programação deve responder adequadamente. Isso leva em consideração que o programador precisa trabalhar sem suas ferramentas e que ficar nervoso reduz a capacidade de pensar logicamente. No entanto, ele ainda mostra como as pessoas resolvem os problemas da maneira como a pergunta é formulada e da maneira como as pessoas a abordam, simplesmente porque um desvio à esquerda é contra o instinto comum da "esquerda para a direita" e obriga as pessoas a pensar em um segundo.
Há muitas respostas possíveis para essa pergunta, portanto, examinar atentamente a maneira como o código é desenvolvido é a parte importante, não se a solução realmente funcionaria. O candidato testa nulo? Como o estouro é armazenado? É usado um loop ou um conjunto de memórias? Como o candidato verifica a correção do código? Esta pergunta simples mostra uma biografia inteira sobre como essa pessoa trabalha.
Quais são as boas questões de conhecimento geral?
As boas perguntas são fáceis de responder, permitem uma grande quantidade de respostas (chamadas de 'perguntas abertas') e permitem que você aprenda o máximo possível sobre o candidato, no menor tempo possível.
Exemplos:
(Perguntando a um programador de C ++): "Quais outras linguagens além de C ++ você conhece?"
Esta é uma pergunta de nível de entrada, que oferece ao candidato uma chance justa de resgatar neste momento, caso ele não saiba nada sobre o tópico solicitado. Um 'não' neste momento é melhor do que atormentá-lo com várias outras perguntas que ele / ela precisa responder: "Desculpe, não sei nada sobre isso."
Além disso, ele diz em primeiro lugar quais outras linguagens essa pessoa conhece, além disso, você aprende o quanto essa pessoa está interessada em ter uma visão mais ampla do mundo da programação ou se você tem alguém com apenas uma linguagem singular (e, portanto, recursos / técnicas ) Visão.
(Em seguida, digamos que ele conhece Java): Quais são as três principais diferenças entre C ++ e Java em sua opinião? "
Esta é uma pergunta aberta que permite muitas respostas, para que o candidato tenha uma boa chance de encontrar pelo menos três. Solicitar os três primeiros (opinião pessoal) não apenas limita as respostas possíveis, mas também força o solicitante a classificar com base na prioridade. Ainda assim, é (ou deveria ser) fácil de responder.
Essa é uma pergunta simples que testa muito conhecimento profundo sobre diferentes linguagens de programação. Qual é a profundidade do conhecimento desses tópicos? A partir dessas respostas, você pode dizer muito sobre o conhecimento e a compreensão real da mecânica subjacente das linguagens de programação. Quanto essa pessoa gastou com os detalhes sujos ou se é apenas alguém que vincula várias funções da API sem nenhuma pista real do que acontece por baixo delas.
Esse conceito de perguntas básicas, seguido de perguntas simples e aprofundadas, também pode ser usado para a maioria dos outros tópicos. Sempre neste esquema: pergunta de resgate, pergunta de verificação, pergunta detalhada. Outro exemplo (de uma entrevista em Java):
- "Como você classificaria sua experiência com desenvolvimento multiencadeado?"
- "Cite o que você acha que são as três principais coisas mais importantes a considerar ao desenvolver um aplicativo multiencadeado".
- "Indique três classes da API Java que podem ajudá-lo no desenvolvimento desses aplicativos e faça uma breve descrição sobre o que eles são usados."
Essas três perguntas informarão mais do que qualquer pergunta técnica sobre o que o candidato realmente sabe sobre esses tópicos, ao mesmo tempo em que é justo responder considerando o conhecimento pontual e o nível de estresse.
Portanto, da próxima vez que alguém fizer 20 perguntas de codificação em sequência, você saberá que ele ou ela não tem basicamente idéia de como entrevistar alguém adequadamente. ;)