Devo me preocupar com as tarefas de programação de superengenharia fornecidas durante o processo de entrevista? [fechadas]


27

Recentemente, tive uma entrevista por telefone com uma empresa. Após a entrevista por telefone, fui orientado a concluir uma breve tarefa de programação (um pequeno programa; não deve demorar mais de três horas). Só sou instruído diretamente a concluir a tarefa e entregar o código. Tive total liberdade para usar qualquer idioma que desejasse e não me disseram exatamente como entregar o código.

Imediatamente planejei lançá-lo no Github, escrevendo um conjunto de testes para ele, usando o Travis-CI (integração contínua gratuita para repositórios públicos do Github) para executar os conjuntos de testes e o CMake para criar os makefiles do Linux para o Travis-CI. Dessa forma, não só posso demonstrar que entendo como usar Git, CMake, Travis-CI e como escrever testes, mas também posso simplesmente vincular a página Travis-CI para que eles possam ver a saída dos testes. Achei que isso seria um pouco mais conveniente para o entrevistador.

Como conheço bem essas tecnologias, isso essencialmente não acrescentaria tempo à tarefa.

No entanto, estou um pouco preocupado que fazer tudo isso para uma tarefa relativamente simples pareceria ruim. Embora isso não traga muito mais tempo para mim, não quero que pensem que passo muito tempo em coisas que deveriam ser simples.


5
Seria cuidadoso ao colocar respostas para entrevistar problemas no github, pois algumas empresas gostam de manter seus problemas em sigilo.
Scroog1

7
As perguntas estão disponíveis publicamente em seu blog (elas me enviaram um link para a postagem do blog), então eu não acho que elas estejam preocupadas com isso.
DormoTheNord

3
@DormoTheNord Eu diria que você não tem excesso de engenharia: ter um bom processo de desenvolvimento é algo completamente diferente de excesso de engenharia e é (IMO) um bom sinal.
K.Steff

3
Eu gastaria um pouco desse tempo extra documentando áreas cinzas na especificação do problema, suposições, limitações, .... Mostre que você não apenas mergulha na codificação, mas contempla o problema e seu contexto.
HABO

4
@DormoTheNord As perguntas podem ser públicas, mas suas respostas também serão. Ele estará disponível para outros entrevistados, se eles puderem encontrá-lo. Isso , eles provavelmente não vão gostar.
21913 Izkata

Respostas:


29

Como entrevistador, ficaria feliz em ver o conhecimento do processo de desenvolvimento de software demonstrado por essa abordagem; em vez de apenas escrever o código.

Em particular, ter um conjunto de testes para problemas muito simples seria um bom sinal (mesmo no nível do FizzBuzz). Eu já vi candidatos enviarem soluções que nem resolveram o problema e um simples conjunto de testes os mostraria isso. Além disso, ter o histórico de consolidação permite ter uma idéia do processo de pensamento que o candidato usou para chegar à solução.

Por outro lado, eu conheci pessoas que foram rejeitadas por algumas empresas em um estágio inicial do processo de excesso de engenharia. No entanto, na maioria dos casos, isso ocorreu devido ao excesso de engenharia da solução, não necessariamente aos processos utilizados.


2
Você iria tão longe ao dizer que, se uma empresa me rejeitasse por fazer o que pretendo fazer, seria um sinal de que a empresa não respeita as metodologias de desenvolvimento de software e que prefiro não trabalhar para essa empresa?
DormoTheNord

7
Eu não iria tão longe, pois há uma certa quantidade de sorte envolvida (infelizmente). Você pode pegar o entrevistador que não gostou dessa abordagem; ou eles podem estar de mau humor naquele dia e não querer examinar os dados extras fornecidos por essa abordagem. Dito isto, geralmente não há mal algum em esclarecer o nível de detalhe que eles desejam. Além disso, fazer uma ou duas perguntas esclarecedoras também pode ser um bom sinal para o entrevistador (embora não as bombardeie continuamente com perguntas desinformadas, obviamente).
Scroog1

