Bons projetos de programação de entrevistas [fechado]


26

Estou procurando alguns pequenos projetos de programação que eu possa dar aos funcionários em potencial para avaliar suas habilidades de programação. Estes serão programadores que saem da faculdade. Estou procurando por projetos que levem a alguém algumas horas e eles retornariam suas respostas após a entrevista.

Um exemplo seria pegar este parágrafo do texto e retornar uma lista de palavras únicas em ordem alfabética. Depois de cada palavra, diga-me quantas vezes a palavra apareceu e em que sentimento (s) a palavra foi aprendida.

Alguém tem alguma boa sugestão?


Perguntas do concurso de programação ACM. Você pode encontrar um arquivo dessas perguntas aqui .
Whatsisname

1
Esses sites de quebra-cabeça de programação seriam interessantes para você? programadores.stackexchange.com/questions/756/programming-puzzles/…
grokus

Respostas:


43

Há muito tempo concluí que nada que alguém possa fazer em pouco tempo pode me dizer algo útil sobre essa pessoa. Mas todo bom candidato já tem projetos pessoais escritos, o que pode lhe dizer muito. Por isso, substituí desafios específicos por "me dê um código do qual você se orgulhe e tenha prazer em marcar seu nome".

A escolha do projeto indica mais do que qualquer tarefa de uma hora. E então você pode passar uma hora discutindo isso para aprender ainda mais.


4
Lembro-me de entrevistar em uma empresa e receber uma função bastante simples (linha 15-20) e ser perguntado "O que isso faz?" Eu disse a eles e perguntei "Alguém entendeu errado?". Foi-me dito que a maioria das pessoas que eles entrevistaram não conseguiu responder. Talvez seja uma alternativa rápida (não conheço ninguém que possa ler código que não pode escrevê-lo, mas talvez eu simplesmente não tenha conhecido as pessoas erradas).
TMN

4
@TMN - Ah, também fazemos isso um pouco. Mas conheci pessoas que sabem ler código e não escrevê-lo bem .
Pd #

@TMN Sendo autodidata, passei uma quantidade significativa de tempo lendo o código desde o início, a ponto de ser muito melhor em lê-lo do que em escrevê-lo. Pode e acontece, leva tempo e prática para trazer à tona a habilidade de escrever.
Jimmy Hoffa

28

Fico tão cansado dessa porcaria de brincadeira. Estive em lugares que me pediram amostras de código, as separamos e depois pedimos que eu explicasse o código de exemplo de seus sistemas, que parecia ter sido escrito por garotos de 2 anos. Me pediram para implementar algoritmos de classificação obscuros, serviços de rede, guis, estruturas de dados (sempre uma árvore ou uma lista vinculada). Todo tipo de pergunta irritante e irritante sobre o que o entrevistador acha que é a parte mais importante da programação.

No final, tudo é praticamente inútil. A melhor maneira de avaliar um funcionário é contratá-lo por 30 dias e ver como ele faz o trabalho. Passe todo o tempo que quiser desenvolvendo testes, e isso não lhe dirá nada sobre como alguém trabalha no dia a dia.


8
Codificar um algoritmo simples como o bigtang descrito não é nem um pouco "brincalhão". Ser capaz de fazer algo assim deve ser um pré-requisito para até conseguir uma entrevista (e é, na minha empresa). É muito útil para selecionar candidatos que, de outra forma, ficam ótimos no papel. A última coisa que quero fazer é passar horas entrevistando alguém que não pode escrever uma função para saber se uma string é um palíndromo. Você ficaria surpreso com o número de PhDs em CS das melhores escolas que não podem fazer o teste do bigtang. Em resumo, ser capaz de concluir um teste como esse é necessário, mas não suficiente.
Jer

+1 @Jer. Na última vez em que entrevistei um programador, seis em cada oito candidatos não conseguiram concluir as tarefas mais básicas (mesmo com Google e SO). Não há como deixá-los perto da minha base de código real por cinco minutos, quanto mais 30 dias.
Julia Hayward

2
@JuliaHayward: Eu esperaria que alguém pudesse concluir um projeto com acesso à Web / documentação. O problema surge quando alguém começa a usar palavras-chave e algoritmos obscuros de classificação para você sem acesso à Internet, sob a falsa suposição de que memorizar várias técnicas de classificação ou o que é crítico para o desempenho diário do trabalho.
23430 Satanicpuppy #

12

Permitir que alguém faça um projeto prático em seu próprio tempo não significa necessariamente que é ele quem o faz.

Todo mundo chega cedo para uma entrevista (bem, pelo menos deveria). Temos uma planilha 'enquanto você espera' para que eles trabalhem até estarmos prontos para vê-los. Possui oito (8) perguntas que testam o conhecimento dos candidatos no idioma que usamos principalmente.

