Como deve ser minha "amostra de código"? [fechadas]

24

Acabei de ter uma boa entrevista por telefone (para uma posição relacionada ao CakePHP, não que seja especialmente importante para a pergunta). O entrevistador parecia impressionado com meu currículo e personalidade. No final, porém, ele me pediu para enviar um exemplo de código do meu projeto de trabalho existente, "para verificar se você não é um programador terrível, ha ha!"

Não estou muito preocupado que meu código não possa se sustentar sozinho, mas sou muito mais um programador intermediário do que um especialista. Em que armadilhas óbvias devo garantir que meu exemplo de código não caia, caso eles me descartem imediatamente? Em segundo lugar, e essa é provavelmente a parte mais difícil da pergunta a ser respondida, que recursos em um exemplo de código seriam tão impressionantes que instantaneamente o tornariam muito mais favorável ao programador?

Todas as idéias ou sugestões são bem-vindas!

thesunneversets
fonte
2
Havia algum requisito no exemplo de código a ser enviado? Parece inútil, qualquer um pode copiar / colar um código bonito da web. A menos que eles estão tentando eliminar as pessoas que não podem mesmo começar que a direita ...
FrustratedWithFormsDesigner
5
Apenas por diversão, você poderia enviar um script Perl que está na forma de sua / seu nome ...;)
FrustratedWithFormsDesigner
2
@thesunneversets: Então eu acho que o código fonte absolutamente lindo de seus projetos pessoais já saiu ...;) Sério, isso pode ser facilmente falsificado. E seu empregador atual está bem com você fornecendo uma amostra representativa do seu código-fonte? Tudo bem se parte do código foi escrita por um colega de trabalho (talvez o arquivo seja alternado entre algumas pessoas ao longo do tempo)?
FrustratedWithFormsDesigner
2
As implicações éticas são um pouco preocupantes ... mas apenas um pouco. Eu não acho que estou caindo em uma armadilha de espionagem industrial. Quanto aos colegas de trabalho, infelizmente apenas duas pessoas puseram as mãos nessa base de código, e o código do outro cara era uma grande bagunça, então estou praticamente sozinho! :)
thesunneversets
4
@thesunneversets, fornecer o código de seus empregadores não é apenas antiético, em muitos lugares é ilegal. Não faça isso.
HLGEM 23/02

Respostas:

17

Eu gostaria de ver o código limpo :

Código limpo : código de software formatado corretamente e de maneira organizada, para que outro codificador possa lê-lo ou modificá-lo facilmente.

Que significa:

  • Funcionalidade - Alguns bits simples de funcionalidade que não são triviais (muitos getters / setters não mostram que você sabe alguma coisa)
  • Estilo consistente e limpo - estilos populares ou pelo menos comuns de revestimento, recuo, espaçamento e suporte
  • Boa nomeação - nomes de qualidade - não use a imenos que seja o único valor de incremento. Não use nomes de variáveis ​​sem sentido.
  • Outros atributos do código Limpo - Boas práticas em verificação de erros, condições, loops, métodos de conveniência ou métodos de utilidade e boa separação de preocupações (entre métodos). E este é um bom momento para ser 100% SECO - sem repetição!

Você deseja enviar a eles algo complexo o suficiente para ser interessante, mas limpo o suficiente para que um bom desenvolvedor possa entender imediatamente o que está fazendo.

Alguns dos comentários acima parecem preocupados com a facilidade com que isso pode ser falsificado. * Se você quiser se proteger, envie uma descrição rápida do objetivo e do histórico do código no email.


* Pelo menos se o entrevistador perguntou sobre projetos passados na frente, em seguida, pediu-lhe para uma amostra a partir deste projeto, e perguntou o que você necessário para escrevê-lo ou como ele evoluiu, eu acho que o processo seria mentiroso prova de bonita. Eu acho que a maioria dos candidatos que se encontram vão mostrar problemas em outras áreas, de qualquer maneira.

Nicole
fonte
Se você pedir à pessoa para explicar o código e eles não puderem, não o escreveram ou ajustaram o código de outra pessoa em manutenção sem se preocupar em entendê-lo primeiro. É incrível para mim quantas pessoas eu entrevistei ao longo dos anos que não conseguem explicar sua própria amostra.
HLGEM 23/02
Adicione alguns comentários caso seu marcador odeie o código limpo.
Ewan
9

