Le fallé a FizzBuzz, ¿me contratarías? [cerrado]

27

Soy un desarrollador con un título de CS y tengo experiencia laboral haciendo desarrollo en varios idiomas durante casi 3 años.

Hoy tuve una entrevista, en general todo salió bastante bien, me preparé para la mayoría de las preguntas y me sentí listo para cualquier cosa. Al final de la entrevista, me dieron UNA pregunta de programación ... un problema como FizzBuzz (sin la parte impresa). Creo que cometí demasiados errores y, por lo tanto, lo "fallé". ¿Se ha perdido toda esperanza para mí?

Aquí está mi código:

  void FizzBuzz()
  {
    for(int i = 0; i <= 100; i++)
    {
      bool isThree = i % 3;
      bool isFive = i % 5;

     if (isThree)
     {
         print "Fizz\n";
     }
     else if(isFive)
     {
         print "Buzz\n";
     }
     else
     {
         print "FizzBuzz\n";
     }
  }
 }

Como puede ver, estropeé los bools que deberían tener la sintaxis i% 3 == 0; Si recuerdo bien la pregunta, también pongo un else en lugar de un elseif con isThree && isFive. Estaba bastante estresado, pero eso no es excusa para perderse un problema simple.

Entonces, la pregunta es, ¿qué tan importante es poder producir código de trabajo en el lugar en relación con otros factores, como la experiencia y la personalidad? Por ejemplo, ¿el código anterior sería un factor decisivo?

ja_programmer
fuente
31
Creo que el hecho de que haya utilizado el operador de módulo es lo suficientemente bueno
Ryathal el
99
tampoco imprime el número cuando no es un múltiplo de 3 ni 5. El hecho de que tampoco mencionó eso al publicar esta pregunta también lo haría muy escéptico.
whatsisname
13
¿Cómo puede alguien responder esto en nombre de sus entrevistadores?
pdr
55
Asesoramiento tangencial: haga los problemas 1-10 del proyecto euler y podrá manejar muchas de las preguntas de tipo estándar que se le formularán como un "¿puede programar? Escriba este código"
20
No creo que contrataría a alguien que no pudo escribir FizzBuzz, pero en mi humilde opinión, fallaste al escribir la sintaxis perfectamente en una pizarra, que es otra cosa.
Michael Shaw

Respuestas:

44

El objetivo de FizzBuzz es mostrar que realmente sabes programar , no que hayas memorizado todas las reglas de sintaxis más finas del idioma en el que se te ha pedido programar (aunque eso sí importa, si quieren saber qué tan experimentado es). estás en el idioma)

Si llegaste tan lejos en el estrés de un entorno de entrevistas y puedes demostrar que entiendes los errores que cometiste, diría que pasaste.

Robert Harvey
fuente
De acuerdo, no estaba tratando de dar a entender que fui yo memorizando la respuesta. Es que siento que soy un programador bastante capaz, pero siento que solo tengo un problema de programación y no me va bien, es un mal reflejo de mis habilidades. Tampoco dijeron nada sobre el problema. No me di cuenta del error de mis caminos hasta que me subí a mi automóvil y comencé a conducir a casa. ¡Entonces fue un OMG por qué! reacción.
ja_programmer
¿Te dieron primero la pregunta de FizzBuzz? Si no terminaron la entrevista de inmediato, pasaste. Los entrevistadores consideran otros factores además de una simple prueba de codificación; Los buenos empleadores quieren personas que sepan cómo pensar críticamente y resolver problemas.
Robert Harvey
Pasaron la mayor parte del tiempo preguntándome sobre mi currículum vitae, preguntando sobre varias tecnologías que había usado y cómo las usé. Y luego me preguntaron el problema de programación. Luego me hicieron preguntas sobre mí. Luego hice una serie de preguntas y les di la mano y me fui.
ja_programmer
44
Los buenos entrevistadores terminarán la entrevista cuando ya no haya ningún interés en contratarlo, lo que debería haber sucedido justo después de FizzBuzz si no pasó la prueba. No significa que aún lo contratarán, pero sí significa que no falló la entrevista de inmediato.
Robert Harvey
44
@RobertHarvey: no todos interrumpirán la entrevista en ese momento. Con mi candidato reciente que le falló a FizzBuzz, continué la entrevista en un intento por ver si podía salvar las cosas. En otras palabras, estaba dispuesto a permitir que me perdiera el ejercicio debido al estrés de la entrevista.
26

