Se o seu algoritmo estiver correto, importa quanto tempo você levou para escrevê-lo? [fechadas]

11

Recentemente, descobri que o Facebook tinha um desafio de programação que, se concluído corretamente, você obtém automaticamente uma entrevista por telefone.

Há um exemplo de desafio que solicita que você escreva um algoritmo que possa resolver um problema do tipo Torre de Hanói . Dado um número de pinos e discos, uma configuração inicial e final; Seu algoritmo deve determinar o menor número possível de etapas para chegar à configuração final e gerar as etapas.

Esse exemplo de desafio fornece um limite de tempo de 45 minutos, mas permite que você ainda teste seu código para ver se ele passa quando o seu prazo expirar.

Eu não conhecia nenhuma solução matemática fofa que pudesse resolvê-la e não queria procurar uma, pois acho que isso seria trapaça. Então, tentei resolver o desafio da melhor maneira possível.

Consegui criar um algoritmo que funcionou e passou. No entanto, levei mais de 4 horas para fazer, muito mais do que o requisito de 45 minutos. Como demorei muito mais do que o tempo previsto, não tentei o desafio real.

Isso me fez pensar, na realidade, realmente importa que demorei tanto? Quero dizer, isso é um sinal de que não poderei conseguir um emprego em um lugar como este (não apenas o Facebook, mas o Google, o Fog Creek, etc.) e preciso diminuir minhas aspirações, ou o fato de que realmente passei na minha primeira tentativa, mesmo que demorou muito para ser considerado bom?

JD Isaacks
fonte
12
Importava aqui - isso é real o suficiente para você?
2
Por que você acredita que não trabalhar para um grande nome .com implica diminuir suas aspirações?
Mouviciel
@mouviciel Eu não quis dizer exatamente diminuir minhas aspirações de trabalhar com um grande nome .com, mas mais como trabalhar para uma empresa em que a programação é o principal papel em relação a trabalhar em uma empresa que faz algo como varejo, onde ninguém entende o que você faz.
JD Isaacks
5
LOL no software Fog Creek sendo incluído no Facebook e Google.
georgiecasey

Respostas:

42

Na prática, faz importa quanto tempo leva. Um que pode resolver o problema em 45 minutos é - tudo igual - cinco vezes mais produtivo do que aquele que leva 4 horas e, portanto, mais atraente para um empregador.

Dito isto, você não diz por que levou quatro horas para resolver este problema.

  • Você estava no seu melhor (bem alimentado, não cansado, totalmente concentrado)?
  • O problema foi bem especificado ou você precisava fazer pesquisas adicionais por conta própria?
  • Você teve que aprender coisas novas para fazer isso?
  • As ferramentas eram familiares ou não?
  • etc.

Todas essas coisas podem influenciar o tempo que você leva, e é realmente mais importante ser capaz de resolver um problema quando está sob pressão, sem ser informado de tudo e com as ferramentas disponíveis, pois isso acontecerá durante sua carreira e geralmente é em um ponto em que é muito importante para alguém, se você é bem-sucedido ou não.


fonte
Obrigado pela sua resposta. Para responder por que demorei muito, uma parte é porque eu tive um pouco de dificuldade para entender o que eu realmente precisava fazer, uma vez que eu entendi essa parte, eu ainda precisava pensar um pouco para elaborar um plano. Por exemplo, se um disco está bloqueando o disco, quero movê-lo e preciso movê-lo primeiro, para onde devo movê-lo. A parte de programação de fato foi a mais curta, mas tudo foi acrescentado ao tempo.
JD Isaacks
@ JohnIsaacks Então, o problema era que você não estava familiarizado com as Torres de Hanói. A maioria dos programadores que eu conheço foi apresentada a ela quando ensinada sobre recursão (cada movimento do disco é essencialmente "mova o disco acima de mim para um ponto vago", que mapeia perfeitamente a recursão). Você recebeu educação formal e, em caso afirmativo, em que nível?
@ ThorbjørnRavnAndersen, eu não aprendi nenhuma programação na escola. Sou autodidata, aprendi no trabalho, lendo livros, experimentando etc. Não estava familiarizado com o jogo (exceto por me lembrar de um jogo semelhante sendo jogado no planeta dos macacos), tive que procurar no Google para saber que era chamado "Torres de Hanói". Entendo a recursão (pelo menos acho que sim) e a usei aqui. Mas simplesmente resolver o quebra-cabeça teria sido muito mais fácil para mim, a parte mais difícil foi "Qual padrão produzirá a menor quantidade de movimentos possível todas as vezes".
JD Isaacks
A programação do @JohnIsaacks é muito parecida com tocar piano - você pode ficar bom sozinho, mas para ficar realmente bom você precisa ser ensinado a fazer as coisas corretamente por um professor experiente. Você poderia explicar como resolver o quebra-cabeça, mas acha difícil a parte "é ideal"?
Eu poderia criar uma função recursiva que mova uma peça para o lugar, mova qualquer peça de bloqueio para fora do caminho e comece novamente com a próxima peça. Começando com a peça maior e descendo até a última peça menor. A parte "é ideal" vem quando você move uma peça de bloqueio. Dependendo de onde você o move, ele pode criar etapas adicionais desnecessárias. Por exemplo, mover um 1 para um 3 estará bloqueando o 3 e precisará sair do caminho novamente quando for a hora de mover o 3. mas, dependendo da configuração atual, isso pode não ser evitável.
JD Isaacks
13