Quando eu estava procurando trabalho, resolvi várias perguntas do concurso de programação do ACM, em vários idiomas diferentes, e as usei para amostras de código desde então. Eu acho que eles fizeram bons exemplos de código porque:

  • Eles resolveram problemas desafiadores
  • O problema não exigia uma grande quantidade de contexto, além de ser fácil obter as perguntas
  • O código escrito não tem nenhum risco de IP associado a ele.
  • Cada problema pode existir razoavelmente em um único arquivo e, geralmente, não é extremamente longo, portanto, deve ser fácil para qualquer pessoa compilar e testar sua solução, além de poder usar os dados de teste das perguntas.
  • Mostra que você pode dividir um problema complexo em pedaços menores.
  • Se você for perguntado sobre o funcionamento de qualquer aspecto da sua solução, ela oferece uma ótima oportunidade para demonstrar que você sabe do que está falando, especialmente se tiver muitos anos, mas você puder rapidamente decifrar o que está acontecendo.

E então, o código que você cria deve ser claro, consistente, fácil de ler e fácil de entender.

E por fim:

  • Vale a pena resolvê-los apenas por diversão e é uma boa prática.
whatsisname
fonte
Esta é uma otima soluçao. Vou fazer isso. Houve alguma pergunta específica de que você mais gostou?
zkent
11
Como um comentário meu, acho que ter uma amostra de código de arquivo único não é necessariamente uma ótima idéia, a menos que você esteja se candidatando a uma posição para otimizar código ou algoritmos. O código certamente não deve ser enorme, mas deve ser um pouco representativo do que você pode realmente realizar (por exemplo, se você pode escrever um bom código OO e dividir o código em módulos razoavelmente, deve demonstrar isso).
Namey
6
  • Ele deve compilar / interpretar erros e avisos sem o mais alto nível de rigor.
  • Não deve ser um código padrão que você escreve todos os dias. Torne-o único e interessante, para que seja óbvio que você não o copiou / colou.
  • Ele deve ter algumas decisões interessantes de design com comentários explicando como / por que você as fez.
  • Procure não mais que 2-3 páginas impressas.
  • Deve estar no idioma para o qual você está se candidatando.
  • Não deveria fazer meu cérebro doer quando o li pela primeira vez. Peça a um amigo que dê uma olhada ou poste na revisão do código.
Karl Bielefeldt
fonte
3

Bem, se eu estivesse entrevistando você, gostaria de ver seu código.

Limpar é bom, a solução de problemas é boa, mas o código verdadeiro é melhor. Um bom programador sabe quando foi enganado por outro programador, para que a confiança diminua.

Ler o código de outra pessoa é como dançar fazendo sexo: você sabe quando é a coisa real e se a outra pessoa está fingindo, no final, um desastre ocorrerá. (acabei de perceber que nerds reais não sabem dançar)

Apenas confie em si mesmo e em suas habilidades de codificação . A menos que você realmente conheça seu entrevistador, não poderá prever o que ele espera de seu estilo / habilidades de codificação.

Machado
fonte
10
Eu amo que você não acha que os nerds podem dançar, mas você está confiante em suas proezas sexuais! : D
thesunneversets 23/02
Nah, acabei de ver muitos desastres ... :)
Machado
Na minha escola, as únicas pessoas que aparecem nas aulas de dança social / baile são as de engenharia.
Eva Eva
Você deve substituir o sexo com alguma referência de jogo para ser mais preciso :)
zkent
2

Também tenha muito cuidado para que NÃO seja um código do seu empregador atual (eles são seus donos, e eu garanto que eles não vão gostar de você compartilhá-los.). Pegue algo de que tenha orgulho e refaça o trabalho por conta própria para não ser específico do empregador (livre-se de quaisquer referências às tabelas de banco de dados ou nomes de servidores, etc.). Tudo o que você faz não envia um código com erros ou é uma técnica ruim para o tipo de código (eu provavelmente rejeitaria alguém que enviasse um cursor quando uma operação baseada em conjunto seria mais simples e teria melhor desempenho ao revisar o código SQL. Existem técnicas semelhantes para outros idiomas que existem para resolver um problema relativamente raro que pode ser usado para outros problemas mais comuns, mas não é a melhor opção para esses outros problemas. Essa frase fazia sentido?)

HLGEM
fonte
Concordo, reformulá-lo completamente para que ele não contenha mais informações específicas do empregador parece uma boa idéia. Ética é importante - obrigado pela dica!
Thesunneversets
0

Gostaria de destacar a publicação da Renesis sobre código limpo, mas acrescentaria à lista o fornecimento de testes de unidade de qualidade e bem documentados. Um bom programador deve escrever testes de unidade para seu código.

