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?
fonte
Respostas:
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.
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
É 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...
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:
fonte
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.
fonte
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.
fonte
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.
fonte
As pessoas realmente não se importam com quanto tempo você gasta fazendo algo; apenas cumpra seus prazos e está tudo bem.
fonte
É 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.fonte