É importante para uma empresa que está procurando desenvolvedores em geral com bom fluxo de caixa , porque mais rápido significa que mais trabalho pode ser feito. No entanto, em muitos outros casos (eu argumentaria na maioria dos casos, na verdade), não importa tanto quanto sua capacidade de resolver problemas e sua capacidade de resolvê-los bem .

Posso pensar em cinco tipos diferentes de solucionadores de problemas:

Aqueles que...

  1. ... pode resolver problemas rapidamente , com uma solução limpa e eficiente.
  2. ... pode resolver problemas rapidamente , mas com uma solução suja e ineficiente.
  3. ... pode resolver problemas lentamente , mas acaba com uma solução limpa e eficiente.
  4. ... pode resolver problemas lentamente , mas acaba com uma solução suja e ineficiente.
  5. ... não pode resolver problemas, seja rápido ou lentamente.

Um teste no estilo do Facebook elimina explicitamente os candidatos nºs 3, 4 e 5 porque tem uma restrição de tempo; portanto, sabemos que esse teste é para empregadores que determinaram que deveriam contratar apenas candidatos nº 1 ou possivelmente nº 2 ( dependendo de mais triagem).

Alguns exemplos:

  • Um empregador como o Facebook pode estar procurando apenas os programadores nº 1 , pois pode pagar salários enormes para programadores superestrelados.
  • Um empregador que tenha um alto volume de vendas pontuais (como algumas lojas de web design) pode querer apenas um desenvolvedor nº 2 , mais barato que os desenvolvedores nº 1 igualmente eficazes.
  • Um empregador que tenha um domínio de problemas especializado (como escrever um software de originação de empréstimos) pode aceitar um desenvolvedor nº 3 em detrimento de um desenvolvedor nº 1 , pois um desenvolvedor genial de grau duplo pode ser super caro, ou pode ser difícil de encontrar.
  • Um empregador que não se importa ou tem orçamento limitado por vários motivos pode estar bem com um desenvolvedor nº 4 .
  • Os desenvolvedores número 5 são contratados por empresas que não sabem o que estão procurando e não conseguem filtrar os candidatos.
Kevin McCormick
fonte
5

Torre de Hanói? Essa foi uma das primeiras tarefas de programação que tive no meu curso de calouros na universidade (logo após Fibonacci - sim, eu tive aulas com um daqueles malucos funcionais da programação :). E nem estou em ciência da computação, estou em engenharia da computação.

E ainda assim, a maioria dos chamados 'programadores' não consegue escrever esse tipo de algoritmo corretamente, porque a maioria dos programadores é péssima. (procure por fizzbuzz para mais diversão)

De qualquer forma, depois que você ultrapassa um certo limite, acho que suas habilidades de programação não importam tanto quanto sua capacidade de concluir projetos, sua capacidade de resistência contra dificuldades etc. E parece que você superou isso com certeza.

O Facebook quer contratar os melhores desenvolvedores, com certeza, mas não sei quanto eles esperam obter com esse tipo de jogo. Eu acho que eles simplesmente não querem perder tempo com programadores terrivelmente ruins.

Uma dica que eu sempre ouço é que, se você quiser ser contratado por uma empresa de tecnologia legal, tente se envolver com projetos de código aberto. Além disso, tente conseguir um estágio.

elias
fonte
3

