Como posso eliminar rapidamente os codificadores "copiar e colar"? [fechadas]


15

Preciso de uma maneira de filtrar currículos de pessoas que simplesmente copiam e colam o código e depois esperam que funcione, e, se funcionar, fazem o check-in. Tudo isso acontece sem ter um entendimento (ou cuidado) para entender o restante do código no sistema.

Claro que sei que copiar e colar código faz parte do aprendizado de um novo objeto, controle, etc ... mas como saber se isso representa 70% (ou mais) da carreira de desenvolvimento?

Encontrei alguns caras de nível sênior, talvez cujas habilidades sejam tão desatualizadas ou irrelevantes para o projeto, que tudo o que eles fazem é o google, copie e cole algum código sem pensar na solução como um todo. Como resultado, temos uma quebra de JSON, AJAX, retornos de chamada, ASMX, WCF e postbacks no mesmo projeto. É claro que não há coerência ou lógica por trás de onde cada tecnologia está sendo usada.

Na pior das hipóteses, esse tipo de desenvolvedor cria problemas de segurança e vetores para ataque.

Questão

Como você recomendaria que eu filtrasse pessoas que têm um histórico de programação ruim? Posso fazer isso no nível do currículo? Caso contrário, como faço isso durante a entrevista.


Parece que você precisa de um arquiteto de tecnologia para o seu projeto. Alguém tem que estabelecer a lei WRT de acordo com os padrões usados, as tecnologias usadas e afastá-la da ideia de estimação da semana.
quickly_now

Respostas:


47

Encontrei alguns caras de nível sênior, talvez cujas habilidades sejam tão desatualizadas ou irrelevantes para o projeto, que tudo o que eles fazem é o google, copie e cole algum código sem pensar na solução como um todo. Como resultado, temos uma quebra de JSON, AJAX, retornos de chamada, ASMX, WCF e postbacks no mesmo projeto. É claro que não há coerência ou lógica por trás de onde cada tecnologia está sendo usada.

Não acho que as habilidades de seus desenvolvedores sejam o problema. Seu problema está em outro lugar, talvez um líder de equipe ou arquiteto que não tenha autoconfiança para "incentivar" melhores disciplinas de codificação ou uma equipe de gerenciamento que não entenda a importância do gerenciamento da dívida técnica e não desenvolvedores o tempo e os recursos para fazer isso. Sua empresa possui revisões de código?

Liderança pode ser o problema, não copiar e colar desenvolvedores.


16
+1 Leadership may be the problem, not copy-paste developers. Essa foi precisamente a minha interpretação.
George Marian

Seriamente. Algo está gravemente AWOL no departamento de comunicação.
MIA

+1: Idem nos comentários de George Marian. Muito bem dito, Robert.
Jim G.

isso é bom. Espero que atinja tanto entrevistadores quanto recrutadores de gerentes.
Saar

parece haver muito consenso sobre essa resposta, mas os caras de nível "sênior" não ditam a funcionalidade e a implementação é deixada para os codificadores, certo? Quero dizer, o cara de nível sênior pode dizer "Ei, não use uma horda de tecnologias, basta usar <esses dois>", mas ainda assim os desenvolvedores de copiar e colar vão copiar e colar! Estou errado ?
Chani

13

A maneira de eliminar programadores que não podem programar é defini-los como um exercício prático de programação como parte da fase de triagem ou entrevista. (O último é provavelmente melhor porque você pode controlar o ambiente para evitar trapaças.)

Mas não acho que isso realmente resolva o seu problema.

... temos uma quebra de JSON, AJAX, retornos de chamada, ASMX, WCF e postbacks no mesmo projeto. É claro que não há coerência ou lógica por trás de onde cada tecnologia está sendo usada.

Na IMO, o verdadeiro problema aqui é que sua equipe não está revisando o código interno o suficiente e não está desenvolvendo um "manual de instruções" de soluções preferidas para problemas conhecidos. Isso é parcialmente um problema de cultura, parcialmente um problema de comunicação e (provavelmente) parcialmente um problema com os prazos do projeto.