+1 - desde que você não prejudique a solução, eu gostaria de ver testes de unidade e tudo o que você fizer sem avisar.
Telastyn

1
O excesso de riscos pode ser atenuado enviando um link básico do github e um link diretamente apenas para o código-fonte do teste para os preguiçosos / ocupados.
Dan Neely

15

Ter como entrevistado alguém que entendesse coisas como controle de versão, IC, testes de unidade e similares seria um passo em frente ao que eu costumo ver.

Embora, para mim, o mais importante seja que o problema seja resolvido e resolvido bem, sabendo que o candidato entendeu maneiras de melhorar a qualidade de sua entrega, definitivamente chamaria minha atenção.

O que geralmente vejo são pessoas que não apenas não entenderam o problema, mas também não entenderam como resolvê-lo - e seriam ignoradas, não importando quantas ferramentas extras usassem no processo.


6

Lembre-se de que há um limite de tempo. O entrevistador sabe disso, então isso significa (se eu fosse o entrevistador) que ele não só resolveria o problema dentro do prazo estipulado, mas fez isso tão rapidamente que sobrou tempo para o revestimento de ouro, o que é um bom sinal de sua habilidades de resolução de problemas, bem como sua apreciação pelo rigor e diligência.

Excesso de engenharia é uma palavra ruim quando você cria os AbstractFactoryManagerAdaptors que são conectados para distribuir o BuzzManager e o FizzManager apenas para resolver o FizzBuzz.

O que você está fazendo é excesso de diligência, o que nem é uma coisa (embora a sub diligência definitivamente seja).

Dito isto, se você acabar com o tempo ou com alguma solução semi-hackeada porque usou seu tempo com os extras que afirma "não acrescentar tempo", isso parecerá como se você tivesse uma compreensão muito baixa de quão grande é aparentemente pequeno tarefas podem ser. Esse pode ser um atributo perigoso para um engenheiro e muito comum entre os juniores. Priorize adequadamente e faça o extra-crédito somente após concluir a solução necessária .


Não há limite de tempo difícil, mas apenas uma nota dizendo que a tarefa não deve levar um programador decente mais de três horas. Eles realmente verificariam meu log do git para garantir que eu passasse apenas três horas desde o commit nº 1 até o commit final?
DormoTheNord

2
@DormoTheNord, se não houver limite de tempo, o tempo não gasto na solução solicitada pode ser visto como uma baixa prioridade. Infelizmente, os engenheiros são todos pensadores independentes e, portanto, têm suas próprias opiniões sobre essas coisas de um para o outro; em casos como esses, pode ser uma sorte se a pessoa que revisa o que você fez é do tipo que vê dessa maneira ou tipo para vê-lo como um grande benefício. Conheço grandes engenheiros de ambos os lados. Nesses casos, tudo se resume ao que você valoriza, mostra isso e alguém que valoriza o mesmo que você apreciará, é com quem você deseja trabalhar.
Jimmy Hoffa

É isso que eu odeio nas entrevistas de emprego ... a sorte envolvida em agradar as preferências pessoais do entrevistador. Talvez ele deve ser padronizado :)
DormoTheNord

Não se preocupe, a sorte se dará ao longo de sua carreira. Você só precisa ter sorte sobre quando você começa a boa sorte e quando você começa o mau :)
Scroog1

1
Eu seria cuidadoso em descrevê-lo como 'revestimento de ouro' porque esse termo geralmente é considerado uma coisa ruim: en.wikipedia.org/wiki/Gold_plating_%28analogy%29
whatsisname

6

Outra visão a considerar é que sua abordagem não é boa nem ruim. Posso imaginar entrevistadores que considerariam demais e posso imaginar entrevistadores que adorariam ainda mais engenharia.