Quando há muita oferta (muitos programadores em potencial) e pouca demanda (poucos trabalhos de programação), os empregadores podem ser tão exigentes quanto desejam. Por uma questão de fato, eles precisam ser exigentes, ou estariam gastando muito tempo entrevistando pessoas, em vez de realizar qualquer trabalho. Então, eles estão dando aos candidatos testes extremamente difíceis para obter uma lista curta o mais rápido possível e garantir que eles entrevistem pessoas que não são apenas boas, nem mesmo muito boas, mas realmente carismáticas .

Portanto, o fato de você não ter concluído o teste dentro do prazo estipulado não significa que você é um programador ruim; você simplesmente não se encaixa na definição do que o Facebook considera carismático. Na minha opinião, tudo bem.

Mike Nakis
fonte
0

O tempo é importante, mas não pense que você é estúpido se demorar mais. Muitas pessoas têm coisas "memorizadas". Eles praticam a aplicação de técnicas como a recursão tanto que se torna uma natureza 2cd. Não é que eles sejam mais inteligentes, eles apenas praticaram ao ponto da natureza 2cd e você também pode!

Considere o seguinte problema de matemática: 2 + 2 =?

Se você soube imediatamente que a resposta era 4, não é porque você é inteligente, mas porque é da natureza 2cd. Uma criança aprendendo a adicionar pode ser forçada a passar pelas operações mais básicas de contagem para obter a resposta. Mas essa criança pode ter o potencial de superar o adulto.

Lord Tydus
fonte
-1

As pessoas realmente não se importam com quanto tempo você gasta fazendo algo; apenas cumpra seus prazos e está tudo bem.

user541686
fonte
7
Então, quando o prazo é "daqui a 45 minutos" e você termina quatro horas depois, as pessoas se importam.
1
O que Mehrdad significa é que você pode trabalhar horas extras para cumprir os prazos: D
quant_dev
1
Se você tem que trabalhar horas extras para fazer coisas que outros desenvolvedores não precisam de horas extras para - você não tem pára esquerda para puxar para fora quando o cocô realmente atinge o ventilador ...
occulus
-1

É bastante tenso, seria necessário ler sobre o que é a torre de Hanói -15min, iniciar o IDE, criar uma solução em branco -5min, então são apenas 25 minutos para resolver o problema. Simplesmente escrever código com todo o encanamento, como aulas seguras e com um bom design de interface, também levaria algum tempo - 10 minutos, portanto, restam 15 minutos para a ideia real. Dependendo do que é a torre em Hanói, pode ser o suficiente, por mais que não seja. E, às vezes, só preciso deixar que o problema se resolva enquanto estou trabalhando em outros problemas, porque não vejo a solução ali no local. Portanto, ele é resolvido gratuitamente em um encadeamento paralelo, mas não acontece em um instante.

De qualquer forma, é uma das maiores empresas, para que eles possam fazer o que quiserem. Mas o limite de tempo é um dos piores fatores nas entrevistas do IMHO, sempre me sinto pressionado, apressado, não posso fazer tudo limpo e não consigo me concentrar em todos os detalhes que são muito importantes quando realmente trabalho. :) Claro que você pode resolver soluções rapidamente, como, configurar o acesso ao admin para que tudo funcione + 'SELECT * FROM pass WHERE usr == ' + user_input, mas para qualquer tarefa segura e bem escrita da qual eu me orgulhe, eu precisaria de um tempo e 45 minutos é realmente intenso.

Codificador
fonte
1
Eu acho que eles querem pessoas que simplesmente se lembrem do problema da Torre de Hanói (é um clássico).
10_11
Iniciar o IDE e criar um projeto em branco leva cinco minutos? Se você ainda não conhece o Towers Of Hanoi, pelo menos faça-o na ordem oposta para que o IDE seja carregado (de uma VM pela Internet, aparentemente) enquanto você estiver pesquisando!
Bryan Boettcher
Em um teste como esse, eles não estão necessariamente procurando por "bom design de interface" e "encanamento" - eu esperaria que eles desejassem ver sua compreensão do problema e a capacidade de formar um algoritmo para resolvê-lo. Se a linguagem não fosse uma restrição, usar algo como Java e Eclipse é a última coisa que eu estaria fazendo. Eu estaria usando Python e um editor de texto mínimo / IDE compacto. (Não estou dizendo que você estaria usando Java si mesmo, apenas dizendo ...)
occulus