Outra questão é que o projeto normalmente tem uma vida útil longa e, durante essa vida útil, novas tecnologias / técnicas aparecerão e as antigas provavelmente cairão em desuso. Se você deseja evitar o uso de tecnologias / técnicas "café da manhã para cães", é necessário:

  • definir e aplicar uma lista de tecnologias / técnicas que podem ser usadas por projeto, ou
  • invista esforços para atualizar as tecnologias usadas por um projeto.

1
Se você não estiver fazendo uma prova escrita durante a entrevista, poderá dar um tiro no próprio pé. Eu os tive nos meus últimos quatro empregadores e sempre me surpreendi com a simplicidade de algumas das perguntas. Em um lugar, me disseram que outro candidato saiu sem concluir o teste, chorando.
Adrian J. Moreno

1
Concordo absolutamente que um teste escrito durante a entrevista é a única maneira de garantir que seus recrutas realmente tenham boas habilidades de programação. Mas o principal impulso da minha resposta é que apenas as habilidades de desenvolvedor não são suficientes para resolver o problema da SO.
Stephen C

Foi pego pelo cronômetro de edição. Concordo plenamente que os padrões e a revisão são necessários. Publicamos recentemente um novo documento de padrões de codificação e, combinado com alguns novos processos de revisão de código, tivemos muito menos erros para fazer o controle de qualidade. Um se meu próximo objetivo é iniciar uma equipe de treinamento interno.
Adrian J. Moreno

10

Contrate pessoas em estágio de 3 meses. Demita-os se sugam.

Se você não inspeciona, não pode esperar. Revisões de código, ferramentas de auditoria. Um servidor de IC pode executá-los automaticamente.

Faça perguntas reais em suas entrevistas, como nas perguntas do código real.

Faça com que eles escrevam código no quadro branco.

Se você é um gerente não técnico, não é qualificado para julgar isso.

Se você não for qualificado, procure um consultor profissional sênior respeitável para fazer o teste. Pergunte ao seu pessoal existente e aos concorrentes de negócios se eles conhecem uma pessoa 100x produtiva. Pague-os para fazer a entrevista.

Se você deseja administrar um hospital sem uma cirurgia, vá em frente.


você está falando de um experiente? Por que alguém deveria deixar o emprego e ingressar em um local onde eles precisam de 3 meses para deixá-los chupar ou não :) Por que existem recursos humanos?
Saar

Estou falando de pessoas experientes e competentes. Eles são mais baratos a longo prazo. Os recursos humanos impedem que você seja processado por violar as leis trabalhistas. Originalmente lá para fazer coisas delicadas para os gerentes numéricos de Henry Ford. História verdadeira, procure. Se você já sabe que a pessoa vai dar certo, bem, você é melhor nisso do que eu. A pessoa mudará de emprego porque você é muito bom em trabalhar, há um ótimo ambiente de trabalho e, após a liberdade condicional, eles recebem um bônus enorme. Se eles forem redundantes como permanentes, sua empresa pagará mais três meses. Algo assim
Tim Williscroft

9

Passei os últimos anos entrevistando pessoas e descobrindo que 90% dos candidatos simplesmente não podem programar. Minha técnica de entrevista para determinar a programação é fornecer ao candidato um resumo muito simples e deixá-lo resolvê-lo usando um marcador e um quadro branco.

Os modos de falha incluem:

criando um design e implementando algo diferente. Esses candidatos são rejeitados porque são perigosos para uma equipe. não seguir especificações, escrever bugs etc ...

Não ser capaz de inventar um design. Um número surpreendente de candidatos "experientes" precisa de uma especificação para incluir o design da implementação.

sem conhecer a linguagem de programação, apesar da experiência em reivindicar currículo

Não fazendo perguntas adicionais para extrair especificações mais completas.

Não ser capaz de explicar as decisões de design. Este é importante. Se alguém não pode explicar o porquê, cada vez que faz isso de maneira diferente, perde-se a consistência.

O resultado final foi que passei muito tempo entrevistando, e não recrutando com muita frequência. no entanto, a equipe de desenvolvimento era muito boa e tinha o respeito total de toda a empresa e foi entregue!


Sua experiência parece bastante normal.
quickly_now

5

Eu sugeriria ao FizzBuzz que Jeff Atwood menciona no post em http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html .