La mayoría de las personas a las que he entrevistado que fallaron en la parte del ejercicio del código por una sintaxis menor o por una lógica ligeramente desviada terminaron siendo las mejores contratadas.

Tener la idea central de la lógica (lo que hiciste) y convertirla en algo decente y conciso desde el punto de vista del código (que creo que en su mayoría lo hiciste) es mucho más importante para mí que hacerlo absolutamente perfecto.

Compro un IDE por su comprobación de sintaxis, no contratar a un desarrollador para ello, y te habrías dado cuenta de los otros errores en el momento de tu primera depuración.

Pasaste del requisito inicial a un primer intento de forma bastante directa y sin hacer nada terrible. Eso es más valioso en muchos entornos que la perfección en ausencia de retroalimentación. Si el empleador es tan obsesivo con los detalles que se perdió, de todos modos podría ser una señal del entorno.

Si la tarea fuera la variante de números impresos, perder el detalle se vería un poco mal, pero no tendría el peso suficiente para cambiar mi decisión si de otra manera me gustaras para el puesto.

[Editar] Como Alex señaló, también está el aspecto de la reacción y la compostura. Personalmente, trato de sacar eso del camino antes de llegar a los ejercicios prácticos tratando de arrinconar al entrevistado en algo un poco fuera de su experiencia, pero algunos pueden optar por combinar los dos. De vez en cuando me encuentro con alguien que solo tiene conocimientos de libros de texto y que navega directamente a través de los problemas teóricos y de fondo, pero en serio se obsesiona con dónde comenzar con el ejercicio práctico. Algunos ni siquiera saben por dónde empezar.

Estas personas son EXACTAMENTE lo que quiero eliminar con este ejercicio.

Entonces, a menos que haya tomado 20 minutos para que el entrevistador aclare el requisito, imagino que su solución fue más o menos su primer intento, posiblemente con un par de correcciones a medida que avanzaba. Si obtuvo lo que puso arriba en menos de 5 minutos, demostró que puede pensar lo suficiente para mis estándares.

Cuenta
fuente
2
Bill, solo quiero decir muchas gracias por los comentarios detallados. Es bueno tener algunas otras perspectivas. Es frustrante cometer errores en algo tan simple y saber que eres mejor que eso.
ja_programmer
1
Solo déjame confirmar lo que acaba de decir Bill. Este tipo de prueba está diseñada principalmente para ver cómo las personas reaccionan bajo presión. NO se espera que sea un programador perfecto cuando trabaje en estas condiciones. Solo se espera que ... trabajes. De Verdad. Solo se espera que trates de mantener la calma y enfrentar el problema lo mejor que puedas. Eso es exactamente lo que hiciste.
AlexBottoni
No se trata solo de no imprimir los números, sino también de no reconocer que en multitudes de 15 no se imprime Fizz o Buzz, sino FizzBuzz. No muestra un buen desglose del problema. Cuándo imprimir "FizzBuzz" es el elemento más importante de este rompecabezas.
Pieter B
No uso este ejemplo en particular, ya que muchas casas contratadas tienen sus candidatos memorizándolo, pero según mi experiencia, las personas que cometen los errores "oh duh" en estos ejercicios generalmente resultan ser mejores compañeros de trabajo. Su lógica comenzó desde el lugar correcto, y no hay un montón de basura extra, eso es bueno. Se perdió algo que hubieras visto en la primera compilación. Prefiero que el tipo que se equivoca 3 veces en 15 minutos sea mejor que el tipo que tarda 30 minutos en comenzar.
Bill
@Bill - ¿Qué tipo de respuestas a este problema ves? Simplemente no entiendo cómo cualquiera que no haya tenido una clase de programación no puede saber al menos tanto como yo pongo. Escribí eso en un minuto a un minuto y medio y la única razón por la que tardó tanto fue porque estaba hablando y escribiendo en la pizarra al mismo tiempo.
ja_programmer
15

El código anterior probablemente sería un factor decisivo para mí si no tuviera otra cosa para continuar. Si siguen el estilo de la entrevista de Microsoft, entonces la persona que le hizo esta pregunta probablemente lo bloqueará, y a menudo es suficiente.

Lo que me desconcierta es que el entrevistador no le preguntó sobre este código. Un buen entrevistador ha visto suficiente código propio para saber que la gente comete errores, especialmente cuando tiene prisa. Por lo general, dicen: "¿Ves algo malo en este código?" "¿No? Bueno, vamos a probarlo". Se te ocurren algunos conjuntos de resultados y luego lo ejecutas a través de la función. Luego dices: "Oh, mierda, eso no funcionó". "Ok, cómo lo arreglarías ..." y así sucesivamente. Si sobrevive a ese diálogo, en realidad es bastante impresionante y demuestra la capacidad de pensar críticamente, presentar casos de prueba y depurar su propio código.