Não estamos procurando as respostas certas, pois qualquer pessoa pode corrigi-las com um computador na frente delas. Estamos à procura de processo, eles tentam a pergunta, como chegam às suas respostas.

Quando entramos na entrevista, examinamos a questão com eles e respondemos a quaisquer perguntas que possam ter, o que também pode levá-los a obter a resposta correta. Também nos permite perguntar como eles obtiveram as respostas que chegaram.

Combinamos com o trabalho anterior, descobrimos, as melhores maneiras de filtrar os candidatos.

ATUALIZAÇÃO 15/06/2016

Mudamos significativamente nosso processo na maneira como contratamos desenvolvedores.

Fase 1: uma entrevista por telefone de 15 minutos, onde fazemos 7 perguntas. Os dois primeiros são "Qual foi a coisa mais divertida em que você trabalhou?" (não precisa estar relacionado à programação) e "O que você codifica para se divertir no seu tempo livre?".

Fase 2: um mini projeto que eles concluem em seu próprio tempo. Em seguida, fazemos um compartilhamento de tela com eles e eles nos mostram o que construíram. Durante o compartilhamento de tela, também fazemos com que eles façam duas alterações em seu projeto e, em seguida, os observam trabalhar com ele e fazê-lo funcionar.

Fase 3: Entrevista presencial.

Esse processo nos permite descobrir a cultura adequada imediatamente (fase 1). Se eles puderem fazer o trabalho e realmente acompanharem a conversa (fase 2). Por fim, verifique se seus valores estão alinhados com o que estamos procurando (fase 3).


1
Isso é meio que brilhante. Eu gosto disso!
Davidhaskins

3
embora eu tenha participado de muitas entrevistas que se transformam em curiosidades. Cuidado para não se atolar nesse pedaço específico de sysntax e entrar no entendimento em larga escala. Especialmente se eles tiverem um pouco de talento ou interesse. o resultado foi que eu não queria trabalhar para eles e tenho certeza de que era mútuo.
John Nicholas

"Permitir que alguém faça um projeto prático em seu próprio tempo não significa necessariamente que é ele quem o faz" - É verdade, mas ainda não encontrei alguém corajoso o suficiente para entrar em uma entrevista e ser questionado sobre o código que eles não possuem. não escrevi. Caso isso aconteça, eles não passarão pela entrevista e pela liberdade condicional, mas posso reconsiderar minha abordagem.
PDR

@John. Concordou, não pode ser "oh, você esqueceu uma vírgula lá". Como eu mencionei, é entender como a abordagem aborda as coisas e se elas entendem a linguagem. Se eles sabem que suas coisas definitivamente passam para as coisas maiores.
RDL

2
@RDL, a maior parte do nosso processo de entrevistas foi projetada para ser divertida com o tipo de desenvolvedor que estamos procurando e o inferno para o resto. Você sabe como bons desenvolvedores não conseguem resistir a um desafio.
pdr

4

Você pode querer conferir o fantástico Cyber-Dojo de Jon Jagger .

