Recientemente descubrí que Facebook tenía un desafío de programación que, si se completaba correctamente, automáticamente recibías una entrevista telefónica.
Hay un desafío de muestra que le pide que escriba un algoritmo que pueda resolver un problema tipo Torre de Hanoi . Dado un número de clavijas y discos, una configuración inicial y final; Su algoritmo debe determinar la menor cantidad de pasos posibles para llegar a la configuración final y generar los pasos.
Este ejemplo de desafío le otorga un límite de tiempo de 45 minutos, pero le permite probar su código para ver si pasa una vez que expire su límite de tiempo.
No conocía ninguna solución matemática linda que pudiera resolverlo, y no quería buscar una, ya que creo que sería una trampa. Así que intenté resolver el desafío lo mejor que pude por mi cuenta.
Pude hacer un algoritmo que funcionó y pasó. Sin embargo, me tomó más de 4 horas para hacer, mucho más tiempo que el requisito de 45 minutos. Como me llevó mucho más tiempo que el tiempo asignado, no he intentado el desafío real.
Sin embargo, esto me hizo preguntarme, en realidad, ¿realmente importa que me haya tomado tanto tiempo? Quiero decir, ¿es esta una señal de que no podré conseguir un trabajo en un lugar como este (no solo Facebook, sino Google, Fog Creek, etc.) y necesito reducir mis aspiraciones, o el hecho de que realmente pasé? en mi primer intento a pesar de que tardó demasiado en ser tomado como bueno?
fuente
Respuestas:
En la práctica se hace importa el tiempo que le toma. Uno que puede resolver el problema en 45 minutos es, todo lo demás igual, cinco veces más productivo que uno que lleva 4 horas y, por lo tanto, más atractivo para un empleador.
Dicho esto, no dice por qué tomó cuatro horas para resolver este problema.
Todas y cada una de estas cosas pueden influir en el tiempo que te lleva, y en realidad es más importante poder resolver un problema cuando estás bajo presión, sin que te lo cuenten todo, y con las herramientas disponibles, ya que eso sucederá durante tu carrera. y generalmente es en un punto en el que es muy importante para alguien si tienes éxito o no.
fuente
Es importante para una empresa que busca desarrolladores generales con un buen flujo de caja , porque más rápido significa que se puede hacer más trabajo. Sin embargo, en muchos otros casos (argumentaría en la mayoría de los casos, en realidad), no importa tanto como su capacidad para resolver problemas y su capacidad para resolverlos bien .
Puedo pensar en cinco tipos diferentes de solucionadores de problemas:
Los que ...
Una prueba al estilo de Facebook elimina explícitamente a los candidatos # 3, # 4 y # 5 porque tiene una restricción de tiempo, por lo que sabemos que esta prueba es para empleadores que han determinado que solo deberían contratar a los candidatos # 1 o posiblemente # 2 ( dependiendo de la detección adicional).
Algunos ejemplos:
fuente
¿Torre de Hanoi? Esa fue una de las primeras tareas de programación que tuve en mi curso de primer año en la universidad (justo después de Fibonacci; sí, tuve clases con uno de esos fanáticos de la programación funcional :). Y ni siquiera estoy en informática, estoy en ingeniería informática.
Y aún así, la mayoría de los llamados 'programadores' no pueden escribir este tipo de algoritmo correctamente, porque la mayoría de los programadores son horribles. (busque fizzbuzz para mayor diversión)
De todos modos, una vez que hayas pasado un cierto umbral, creo que tus habilidades de programación no importan tanto como tu capacidad para terminar proyectos, tu resistencia frente a las dificultades, etc. Y parece que lo has superado con seguridad.
Facebook quiere contratar a los mejores desarrolladores, claro, pero no sé cuánto esperan obtener con ese tipo de juegos. Creo que simplemente no quieren perder tiempo con programadores terriblemente malos.
Un consejo que siempre escucho es que si quieres ser contratado por una compañía de tecnología genial, trata de involucrarte en proyectos de código abierto. Además, trate de obtener una pasantía.
fuente
Cuando hay mucha oferta (muchos aspirantes a programadores) y poca demanda (pocos trabajos de programación), los empleadores pueden ser tan exigentes como deseen. De hecho, tienen que ser exigentes, o de lo contrario estarían gastando cantidades excesivas de tiempo entrevistando a personas en lugar de hacer cualquier trabajo. Por lo tanto, les están dando a los candidatos pruebas extremadamente difíciles para obtener una lista corta lo más rápido posible, y para asegurarse de que entrevistarán a personas que no solo son buenas, ni muy buenas, sino que en realidad son carismáticas .
Por lo tanto, el hecho de que no haya completado la prueba dentro del plazo asignado no significa que sea un mal programador; simplemente no encajas en la definición de lo que Facebook considera carismático. En mi opinión, está bien.
fuente
El tiempo importa, pero no te hagas la idea de que eres estúpido si te lleva más tiempo. Mucha gente tiene cosas "memorizadas". Practican técnicas de aplicación como la recursión tanto que se convierte en una naturaleza 2cd. No es que sean más inteligentes, ¡solo han practicado hasta el punto de la naturaleza 2cd y tú también puedes!
Considere el siguiente problema matemático: 2 + 2 =?
Si inmediatamente supo que la respuesta era 4, no es porque sea inteligente, sino porque es de naturaleza 2cd. Un niño que está aprendiendo a sumar puede verse obligado a pasar por las operaciones más básicas de contar para obtener la respuesta. Pero ese niño puede tener el potencial de superar al adulto.
fuente
A la gente realmente no le importa cuánto tiempo pasas haciendo algo; solo cumpla con sus plazos y todo está bien.
fuente
Es bastante tenso, me requeriría leer sobre lo que es la torre de Hanoi -15 minutos, iniciar el IDE, crear una solución en blanco -5 minutos, por lo que solo son 25 minutos para resolver el problema. Simplemente escribir código con toda la fontanería como clases seguras con un buen diseño de interfaz requeriría algo de tiempo también -10 minutos, por lo que quedan 15 minutos para la idea real. Dependiendo de cuál sea la torre en Hanoi, puede ser suficiente, aunque no lo sea. Y a veces, solo necesito dejar que el problema se resuelva solo mientras estoy trabajando en otros problemas, porque no veo la solución allí mismo en el acto. Por lo tanto, se resuelve de forma gratuita en un hilo paralelo, pero no sucede en un instante.
De todos modos, es una de las compañías más grandes, por lo que pueden hacer lo que quieran. Pero el límite de tiempo es uno de los peores factores en las entrevistas en mi humilde opinión, siempre me siento presionado, apurado, no puedo hacer todo limpio y no puedo concentrarme en todos los detalles que son muy importantes cuando realmente estoy trabajando. :) Seguro que puede resolver soluciones rápidamente, como configurar el acceso al administrador para que todo funcione +
'SELECT * FROM pass WHERE usr == ' + user_input
, pero para cualquier tarea segura y bien escrita de la que estaría orgulloso, necesitaría algo de tiempo y 45 minutos es realmente bastante intenso.fuente