También tenga en cuenta que generalmente no están buscando "código de trabajo". ¿Quién produce ese primer intento de todos modos? Pero lógicamente correcto con manejo de errores y buenos conjuntos de pruebas es un buen objetivo.

Además, esto puede sorprenderlo, pero está compitiendo con muchas personas que ni siquiera pueden comenzar a usar fizzbuzz. Tendemos a suponer que todos los demás atraviesan árboles b + mientras duermen ... pero en realidad, ni siquiera pueden calcular múltiplos de 3 y 5 y usar un operador de módulo. Es posible que se sorprenda de lo mucho mejor que lo hizo con los demás candidatos.

Mi consejo, solo quítatelo. Recientemente me entrevisté en grandes empresas de software (Microsoft, Amazon, etc.), y fue la primera vez que pasé por un proceso de entrevistas tan exhaustivo. Me hice el ridículo en una entrevista de Microsoft en el sitio, en gran parte debido a los nervios, pero tampoco sabía qué esperar o qué estaban buscando exactamente. Clavé un problema de ruta más corta solo para resolver algunos problemas realmente simples. Saqué los valores del extremo incorrecto de una pila, olvidé en una int atoi(char* value)implementación queint val = value[i] - '0';me daría el valor entero del personaje y varios otros errores tontos. La mayor parte de la entrevista me hizo feliz, pero aún entendí por qué no recibí una oferta. Tenía que darme cuenta de que esto no era tanto un reflejo de mis habilidades como un indicador de que solo necesitaba seguir intentándolo hasta que pudiera dominar mis nervios. Finalmente, conseguí algunas entrevistas con preguntas mucho más difíciles y conseguí el trabajo de mis sueños. Realmente es, para la mayoría de las personas que realmente saben lo que están haciendo, solo una cuestión de averiguar qué quieren los entrevistadores, tener confianza en sí mismos y dárselos. Se tarda un poco.

Jonathan Henson
fuente
Estoy de acuerdo en que el código también sería un factor decisivo para mí (he estado en algunas posiciones principales donde necesitaba revisar el código). Esperaba que me preguntaran una serie de problemas de programación y que hicieran lo que yo pensaba que era el enfoque "tradicional" de guiarme a través del problema si fuera necesario. Como mencionaste, "Ver algo mal con este código" me habría avisado de inmediato. No esperaba FizzBuzz y pensé que era un ejercicio de velocidad. Y definitivamente estaba nervioso, no dormí mucho la noche anterior. Me alegra saber que conseguiste el trabajo de tus sueños. ¡Seguiré entrevistando para conseguir el mío también!
ja_programmer
@ja_programmer bien fizzbuzz es un ejercicio de velocidad. Se supone que debes completarlo en menos de 2 minutos. No están probando sus habilidades para resolver problemas, solo su capacidad para escribir código simple rápidamente. También me han preguntado "¿Ves algún problema con este código?" cuando el código era completamente correcto y solo intentaban medir mi confianza o molestarme, aún no lo he decidido.
Jonathan Henson
Buen punto, podrían decir eso si fuera correcto. Sin embargo, creo que en este caso necesitaba un golpe justo al revés que habría ganado "cualquier problema con este código". Si hubiera pasado por un caso de prueba simple como una persona normal, me daría cuenta de que mi lógica era incorrecta. Además, en cuanto a su pregunta, voy a ir con un poco de ambos;)
ja_programmer
2
+1 para No? Well let's test it. Les pido a los candidatos que escriban chisporroteo en las entrevistas. También les pido que escriban una prueba unitaria. A veces su zumbido falla, pero su prueba de unidad detecta esto, lo que los lleva a solucionarlo, está bien. Los que son rechazados son los que escriben una solución fallida y luego escriben una prueba que no logra detectarlo. Les pregunto si están contentos con esta prueba, si es así, es cuando fallan.
Qwerky
12

Tendría que decir que no, pero no por la razón que diste, sino porque pusiste la sección FizzBuzz al final. Con la forma en que funciona su código, nunca imprimirá FizzBuzz cuando lo espera. Como Lee comentó, lo imprimirá para cada valor que no sea divisible por 3 o 5.

