Como parte del proceso de entrevista, inicialmente pedimos a los candidatos que hagan 'FizzBuzz' hoy en día, el porcentaje de candidatos que pueden responder correctamente a FizzBuzz ha aumentado dramáticamente, esto puede deberse a su popularidad en la web.
Hace aproximadamente un año, como segunda pregunta, comenzamos a hacer una pregunta muy similar al FizzBuzz original. La pregunta fue diseñada para ser tan simple como el FizzBuzz original, y también para evaluar una habilidad particular del candidato, específicamente la capacidad de ordenar y priorizar de manera significativa y lógica un conjunto de "reglas comerciales" que se han proporcionado en algunos orden arbitrario Inicialmente, la redacción de la pregunta parece un poco ambigua, lo que puede dificultar a los hablantes de inglés no nativos, pero si se puede resolver correctamente, también le da al candidato la oportunidad de hacer preguntas para aclarar, lo que siempre es algo bueno. .
Consideramos que esta es una habilidad muy importante como desarrollador, ya que el desarrollo de software generalmente se basa en requisitos funcionales que se derivan en ningún orden en particular a lo largo del tiempo, que pueden imponer restricciones y condiciones sobre otras áreas del software sin indicarlo explícitamente y es el trabajo del desarrollador astuto para al menos investigar posibles problemas y conflictos con respecto a la implementación.
Lo que encontramos fue que un poco más del 65% de los candidatos (tamaño de muestra de 38) que aprobaron FizzBuzz fallaron por completo FizzBuzz v2.0 Normalmente, estos candidatos serían detectados más adelante en el proceso, pero parece ser una buena manera de detectar ellos desde el principio.
Mi pregunta no es si FizzBuzz está desactualizado o no, sino qué factores podrían estar contribuyendo a que un número tan alto de candidatos falle la pregunta de FizzBuzz v2.
- ¿Es la pregunta demasiado ambigua?
- ¿El estrés del ambiente de una entrevista disminuye la capacidad de pensar críticamente hasta el punto de no poder completar una tarea tan trivial?
Pregunta:
Escriba una rutina en su lenguaje de programación favorito que tomará una lista de cadenas como entrada, y para cada cadena de la lista realizará una de las siguientes acciones:
- Imprima solo Fizz si la cadena contiene la letra A
- Imprima solo Buzz si la cadena contiene la letra B
- Imprima solo BuzzBuzz si la cadena contiene A y B
- Imprima solo FizzFizz si la cadena no contiene A y B
- Imprima solo FizzBuzz si la cadena contiene solo una A y solo una B
Algunas preguntas típicas formuladas por los candidatos son:
- ¿Debería ser sensible a mayúsculas y minúsculas?
- ¿"Contiene A y B" significa que A debe venir antes que B
- ¿Qué se debe imprimir si no se cumple ninguno de los puntos?
- ¿Qué debería suceder si se puede cumplir más de una condición?
Descubrimos que la abrumadora mayoría de los candidatos que completaron con éxito la pregunta, no preguntaron nada, simplemente lo hicieron como hicieron con FizzBuzz.
Respuestas:
Tiene el potencial de ser una prueba mucho mejor que FIZZBUZZ, pero si tiene algún concepto de una respuesta correcta, es la peor prueba del mundo. Para empezar, estas pruebas tienen muy poco valor en las entrevistas.
Si un candidato responde "correctamente" sin hacer una pregunta, entonces tiene el problema de que la selección de candidatos seleccionará el tipo incorrecto de programador. No puede identificar requisitos ambiguos o no puede comprender que la mayoría de las personas no pueden escribir requisitos inequívocos. . No importa si el programa es técnicamente perfecto en todos los aspectos, es probable que sea el tipo de persona que entregará software con un "No me importa, no es lo que querías, eso es lo que pediste".
La parte de la prueba aquí es el orden de prioridad de las reglas. No lo especificas. La entrada "ABC" puede imprimir Fizz, Buzz, BuzzBuzz o FizzBuzz; cualquiera de estos es correcto
El candidato que tomaría es el que acertó (en su mayoría), pero hizo muchas preguntas e, idealmente, hizo muchos "cambios" en la pizarra.
Por ejemplo, exploraría mi comprensión de esos requisitos ofreciéndole una serie de textos de muestra y preguntándole qué esperaba que se imprimiera y por qué. - La discusión sobre mi entrada de ejemplo "ABC" debería conducir a algunos elementos útiles para usted.
Al igual que FIZZBUZZ, el resultado de esta prueba es tan bueno como sus observaciones sobre cómo se obtuvo el resultado; el resultado es irrelevante.
Lo modificaría un poco, solo para hacerlo más interesante, elimine el 'único'. Está cubierto en la línea de arriba ("imprima uno de los siguientes"), y vea cuántas personas preguntan al respecto. Si el candidato pierde el "único" y tiene tiempo, indíquelo y vea qué sucede. Si trata con el "único", elimínelo del requisito y pídales que cambien el código.
fuente
La palabra "solo" en sus requisitos crea una contradicción en todas las preguntas.
Por lo tanto, su pregunta evalúa los requisitos reunidos bajo presión, ¿está seguro de que desea evaluar esa combinación de habilidades?
Si desea probar la recopilación de requisitos, le sugiero que haga UNA de las preguntas ambiguas. Si desea un reemplazo para FizzBuzz, elimine la ambigüedad.
Priorizar las reglas comerciales solo se puede hacer con conocimiento específico del dominio, a menos que incluya un contexto simple para lo que está haciendo (tal vez sean cupones para canjear por varios valores), no hay base para que el desarrollador tome su propia decisión.
Pero exigir a alguien que solicite aclaraciones cuando hacerlo tiene un riesgo significativo de resultados indeseables, tal vez no sea la mejor manera de medir su habilidad para reconocer los límites de su conocimiento. Pueden darse cuenta de que es más seguro adivinar y equivocarse, que señalar que usted es incompetente para escribir los requisitos, o si ninguno de los entrevistadores son desarrolladores, etiquetados como tener una mala actitud.
fuente
Con la ambigüedad de los requisitos, uno no puede finalizar v2.0 correctamente sin hacer preguntas.
fuente
Si desea eliminar cualquier ambigüedad, puede cambiar los requisitos a:
Escriba una rutina en su lenguaje de programación favorito que tome una lista de cadenas como entrada, y para cada cadena de la lista haga lo siguiente:
fuente
Sí, la pregunta es demasiado ambigua para ser respondida sin aclaraciones. Sin embargo, una regla adicional que dice que en los casos en que se aplican varias reglas, su programa debería elegir lo más específico, debería eliminar la ambigüedad.
Es más probable una indicación de que el candidato "abarrota" el FizzBuzz: estrés o no, el programa es muy simple.
Creo que el FizzBuzz modificado no es comparable al original, porque su solución ideal es diferente: aunque una cadena de
if-then-else
restos sigue siendo aceptable, creo que una solución basada en tablas es más apropiada para este problema:El tamaño del espacio del problema
3x3
no es2x2
, por lo que se asigna a una tabla mucho más fácilmente que el FizzBuzz original. De hecho, encuentro una solución basada en tablas para el problema original de FizzBuzz más difícil de entender.fuente
Dos cosas aquí:
fuente
He visto procesos de entrevistas que alientan a los programadores a pensar en voz alta y hacer preguntas para ver su proceso de pensamiento. Me gusta más este proceso.
Leí este fizzbuzz v2.0 y pregunté sobre los requisitos n. ° 3 y n. ° 5 allí. No conozco a otras personas, pero creo que en ingeniería no quiero ninguna ambigüedad, así que hago una pregunta. Porque más adelante (codificado y todo), no quiero saber que tuve que hacer una suposición y que estaba mal.
fuente
Quizás la forma más fácil de evitar la ambigüedad es mostrar algunos ejemplos:
"A" devuelve "Fizz" "aAbA" devuelve "Fizz" "B" devuelve "Buzz" "aBbB" devuelve "Buzz" "AB" devuelve "FizzBuzz" "ABaabb" devuelve "BuzzBuzz" "" devuelve "FizzFizz" "ab "devuelve" FizzFizz "
fuente
En lugar de dar a un candidato requisitos contradictorios / poco claros, solo pregúnteles cómo manejan esas situaciones. De lo contrario, te verás incompetente o, peor aún, pondrás a las personas competentes en la traicionera barra de equilibrio de "¿cómo obtengo las respuestas que necesito sin implicar que esta pregunta de la entrevista o la persona que la pregunta es estúpida?"
De cualquier manera, es irritante ya que todos salen. Las entrevistas son un proceso de correspondencia y con eso quiero decir una calle de dos vías. Las preguntas directas y la claridad de intención son mucho más importantes que poner al candidato bajo una olla a presión, IMO. FizzBuzz es un buen ejemplo de una pregunta de codificación porque es breve y dulce. No lo reutilices directamente. Escribe preguntas simples como esta que sigan ese modelo.
Pero para FFS no sea inteligente al respecto y oculte la prueba real detrás de otra prueba. Pregúntele a la gente cómo manejan el maldito problema. Un desarrollador experimentado habrá tratado con requisitos ambiguos repetidamente y estará encantado de contarle sus estrategias. Incluso podrías aprender algo.
Y no asuma que todos quieren usar una pizarra blanca o se sienten cómodos durante el período de escritura a mano. Algunos de nosotros hemos estado escribiendo desde que teníamos 12 años (con muchas gracias a Space Quest). Ni siquiera puedo pensar con claridad con un bolígrafo o marcador en la mano. Es 20-freaking-13, ¿qué pasa con las pizarras blancas? Cuando la gente me da un bolígrafo y papel y me pide que haga una prueba de código, es difícil reprimir una carcajada.
fuente
Creo que es una buena pregunta de entrevista. Los requisitos no están claros, tal como lo son a menudo en la realidad. Usted verifica si el candidato es lo suficientemente inteligente como para darse cuenta de esto (incluso bajo estrés), que no tiene miedo de hacer las preguntas que considere necesarias y es capaz de poner los requisitos en una estructura sensible. Y dice un poco sobre sus habilidades de programación, aunque también debe plantear algunos problemas más complicados que contienen recursividad y punteros, ya que este problema es demasiado fácil.
Sin embargo, me preocupa un poco que los candidatos "exitosos" no hagan preguntas. Intentaría averiguar si se dieron cuenta de que puedes aplicar hasta 4 de las reglas en algunos casos y que no hay nada en la pregunta que resuelva esa ambigüedad, y que expliquen cómo trataron eso. Quizás su pregunta no sea lo suficientemente ambigua como para obligarlos a preguntar, o quizás debería pedirles que piensen en voz alta.
Por cierto: me parece extraño que estés hablando de una "solución correcta". Si formula la pregunta de esa manera, es legítimo imprimir cualquiera de "Fizz", "Buzz", "BuzzBuzz" o "FizzBuzz" si obtiene "AB". Entonces, en mi humilde opinión, cualquier solución sin preguntas es completamente incorrecta.
fuente