Não se preocupe tanto. Em vez disso, resolva o problema da maneira que você considera melhor e provavelmente receberá ofertas de emprego de pessoas que concordam com você. Esse é um ótimo primeiro passo em direção a um ambiente de trabalho produtivo. Lembre-se, as entrevistas são de duas maneiras. A resposta do entrevistador à sua solução também informará muito sobre eles. Deseja realmente trabalhar com pessoas que acreditam que seus instintos e filosofia de desenvolvimento estão errados?


3

Na realidade, ninguém se importa se o candidato pode criar um repositório Git ou criar makefiles às pressas, porque isso é apenas uma lembrança do que ele aprendeu de maneira rotineira. Essas são habilidades secundárias ao aspecto real da solução de problemas e do design da pergunta da entrevista.

Portanto, sim, sua intuição é clara de que potencialmente parece ruim, porque pode parecer que o candidato acredita que alguém que pode regurgitar alguns comandos e padrões memorizados para criar um esqueleto de projeto possui habilidades de software impressionantes.

O aspecto do conjunto de testes da solução é bom. Entregar uma resposta com um conjunto de testes de regressão provavelmente ganhará seus pontos. Ainda mais se o seu conjunto de testes exercitar os casos destacados no código. O conjunto de testes não precisa ter muitos ajustes formais e confiar em ferramentas; apenas o fato de você ter uma de alguma forma é bom o suficiente para uma entrevista. É mais ou menos óbvio que, se você puder reunir alguns testes de unidade ad hoc em um questionário de entrevista, poderá fazê-lo com ferramentas em um projeto real.


1

Recentemente, tive uma entrevista por telefone com uma empresa. Após a entrevista por telefone, fui orientado a concluir uma breve tarefa de programação (um pequeno programa; não deve demorar mais de três horas).

Eu continuaria com cautela. Avalie a relevância do desafio para o trabalho e garanta que o reembolso futuro do empregador valha a pena 3 horas do seu tempo.

Questiono o valor desses tipos de testes e prefiro julgar alguém por suas realizações passadas. Uma tarefa curta predefinida não pode dizer nada ao empregador sobre o que você pode fazer. Apenas o que você não pode fazer, e isso pode ser rapidamente determinado com algumas perguntas por telefone.

O teste tem seu lugar. Faça a si mesmo as seguintes perguntas sobre o teste e responda em conformidade.

  1. O teste é justo, considerando seu nível de carreira atual?
  2. O teste tem uma resposta correta claramente definida?
  3. O entrevistador tem interesse em seu potencial como pessoa ou está demonstrando mais interesse nos resultados dos testes (ou seja, contratar agências é péssimo para isso).
  4. O teste representa o tipo de trabalho que você gostaria de fazer ou é uma verificação de habilidades ambígua (por exemplo, teste se você conhece a sintaxe Java).

Só sou instruído diretamente a concluir a tarefa e entregar o código.

Você acabou de responder sua própria pergunta.

Imediatamente planejei lançá-lo no Github, escrevendo um conjunto de testes para ele, usando o Travis-CI (integração contínua gratuita para repositórios públicos do Github) para executar os conjuntos de testes e o CMake para criar os makefiles do Linux para o Travis-CI.

Não, não foi isso que eles pediram para você fazer.

Dessa forma, não só posso demonstrar que entendo como usar Git, CMake, Travis-CI e como escrever testes, mas também posso simplesmente vincular a página Travis-CI para que eles possam ver a saída dos testes. Achei que isso seria um pouco mais conveniente para o entrevistador.

Seria cuidadoso ao demonstrar habilidades muito cedo ou muito tarde no processo de entrevista. Se você sente que não se saiu bem na entrevista e agora está tentando compensar, isso não vai funcionar. Por outro lado, fazer muito quando não solicitado também demonstra excesso de ansiedade. Isso poderia resultar na contração do empregador com uma oferta de salário mais baixo do que você esperava.