É um ambiente integrado baseado na Web, projetado para a prática deliberada de desenvolvimento orientado a testes e para aprender sobre a dinâmica da equipe. Possui muitas pequenas tarefas de programação (kata's) e suporta uma variedade de linguagens, desde Python e Ruby a Java e C ++.

Ao contrário dos IDE projetados para produtividade, não há conclusão de código, destaque de sintaxe ou refatoração automática, para que você possa ver o que seu entrevistado pode fazer sem eles.

A melhor coisa é que, depois de fazer um kata, você pode voltar e observar a progressão vermelho / verde (ou talvez não, se não fizerem TDD * 8 ') de cada um dos kata. Toda compilação / teste confirma as alterações em um repositório git junto com os resultados do teste.

Acho que usar isso para testes de codificação de entrevistas pode dizer muito sobre não apenas a capacidade dos candidatos de resolver um problema, mas também sua abordagem para a solução de problemas e o processo que eles usam quando não são limitados por fatores externos; basta selecionar um kata apropriado para o tempo que você deseja que o candidato gaste nele.

Se você deseja seu próprio servidor CyberDojo, todo o projeto pode ser encontrado no github e há até uma máquina virtual do dispositivo Turnkey Linux vinculada a partir daí, o que significa que, assumindo que você já possui o VMware player ou o VirtualBox instalado, você pode estar em funcionamento no alguns minutos para baixar o aparelho!


3

Eu só entrevistei uma vez uma empresa que fez isso. Eles deram uma folha de perguntas com 6 ou 7 problemas. As instruções eram para criar um método para resolver cada problema.

Uma parte da tarefa era perceber que era possível reutilizar o código. Problemas podem usar código de outras soluções. Também não foi seqüencial. Por exemplo, a pergunta 3 pode ser escrita usando o método usado para a pergunta 5.

Eu sugeriria tentar algo assim.

Quanto às perguntas? Algumas das perguntas iniciais no site do Project Euler são boas.

Você também pode tentar um jogo simples se quiser ver como eles podem montar um projeto.

Ou, se você não quiser criar algo, peça a eles que enviem algum código de um projeto final.


3

Para solicitar às pessoas que concluam um projeto, você deve ter um conjunto específico de habilidades que deseja avaliar em mente e projetar o projeto para testar essas habilidades.

Um exemplo seria pegar este parágrafo do texto e retornar uma lista de palavras únicas em ordem alfabética. Depois de cada palavra, diga-me quantas vezes a palavra apareceu e em que sentimento (s) a palavra foi aprendida.

O que você está procurando com esta pergunta? Quantas maneiras existem para resolvê-lo e o que cada abordagem diz sobre a pessoa que escreveu a resposta? As habilidades demonstradas por uma resposta eficaz a essa pergunta são as mesmas que são mais importantes para o seu negócio?

Eu não quero as respostas para essas perguntas; Eu só quero que você tenha pensado nas respostas antes de submeter um grupo de candidatos ao seu processo. Se você souber quais habilidades está procurando, não é difícil criar uma pergunta para procurá-las. Se você usar a pergunta de outra pessoa sem entender completamente o que ela foi projetada para avaliar (se houver), estará realmente apenas se enganando e desperdiçando o tempo de todos.


Desculpe por ter perdido seu tempo.
bigtang 9/09/11

1
@ Bigtang, não é nada disso. Desculpe se o exposto parece um discurso retórico - posso ver como pode ser -, mas meu objetivo era criar um caso para criar seu próprio projeto com base nas habilidades que você procura em novas contratações. Você pode fazer um pequeno projeto com quase tudo, mas para valer a pena para você e os entrevistados, os requisitos devem ser conduzidos pelas habilidades que você mais valoriza.
Caleb

Removida a primeira frase completamente (Respeitosamente, se você não é inteligente o suficiente para elaborar um projeto decente por conta própria, o que faz você pensar que é inteligente o suficiente para avaliar as submissões dos candidatos? "). valor e fez parecer um pouco rantish.
Michael Durrant

0

Um exemplo seria pegar este parágrafo do texto e retornar uma lista de palavras únicas em ordem alfabética. Depois de cada palavra, diga-me quantas vezes a palavra apareceu e em que sentimento (s) a palavra foi aprendida.

Em que idioma eles escreveriam isso? Se eles estão saindo de uma escola que se concentra muito em C, isso não seria tão rápido de escrever quanto aquele que ensina Python / Perl / Ruby etc ... Ou mesmo Java ou C #. No entanto, é um bom pequeno teste.

Sugiro alguns mais fáceis, na verdade, durante a entrevista. Sem perguntas complicadas. Estou com a TMN nesta. Dê a eles algumas funções que executam tarefas básicas e pergunte o que fazem (lendo o código de outras pessoas). Em seguida, dê a eles algumas tarefas básicas (<20 linhas) para escrever no idioma de sua escolha. Isso deve ser suficiente para um nível de entrada saber se eles podem codificar ou não (em uma posição de nível de entrada). Isso, juntamente com a entrevista e o GPA, deve lhe dar uma boa idéia do que você precisa saber.


1
Não acho a linguagem crítica, isso pode até ser feito com pseudo-código. A idéia principal é verificar se o funcionário presunçoso "entra lá" e mostra bons sinais de solução de problemas.
Jonas Byström

Francamente, qualquer idioma com split () e matrizes / listas (com push / append) tornaria isso trivial. Permitir que um programador C a 'assumir' split () e lista, e torna-se tão trivial :-)
ChuckCottrill

-1

Faça com que eles implementem o Jogo da Vida de Conway para qualquer idioma que você esteja usando, usando os paradigmas de design desse idioma.

Um jogo da vida de Java ou C # Conway deve ser orientado a objetos, o LISP ou F # seria funcional etc.


2
Quanto tempo você daria a eles para concluir isso?
Job

Demoro cerca de 4 horas para concluir toda uma implementação OO, mas já fiz isso cerca de uma dúzia de vezes. Se você quiser ver como eles pensam e até onde chegam (e se eles escrevem ou não códigos testáveis), dê menos tempo a eles. Se você fizer isso pessoalmente, aguarde 45 minutos e veja até onde eles chegaram e por que escolheram o caminho que escolheram. É um desses problemas que você deseja que eles saibam com antecedência, para que não fiquem totalmente perdidos, até incentive-os a tentar por conta própria. Isso revela muito sobre um programador.
George Stocker

8
Pedir a um candidato que escreva o Jogo da Vida de Conway testa recentemente a faculdade, ou escreveu e estudou esse problema. Você contrataria @ George Stocker porque ele escreveu uma dúzia de vezes. Quão altamente correlacionado é o Jogo da Vida com qualquer trabalho de desenvolvimento do mundo real?
ChuckCottrill
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.