Escreva um programa que imprima os números de 1 a 100. Mas, para múltiplos de três, imprima "Fizz" em vez do número e para os múltiplos de cinco, imprima "Buzz". Para números múltiplos de três e cinco, imprima "FizzBuzz".


9
-1. O FizzBuzz detecta o total de idiotas. Para copiar e colar códigos, você não pode ser um idiota total.
back2dos

@ back2dos - Você já deve eliminar os "idiotas totais" quando chegar a uma entrevista cara a cara. O FizzBuzz faz alguém pensar sobre o problema e como melhor resolvê-lo. Não é difícil, por isso deve expor quem copia e cola, pois quem copia e cola não aprende o "porquê" por trás das coisas.
Jetti

3
+1. O FizzBuzz detecta mais que o total de idiotas. Ele também detecta pessoas que compensam a falta de habilidades técnicas por habilidades sociais acima do par. Essas pessoas têm boas chances de passar no primeiro teste de triagem. Por exemplo, eles podem muito bem ter graus legítimos.
MSalters

1
Bem, você pergunta a ME fizzbuzz e eu vou embora imediatamente. :) OMI na categoria júnior não é realmente útil, pois você treinará os caras de qualquer maneira, e na categoria sênior é inútil + ofensivo. você deve ser capaz de encarar pessoas espertas e espertas por outros meios. A codificação nas questões pontuais é uma indicação do IME das empresas agrícolas de doninhas. Se estou realmente interessado em habilidades de codificação de alguém, faço uma pergunta de revisão de código . E obtenha todas as respostas relevantes sem frustração.
quer

@ BalogPal: Eu ria e começava a digitar como um louco por dois minutos, e então eu me envergonhava se não compilasse, corresse e trabalhasse pela primeira vez.
gnasher729

2

Eu faço três perguntas da entrevista

  1. Escreva uma lista vinculada capaz de armazenar algum tipo numérico em java sem importar nada da estrutura de coleções
  2. Escreva um código mostrando como você pode adicionar / remover nós dessa lista
  3. Escreva um código mostrando como você pode obter o máximo / mínimo dessa lista

Vi pessoas concluindo isso em 5 minutos e vi pessoas lutando por 30 minutos antes de desistir.


O primeiro requisito deve ser mais específico. java.util.LinkedList l = new java.util.LinkedList()não importa nada, mas certamente usa as coleções internas.
Barry Brown

Esta é uma pergunta justa, especialmente para recém-formados. Se você prestou atenção ou passou algum tempo programando isso tudo deve ser trivial. Presumo que não precisa ser exato, mas próximo o suficiente.
Bryan Harrington

3
@ Bryan, ninguém tentou isso ainda. E eu realmente não me importo se a resposta está 100% correta. Só que eles entendem o problema e são capazes de abordá-lo de maneira competente. O problema mais comum é aquele em que adicionar / remover não funcionaria no início ou no final da lista. Eu recomendei que as pessoas fossem contratadas com base em sua reação a mim apontando isso.
Sal

2

Você não pode fazer isso no nível do currículo, pois eles têm essencialmente um tempo infinito para escrevê-lo, mas pode fazê-lo em uma entrevista por telefone se fizer algumas perguntas que exijam conhecimento técnico sobre o que eles fazem. Isso dá a você a resposta (boa ou ruim) e quanto tempo eles levaram para chegar lá.

Quando em uma entrevista, faça-os escrever código. É a única maneira de saber se eles podem programar de verdade. Simplifique o problema, forneça a eles um computador com conexão à Internet e o IDE que você usa instalado, faça qualquer pergunta (exceto gimme-hte-codez) e observe como eles funcionam.


EDIT: Para análise post-mortem, parece que o PMD possui um detector de copiar / colar para encontrá-lo: http://pmd.sourceforge.net/cpd.html


Eu concordei com você até "... e o IDE que você usa". Os codificadores são específicos sobre nossos ambientes de trabalho e provavelmente não estão familiarizados com o $ random-IDE. Eu tenho codificado há mais de 20 anos e gastaria os primeiros 10 minutos tentando descobrir como trabalhar com um IDE se você jogasse um em mim. Eu uso um editor (bluefish ao fazer coisas na web, emacs para todo o resto) e ferramentas de linha de comando para todo o resto (controle de revisão, compilação quando necessário, etc.). Eu não uso depuradores. Fui ensinado que, se você precisa de um depurador, está fazendo errado: é para isso que serve o código de depuração!
HedgeMage