Pero el punto principal es que aprendes de ello. Me gusta el hecho de que estás aquí preguntando cómo podrías haberlo hecho mejor. Asegúrese de hacer algunos acertijos de código e investigar preguntas comunes de entrevistas. Además, tal vez intente cronometrarse o haga otra cosa que aumente la presión para poder imitar la sensación que tendrá en una entrevista. Y prepárate, prepárate y haz más preparación para la entrevista si realmente quieres sacarlo del parque.

David Peterman
fuente
3
Imprimirá FizzBuzz cuando ino sea divisible por 3 o 5.
Lee
1
Sí, me doy cuenta de eso. Realmente no sé lo que estaba pensando.
ja_programmer
@Lee lo siento, tienes razón, quise decir que nunca se imprimiría cuando él quisiera.
David Peterman
1
@mattnz No, pero espero que alguien que tenga 3 años de experiencia pueda escribir una declaración if funcional, e incluso si se equivoca, puede decirme con precisión dónde se equivocó. (sin ofender al OP, solo tratando de ser lo más honesto posible)
David Peterman
66
@mattnz: estaría menos preocupado por los errores y la compilación que el hecho de que la lógica del programa es completamente incorrecta. Podría vivir con el error isThree = i% 3, pero la parte "imprimir FizzBuzz" lo mata por mí. Probablemente le daría un pequeño empujón al entrevistado para ver si pueden atrapar y solucionar ese problema, pero si no es un factor decisivo.
Misko
9

No. El objetivo de FizzBuzz es ver si eres capaz de resolver la lógica condicional básica, que cubre todos los casos. Contrariamente a las opiniones de algunas personas, FizzBuzz no se trata de operador de módulo, sino de operaciones ternarias u operandos booleanos. Es un ejercicio simple en condicionales y lo has fallado.

El problema está estructurado para que todo el código de aspecto "elegante" no cubra al menos un caso.

Respuestas aceptables:

if div3 print fizz
if div5 print buzz
if !div3 && !div5 print x


if div3 {
    print fizz;
    if div5 {
        print buzz;
    }
} else {
    if div5 {
        print buzz;
    } else {
        print x;
    }
}
RokL
fuente
2
Su segundo ejemplo es demasiado confuso.
Brian
7

Le doy a la gente problemas de programación triviales para hacer en la pizarra. Si el código resultante está libre de errores no es el punto de decisión en absoluto. En cambio, me importan varios comportamientos exhibidos durante la redacción del código. Es interactivo, y estoy aprendiendo mucho sobre los candidatos mientras ocurre.

Entro en más detalles en la "prueba" de Whiteboard durante una entrevista: ¿forma legítima de hacer una copia de seguridad de su código (whiteboard)?

Por supuesto, su entrevistador puede no ser como yo. Pero es muy posible que usted haya pasado una entrevista conmigo , mientras que la producción de código que es un minúsculo pequeñito fuera poco, y muy posible que haya fallado con el código idénticos.

Kate Gregory
fuente
1
Gracias por el enlace. Esa fue una muy buena lectura. Es todo lo que escuché (hace unos años) en mi clase de preparación para entrevistas. Ojalá hubiera escuchado tu consejo antes de esta última entrevista. No me hicieron preguntas, pero tampoco fui comunicativo y no di información. Bueno, tal vez un poco, pero creo que la mayoría de eso fue murmurado. Tomaré en serio su consejo y lo usaré en una (con suerte pronto) entrevista futura que tenga. ¡¡Gracias!!
ja_programmer
4

Si estuviera evaluando esto, estaría buscando las siguientes cosas:

  1. ¿El candidato intenta obtener una comprensión clara de los requisitos antes de pasar a la implementación? ¿El candidato busca resolver mi problema o usar sus herramientas para mascotas en su caja de herramientas de programación? ¿Cómo hace el candidato para resolver problemas?
  2. ¿Es el candidato fluido en al menos un lenguaje de programación?
  3. ¿El candidato tiene una comprensión de la lógica booleana?
  4. ¿Qué hace el candidato para garantizar la calidad de sus soluciones?
  5. ¿Cómo responde el candidato a los comentarios sobre su código?

-

Es difícil decirlo en el n. ° 1. Su pregunta indica que su problema no incluyó la parte del "número de impresión", y su solución de hecho no incluye eso. No tengo más remedio que tomar su palabra, pero si de hecho fue el clásico problema de FizzBuzz que incluyó la impresión de los números que tampoco eran divisibles, entonces parece que saltó a una solución antes de comprender completamente los requisitos, que Sería una marca fuera.

Te daría crédito parcial por el # 2 y el # 3. Sabía utilizar el operador de módulo y tenía la estructura de una solución de trabajo, pero omitió partes de ambos.