Chris Knight
fonte
0

Como uma opinião de alguém que solicita amostras de código ao avaliar candidatos, existem alguns recursos de alto nível (conteúdo do código) e outros de baixo nível (estrutura do código). Recursos de alto nível:

  1. Identidade : o sabor do código. Se você está faturando a si mesmo como um codificador de interface do usuário / HCI, quero ver uma boa aparência de algo visual quando executá-lo. Se você é um construtor de banco de dados, quero ver algo interessante com representação ou análise de dados. A amostra deve ser algo de que você se orgulha . Se você não tem pelo menos um desses, não tem identidade.
  2. Maturidade : Você muda de estratégia para diferentes problemas? Você está resolvendo problemas interessantes? Seria fácil estender o código ou a abordagem para um problema semelhante? Por outro lado, sinto que estou olhando para um membro de uma comuna de culto à carga?
  3. Comunicação : o código explica facilmente o que está fazendo e por quê? Isso não significa que o código precisa ser simples. De fato, é um bônus tornar fácil o código complexo.

Os aspectos de baixo nível são mais simples:

  1. Estilo : o código deve ser limpo, consistente (segue algumas diretrizes estabelecidas) e bem documentado.
  2. Embalagem : deve haver no mínimo um leia-me curto, uma versão executável e testes executáveis. O leia-me deve me dizer como executar os dois últimos, bem como por que você está demonstrando esse exemplo de código específico.
  3. Idioma (s) : Normalmente, peço a alguém uma amostra no idioma para a posição, bem como aquela em que ele se sinta mais forte. Dá uma boa idéia dos limites atuais de uma pessoa.

Para um bom candidato, espero que uma amostra seja: A) Uma amostra pequena à prova de balas ou B) Boa parte de um projeto interessante maior (por exemplo, um módulo de um repositório pessoal do Github). Espero que sejam projetos pessoais ou acadêmicos. Se eles enviarem um de um projeto pago, espero uma nota de que eles receberam permissão para usá-lo. Se eu não receber essa nota, cortarei dos candidatos (candidato fraco) ou perguntarei sobre isso durante a entrevista (candidato forte). Não ter permissão seria uma grande bandeira vermelha (provavelmente intransponível). Para um candidato avançado, espero uma isenção de responsabilidade observando que algumas de suas melhores amostras de fontes não podem ser exibidas porque foram realizadas como parte de seu trabalho. No entanto, espero um testemunho emocionante do motivo pelo qual eles se orgulham desse design não demonstrável e de como o amam como uma criança.

Finalmente, por mais que algumas pessoas repreendam que "Ah, alguém poderia obter uma amostra de código da Internet", o contra-argumento é que a maioria das pessoas que não entende um bom código de qualidade de produção também não o entende quando o vê. . Além disso, sempre é possível pesquisar no Google uma linha distinta para o código verificar. Além disso, na melhor das hipóteses, roubar código levará um candidato a uma entrevista onde ele se envergonhará ("Então, por que você fez dessa maneira ...?").

Como última nota sobre o código de um emprego anterior: simplesmente não. Do ponto de vista de RH, solicitar código de emprego anterior é inapropriado e uma bandeira vermelha sobre a empresa. Vocês dois teriam responsabilidade legal (ou seja, vocês dois poderiam ser processados) e isso mostra que eles não têm idéia do que estão fazendo. O código feito para um empregador anterior nunca deve ser fornecido, a menos que o código já esteja disponível ao público ou você tenha permissão explícita desse empregador. Pior, em uma grande empresa, seu chefe direto pode não ter o poder de lhe dar permissão, então divirta-se com o departamento jurídico nesse caso? Tenho certeza de que eles ficarão felizes em expor seu IP para um funcionário que está saindo.

Namey
fonte
Também observarei que, na divulgação completa, forneci uma amostra de código ao laboratório da escola de graduação onde fui aceito para um doutorado. Esse exemplo de código era o código completo de um robô autônomo (5 a 10 mil linhas), com três arquivos específicos destacados. A documentação era respeitável, mas não intocada. Se eu tivesse que repetir, provavelmente não teria trazido uma versão impressa do código para a minha entrevista no local (poderia ter trazido 100 páginas dizendo "ROOKIE ERRO" em grandes letras). Eu recebi uma bolsa de estudos completa, por isso não era muito falso. Moral: Demais> = muito pouco.
Namey