Si su algoritmo es correcto, ¿importa cuánto tiempo le tomó escribirlo? [cerrado]

11

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?

JD Isaacks
fuente
12
Aquí importaba, ¿es eso lo suficientemente real para ti?
2
¿Por qué crees que no trabajar para un gran nombre .com implica que bajas tus aspiraciones?
mouviciel
@mouviciel No quise decir exactamente reducir mis aspiraciones de trabajar con un gran nombre .com, sino más bien trabajar para una empresa donde la programación es el rol principal en lugar de trabajar en una empresa que hace algo más como el comercio minorista donde nadie entiende lo que haces.
JD Isaacks
55
El software LOL at Fog Creek se incluye con Facebook y Google.
georgiecasey

Respuestas:

42

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.

  • ¿Estaba usted en su mejor momento (bien alimentado, no cansado, totalmente concentrado)?
  • ¿Se especificó bien el problema o necesitabas hacer una investigación adicional por tu cuenta?
  • ¿Tuviste que aprender cosas nuevas para hacer esto?
  • ¿Las herramientas eran familiares o no?
  • etc.

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
Gracias por tu respuesta. Para responder por qué me tomó tanto tiempo, una parte es porque tuve un poco de dificultad para comprender qué era lo que realmente necesitaba hacer, una vez que entendí esa parte, aún tenía que pensar un poco para elaborar un plan. Por ejemplo, si un disco está bloqueando el disco que quiero mover, y necesito moverlo primero, ¿a dónde debo moverlo? La parte de programación en realidad fue la más corta, pero todo se sumó al tiempo.
JD Isaacks
@JohnIsaacks Entonces, el problema era que no estabas familiarizado con Towers of Hanoi. A la mayoría de los programadores que conozco se les presentó cuando se les enseñó sobre la recursividad (cada movimiento del disco es esencialmente "mover el disco por encima de mí a una clavija vacante" que se correlaciona muy bien con la recursividad). ¿Ha recibido educación formal y, de ser así, a qué nivel?
@ ThorbjørnRavnAndersen, no aprendí ninguna programación en la escuela. Soy autodidacta, aprendí en el trabajo, por libros, experimentando, etc. No estaba familiarizado con el juego (excepto por recordar un juego similar que se estaba jugando en Planet of the Apes), tuve que buscar en Google para saber que era llamado "Torres de Hanoi". Entiendo la recursividad (al menos eso creo) y la usé aquí. Pero simplemente resolver el rompecabezas hubiera sido mucho más fácil para mí, la parte más difícil fue "¿Qué patrón producirá la menor cantidad de movimientos posible cada vez?"
JD Isaacks
La programación de @JohnIsaacks es muy parecida a tocar el piano: puedes ser bueno por tu cuenta, pero para ser realmente bueno necesitas que un maestro experimentado te enseñe a hacer las cosas bien. ¿Podría explicar cómo podría resolver el rompecabezas pero le resulta difícil la parte "¿es óptimo"?
Podría hacer una función recursiva que mueva una pieza en su lugar, quite cualquier pieza de bloqueo y luego comience de nuevo con la siguiente pieza. Comenzando con la pieza más grande y trabajando hasta la última pieza más pequeña. La parte "es óptimo" viene cuando mueves una pieza de bloqueo. Dependiendo de dónde lo mueva, puede crear pasos innecesarios adicionales. Por ejemplo, mover un 1 sobre un 3 bloqueará el 3 y deberá apartarse nuevamente cuando llegue el momento de mover el 3. pero, dependiendo de la configuración actual, esto puede no ser evitable.
JD Isaacks
13

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 ...

  1. ... puede resolver problemas rápidamente , con una solución limpia y eficiente.
  2. ... puede resolver problemas rápidamente , pero con una solución sucia e ineficiente.
  3. ... puede resolver problemas lentamente , pero termina con una solución limpia y eficiente.
  4. ... puede resolver problemas lentamente , pero termina con una solución sucia e ineficiente.
  5. ... no puede resolver problemas, ya sea rápido o lento.

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:

  • Un empleador como Facebook solo puede estar buscando programadores n . ° 1 , ya que pueden pagar enormes salarios para programadores súper estrellas.
  • Un empleador que tiene un gran volumen de ventas únicas (como algunas tiendas de diseño web) solo puede querer un desarrollador # 2 , que es más barato que los desarrolladores # 1 igualmente efectivos.
  • Un empleador que tiene un dominio de problema especializado (como escribir software de originación de préstamos) puede aceptar un desarrollador n . ° 3 sobre un desarrollador n . ° 1 , ya que un desarrollador genio de doble grado puede ser muy costoso o puede ser difícil de encontrar.
  • Un empleador que no le importa o tiene un presupuesto limitado por varias razones podría estar bien con un desarrollador # 4 .
  • Los desarrolladores # 5 son contratados por empresas que no saben lo que están buscando y no logran descartar a esos solicitantes.
Kevin McCormick
fuente
5

¿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.

elias
fuente
3

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.

Mike Nakis
fuente
0

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.

Lord Tydus
fuente
-1

A la gente realmente no le importa cuánto tiempo pasas haciendo algo; solo cumpla con sus plazos y todo está bien.

usuario541686
fuente
77
Entonces, cuando la fecha límite es "45 minutos a partir de ahora" y terminas cuatro horas después, a la gente le importa.
1
Lo que Mehrdad quiere decir es que puedes trabajar horas extras para cumplir con los plazos: D
quant_dev
1
Si usted tiene que trabajar horas extras para hacer las cosas de otros desarrolladores no necesitaría tiempo extra para - que no tiene paradas de izquierda a retirarse cuando la caca golpea el ventilador realmente ...
occulus
-1

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.

Descifrador
fuente
1
Creo que quieren personas que simplemente recuerden cuál es el problema de la Torre de Hanoi (es un clásico).
quant_dev
¿Iniciar su IDE y crear un proyecto en blanco toma cinco minutos? Si aún no conoce Towers Of Hanoi, al menos hágalo en el orden opuesto para que el IDE se cargue (aparentemente desde una máquina virtual en Internet) mientras investiga.
Bryan Boettcher
En una prueba como esta, no necesariamente buscan "buen diseño de interfaz" y "plomería". Espero que quieran ver su comprensión del problema y la capacidad de formar un algoritmo para resolverlo. Si el lenguaje no fuera una restricción, usar algo como Java y Eclipse es lo último que estaría haciendo. Estaría usando Python y un editor de texto mínimo / IDE compacto. (No digo que usarías Java tú mismo; solo digo ...)
occulus