No entanto, estou um pouco preocupado que fazer tudo isso para uma tarefa relativamente simples pareceria ruim.

Sim, parece ruim. Resolver seu desafio com uma linha de código será muito mais impressionante do que um projeto completo.

Pela minha experiência, não é assim que você ganha a entrevista de emprego, mas é uma maneira de perder o emprego. O teste de código é um problema de controle de qualidade. Toda empresa que usa testes de código ao contratar pessoas o faz, porque anteriormente não estava usando testes de código. Eles tiveram uma péssima experiência com alguém que escapou das rachaduras do processo de entrevista que não deveria ter.

Eles pegam seu código-fonte e o passam pelo escritório. As pessoas comentam sobre isso, e o que você não quer que elas digam é "Ele cometeu esse erro? Mas estava gastando tempo usando Git, CMake e Travis-CI. Que idiota por perder esse erro".

É isso aí. Você perdeu.

Eles querem saber que você pode codificar, porque não podem ensinar isso a você. Git, CMake e Travis-CI podem ser facilmente ensinados.


2
@JimmyHoffa você está discordando de toda a minha resposta ou apenas dos meus comentários sobre o teste? Talvez eu não tenha expressado corretamente minha perspectiva, ou talvez não? Para mim, valorizo ​​mais o componente humano do que uma prova escrita. Um candidato que falha no FizzBuzz não prova nada para mim. Eu tenho que conversar com essa pessoa para entender o porquê. mas eu quero contratar trabalhadores qualificados (sempre). Só não acho que vá para casa, faça este teste e volte. É uma maneira eficaz de fazer isso. Prefiro fazer a pergunta do FizzBuzz e vê-los resolver isso. Voce entende?
Reactgular

1
@ JimmyHoffa Acho que isso se resume às expectativas dos empregadores em relação a um contrato. Com isso dito, estou me inclinando mais para o seu lado, quanto mais leio sobre os testes do FizzBuzz. Um programador que não pode passar em nenhum nível de carreira tem problemas. Só não tenho certeza se esse tipo de teste é o mesmo do OP. Veja esta pergunta relacionada: stackoverflow.com/questions/117812/…
Reactgular

Simplificando, eu sou fã de processos de entrevistas extenuantes e candidatos que tentam ir além (sem comprometer as solicitações principais; caso contrário, eles estão priorizando seu tempo mal). Sua resposta inteira parece se manifestar contra essas duas coisas.
Jimmy Hoffa


@JimmyHoffa Acho que minha atitude vem do freelancer no campo criativo, onde os clientes geralmente pedem que um fornecedor conclua o trabalho criativo ou os testes como parte de seu processo de licitação pré-trabalho. Eu não faço esse tipo de trabalho, porque se eu passasse horas em todas as perspectivas, não faria nenhum trabalho faturável. Quando eu disse ao OP para prosseguir com cautela, estava na esperança de impedi-lo de perder tempo. O OP queria investir tempo em fazer muito trabalho extra. É uma tentação, mas vale a pena a recompensa? Talvez, mas o OP não esclareceu isso. Pode ser um contrato de trabalho de curto prazo.
Reactgular

0

Eu acho que sua abordagem não é boa nem ruim em si . Gostaria de perguntar ao entrevistador se está certo usar o Github e as outras ferramentas. Como o @Izkata apontou nos comentários, você está tornando sua solução pública.

Como entrevistador, eu sabia que geralmente não há mal nenhum em o candidato tentar esclarecer algumas coisas. Além disso, fazer uma ou duas perguntas pode ser um bom sinal, pois você não se apressa em fazer coisas que não entendeu.

Lembre-se, porém, que o mais importante é que o problema seja resolvido e resolvido bem. Nesse sentido, todos concordam que um conjunto de testes ajuda. Mas, para isso, talvez você só precise enviar algumas classes de teste junto com seu projeto / solução.

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.