@ HedgeMage, eu não disse que eles tinham que usá-lo ... Ver como uma pessoa lida com essa situação é muito revelador. O bloco de notas + javac é suficiente? Ele baixa e instala o NetBeans? Ele perguntará como fazer X no seu IDE, hackear um pouco e pedir Y e Z?

@ HedgeMage, o código de depuração é ótimo se você puder determinar com antecedência todas as coisas possíveis que talvez você precise saber. Depuradores são bons nos casos em que você precisa ver respostas para as perguntas para determinar a próxima pergunta, que com o código de depuração requer um novo binário e reinicia e volta ao local novamente.

1
@ Thorbjørn: Concedido, minhas contas foram pagas pelo trabalho em idiomas interpretados nos últimos anos, mas mesmo nos meus dias de codificação C, demiti o depurador em favor de um bom código de depuração. Talvez seja apenas um preconceito da minha parte: eu fui para a faculdade com um monte de gente que nunca aprendeu a codificar por si só - eles simplesmente deram um tapa em algo juntos e consertaram tudo o que o depurador gritava até que "meio que" funcionasse. Não suporto esse tipo de código slipshod. Eu não quis dizer que depuradores são maus, apenas que eles e outros recursos do IDE não pertencem a todos os fluxos de trabalho.
HedgeMage

@ HedgeMage, concordo com a abordagem "superá-lo até que funcione" para depuração não é boa, mas concluir que depuradores são ruins talvez seja uma conclusão um pouco ampla demais.

1

Simples

  • (1) Tranque-os dentro de uma sala + oxigênio livre.
  • (2) Forneça a eles um PC com conexão à Internet + IDE de escolha + acesso a Alimentos.
  • (3) Tenha wireshark ou método semelhante para registrar todo o tráfego de entrada e saída.
  • (4) Dê-lhe uma tarefa mediana.
  • (5) Examine todo o tráfego HTTP, após a conclusão da atribuição.
  • (6) Se o sujeito tiver copiado grandes partes do código-fonte, encerre o Assunto .....

Editar:

Como criador das coisas7, como indicado, em termos práticos, pode-se fazer uma captura de vídeo (captura de tela).


Novo, mas, em última análise, impraticável.
Robert Harvey

... ou apenas faça uma captura de vídeo, veja a progressão lógica. Assista a beleza (ou caos) se desenrolar.
goodguys_activate

1
encerrar Assunto? Ao retirar o oxigênio livre? Bagunçado!

@ Thorbjørn: Não é tão confuso quanto eles atirando no próprio pé, depois de copiar grandes pedaços de código-fonte.
Joe D

1
Aqueles que não conseguem usar a Internet a seu favor estão bloqueados nos modos de ontem. SEMPRE presumo que sejam alguns bons exemplos por aí para que eu olhe, por mais trivial que seja a pergunta. Não copio e colo, vejo bons exemplos e aplico a melhor técnica. Sou um programador full-stack, o que significa que sou um generalista e não um especialista e confio no resto do mundo. Claramente pecador!
junky

1

Se você deseja "eliminar" os codificadores ruins, pode tentar, por exemplo, a Matriz de Competências para Programadores (útil, mas que não se aplica a todas as áreas possíveis - é claro que você pode criar suas próprias) ou codility.com (as tarefas são muito boas e Isto economiza muito tempo).

Geralmente, contratar bons codificadores é difícil e geralmente requer muitos anos de prática. Você pode iniciar seu próprio banco de dados de perguntas da entrevista, não apenas perguntando sobre codificação, mas também com matemática, lógica, para não mencionar questões de motivação.


0

Eu diria que o problema com seus candidatos não é que eles não podem programar, mas que não têm a menor ideia de usar a ferramenta certa para o trabalho. Minha sugestão é uma pergunta de ensaio em que seriam fornecidos requisitos de alto nível para um novo sistema e solicitados a fornecer uma arquitetura e justificar suas escolhas de componentes. Mas mantenha o FizzBuzz para os candidatos que não podem codificar sem um navegador.

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.