Parece que no hiciste el n. ° 4, lo que te marcaría. En el futuro, recomendaría dar un paso atrás desde la pizarra y revisar su solución antes de llamarla. También (sin que se me solicite) pasaría por un par de pruebas unitarias para su solución, lo que habría demostrado rápidamente dónde se equivocó.

No te dieron una oportunidad en el n. ° 5, lo cual es lamentable. Pero el punto es que no quiero a alguien que piense que cada línea de código que han escrito es oro puro que no podría mejorarse, sino alguien dispuesto a aceptar comentarios sobre sus soluciones y entablar una conversación sobre su enfoque. .

-

Entonces, si estuviera evaluando esto solo, votaría "No Hire". Cosas como esta son una especie de medición de un arte de performance en lugar de la capacidad de programación , pero dominarlo aún puede ayudarlo en su carrera. Entonces, mis recomendaciones para futuras entrevistas tecnológicas serían:

  1. Antes de la entrevista, practique un par de este tipo de ejercicios en frío, utilizando la menor cantidad de recursos externos posible. No para memorizar soluciones, sino para estar seguro de que se siente cómodo con su idioma preferido

  2. Haga preguntas sobre el problema para validar sus suposiciones.

  3. Antes de anunciar que su solución está completa, retroceda desde la pizarra y revísela, y recorra un par de casos de prueba unitarios simples.

JohnMcG
fuente
Si bien estoy de acuerdo con esto como un objetivo básico de la entrevista, este no es el punto de fizzbuzz. Fizzbuzz está midiendo una cosa y solo una cosa. ¿Puedes escribir código simple de forma rápida y correcta? Por lo general, los entrevistadores quieren que se haga esta pregunta en menos de 2 minutos. Eso no es todo, lo sé, pero para eso está diseñada la pregunta.
Jonathan Henson
1
El punto de fizzBuzz es lo que el entrevistador quiera que sea. Si tuviera que usar fizzBuzz o un ejercicio similar, esto es lo que estaría buscando.
JohnMcG
1
Ciertamente, cualquier pregunta de la entrevista es lo que el entrevistador quiera usar para evaluar las cosas que le interesan. Mi punto es que FizzBuzz es una pregunta muy pobre para evaluar cualquier cosa que no sea, "¿Puede él / ella escribir el código correcto rápidamente?" No es realmente un desafío técnico suficiente para evaluar las habilidades de pensamiento crítico. Si alguien se engancha seriamente a esta pregunta, ¿incluso los quieres en tu equipo? Es como contratar a un ingeniero que no puede hacer cálculos básicos. Si bien todos quieren asegurarse de que el ingeniero conozca su cálculo básico, no es realmente negociable que lo haga.
Jonathan Henson
2

Pedirle a alguien que resuelva un problema sin darles la posibilidad de obtener comentarios sobre su solución es un enfoque cuestionable, porque no se les permite mejorar.

Todo lo que esta prueba nos dice es que usted no demostró muy buenas habilidades para resolver problemas "de la cabeza".

Este podría ser uno de los elementos en la decisión de contratarte o no, pero para mí definitivamente no debería ser el único.

Si le hubieran proporcionado un entorno de prueba o ejecución de la unidad, los errores que cometió hubieran sido menos excusables.

guillaume31
fuente
1
Hay un momento y un lugar para mejorar sus habilidades, pero la entrevista de trabajo no lo es.
RokL
¿Implica que un reclutador no debería preocuparse por la capacidad del candidato para mejorar a sí misma?
guillaume31
1
Mejorarse se lleva a cabo en escalas de tiempo de más de una hora. No es importante para el reclutador.
whatsisname
Creo que dado lo fácil que fue el problema, no debería haber cometido ningún error a pesar de estar bajo estrés. Dicho esto, creo que hay motivos para "mejorar" en problemas como este, si el entrevistador empuja un poco al candidato. Incluso diciendo algo tan simple como "¿crees que podrías mejorar esto?" le dará al candidato una pista de que algo no está bien o que podría hacerlo mejor. No tengo ese comentario.
ja_programmer
@whatsisname: Creo que debería ser importante para el reclutador, pero no en la forma en que podría pensar. Si el candidato es rechazado, el reclutador necesita retroalimentación para entender por qué para que pueda presentar mejores candidatos a la compañía en el futuro e instruir a este candidato sobre cómo pueden convertirse en un candidato más fuerte para el futuro. Creo que hay espacio para el beneficio mutuo allí.
alroc