FizzBuzz: ¿en serio? [cerrado]

60

Cuando se trata de preguntas de "prueba de entrevista", a menudo surge el tema de FizzBuzz. También hay una publicación de Coding Horror al respecto.

Ahora, si se molesta en leer sitios como este, es probable que sea menos probable que se encuentre en la demografía de los programadores que encontrarían a FizzBuzz de otra manera que trivial.

¿Pero es realmente cierto que el 99% de los programadores tendrán problemas con él?

De Verdad?

¿Cuál es la evidencia para respaldar esto?

Algunos ejemplos de la vida real serían muy útiles para responder esta pregunta.

DanSingerman
fuente
57
No es el 99% de los programadores, es el 99.5% de los solicitantes (muchos de los cuales no son programadores).
webbiedave
44
No lo creí hasta que lo conseguí en una entrevista. Más tarde conseguí el trabajo, y más tarde seguí charlando con el CEO sobre eso. Aparentemente el 99% es correcto. Oo
Fishtoaster
3
Siempre pensé que las preguntas sobre fizzbuzz eran un mito, o tal vez solo para principiantes recién salidos de la universidad, pero luego, un día, realmente me hicieron una entrevista. Sí, ¿muchos candidatos realmente tienen problemas con esto?
DarenW
2
Rutinariamente doy la prueba FizzBuzz en las entrevistas y rutinariamente la gente falla. Sin embargo, un diseñador gráfico lo aprobó un día ..... Me sorprendió un poco :)
Brandon Wamboldt
44
@Rogue Coder - Oye, no somos estúpidos, solo raros. Y la mayoría de nosotros apestamos a las matemáticas.
Inaimathi

Respuestas:

46

99%? No. ¿Un porcentaje significativo? Si. Desde mi propia experiencia directa de entrevistar a personas, puedo dar testimonio de esto. Puede parecer insignificante para usted, pero hay muchas personas en el campo de la programación que han fingido durante más o menos su camino durante años y se postulan en puestos de nivel no básico y fallan en este.

Incluso si PUEDES resolverlo fácilmente, pero me das una gran estática sobre que te pidan que haga una tarea tan servil contará en tu contra. Estar en un equipo significa tener que hacer a veces cosas que quizás no disfrutes pero que son necesarias. Si de inmediato, incluso antes de comenzar a trabajar juntos, cree que sería mejor tratar de afirmar su estado especial de estar por encima de hacer algo que le he pedido que haga, entonces actuará como una marca en su contra.

No me importa necesariamente cuán elegante sea su solución (aunque eso sería bueno), pero verlo apuñalarlo en una pizarra y hablar sobre él me muestra que al menos está dispuesto a apuñalarlo . Si te indignas y dices algo como "¡Soy un solucionador de problemas, no un mono código!" entonces serás derribado una clavija.

He tenido entrevistados que se niegan rotundamente a comenzar a intentarlo. Simplemente rechaza. No. Uh uh No lo hare. Hago una o dos preguntas educadas más, les agradezco su tiempo y cierro la entrevista.

Digo esto como gerente y como desarrollador.

Todd Williamson
fuente
1
¿Cuáles son sus motivos para negarse a intentarlo?
Jon Hopkins
3
Nunca les pregunté directamente. Después de su segunda negativa, haría un par de preguntas más y luego cerraría la entrevista. Si fuera a GUESS, sería que estaban demasiado nerviosos para intentarlo (si soy caritativo) o que de hecho no pueden resolverlo en el acto (si estoy siendo más cínico).
Todd Williamson el
1
Conozco a un tipo que se niega a codificar en las entrevistas. También se niega a comprometerse con la memoria cualquier cosa que pueda buscar en unos pocos segundos de Google. Es un "solucionador de problemas".
kirk.burleson
44
Por otra parte, la codificación de la pizarra blanca es un problema que el entrevistador le da a usted ... ¿tal vez deba resolverse? Para mí, negarme a codificar en la entrevista es equivalente a rechazar la solución de un problema que tiene el entrevistador. De ahí la contradicción con el término "solucionador de problemas" y es más como si el tipo fuera un "rechazador de problemas".
Spoike
@Spoike, porque los solucionadores de problemas no necesitan conocer la sintaxis de ningún lenguaje de programación, ¿verdad?
Pierre Arlaud
25

Creo que el 99% de los programadores que solicitan un trabajo (y no lo obtienen) pueden tener dificultades para conseguirlo. Pero no el 99% de los programadores que tienen un trabajo productivo.

Esa es la naturaleza de nuestro moderno proceso de búsqueda de empleo. Muchas personas que solicitan no están calificadas.

Esa publicación de Coding Horror también habla de la forma en que enseñamos Ciencias de la Computación en la actualidad. En el pasado (particularmente en el MIT), se requería que aprendieras cosas como Lisp, que prácticamente requiere que comprendas conceptos como la recursividad.

Hoy en día, a las personas se les enseña Java porque es ampliamente utilizado en la industria, y el enfoque se ha desplazado a la sintaxis en lugar del pensamiento de programación profunda. No me disgusta Java; de hecho, creo que es un primer lenguaje de programación ideal. Pero no he visto a mis instructores enseñar principios de programación profundos con él.

Robert Harvey
fuente
11
Sí, creo que nuestro sistema educativo (al menos en los Estados Unidos) es una gran parte de esto. Conozco a alguien que obtuvo un título de 2 años en programación de software, se graduó con honores y no podía leer ni escribir código.
Rachel
8
El argumento contra la enseñanza de Java es débil. Los conceptos se pueden enseñar en la mayoría de los idiomas (recusrion se escribe fácilmente en Java, por ejemplo). No estoy en desacuerdo con que la enseñanza de los conceptos enseñados se está debilitando, pero no culpo arbitrariamente al lenguaje de implementación.
Steven Evers
1
Oh, cosas como la recursividad se enseñan, simplemente no se acostumbran. Obtiene la misma calificación para escribir una declaración IF de 100 líneas que para escribir una función recursiva (al menos lo hizo donde fui), y la declaración IF de 100 líneas es más fácil de escribir cuando tiene prisa (es decir, usted He omitido hacer tu tarea hasta 5 minutos antes de que necesites entregarla)
Rachel
1
@SnOrfus: Tampoco culpo a Java. No discutí en contra de enseñar Java. Sí, puedes enseñar estos conceptos en Java, pero no he visto que eso suceda, de todos modos no en las clases de Java que tomé. Dicho esto, MIT originalmente eligió Scheme para sus clases de programación introductorias, porque tiene una sintaxis muy simple, por lo que comienza a pensar en conceptos de programación temprano, sin tener que enfocarse mucho en la sintaxis del lenguaje.
Robert Harvey
44
Quien diablos va a una universidad donde "enseñan Java". Las escuelas de idiomas de programación son menos útiles (independientemente de que sean Java, C ++, Lisp o lo que sea); ¿Es eso lo que tienes en los Estados Unidos? Cuando me estudié CS, que más o menos enseñadas a sí mismo el lenguaje de prog según sea necesario (una excepción sería la clase de paradigmas, supongo). Los cursos universitarios enseñaron matemática, teoría CS, múltiples paradigmas de programación, cálculo, etc. Cualquiera que se gradúe de eso puede resolver fácilmente FizzBuzz, porque tuvimos que resolver problemas más difíciles solo para aprobar los cursos.
Andres F.
20

Odio decir esto pero

La razón principal por la que he visto que las preguntas de programación no son respondidas es la culpa del autor de la pregunta y no del que responde.

Puedo recordar claramente una entrevista en la que me preguntaron cómo crear un algoritmo de búsqueda de colección particular que se ejecutaría en tiempo constante (el mismo número de búsquedas, independientemente de cuántos elementos de la colección). Traté y tropecé con él durante 20 minutos antes de rendirme. Fue entonces cuando este genio que hizo la entrevista procedió a demostrar que la respuesta era algo que operaba en un tiempo casi constante, pero aún no constante. Un poco como decir "Dame una respuesta de cero" y luego aceptar 0.1.

En resumen, he visto demasiados casos en los que alguien entrevistando hace una pregunta que no cumple con los siguientes criterios:

  1. Saben todas las posibles respuestas correctas.
  2. Saben por qué las respuestas correctas son correctas.
  3. Saben cómo proporcionar suficiente información sin revelar la respuesta.
  4. Las preguntas de "resolución de problemas" no se basan en el conocimiento de un hecho no revelado (este es el mayor problema que he visto).
  5. Le tomaría menos de 1 minuto escribir la respuesta si no tuviera que resolverlo. Si tomara 5 minutos solo escribir el código, realmente requiere más resolución de problemas de los que caben en la parte verbal de la entrevista.
  6. Las preguntas se basan en algo más que "un problema me encontré con una o me dieron en la escuela y lo que debe saber cómo resolverlo ahora ". Apuesto a que tienes más de 2 minutos para contestar, ¿por qué no le das la misma cortesía al candidato?

En serio (1), creo que pedirles a las personas que escriban código en la parte verbal de una entrevista es estúpido.

En serio (2), creo que entrevistar a las personas sin pedirles que escriban código también es estúpido.

En serio (3), debe darles "tarea", pedirles que traigan muestras de código, o darles una computadora portátil y un par de preguntas y una oficina tranquila para trabajar en ellas. Luego déjelos solos mientras trabajan en ellos. Por lo general, elijo este último enfoque, ya que limita su capacidad de obtener ayuda externa (trampa) y puedo programarlo.

desaparecido en combate
fuente
¿Tuvo una discusión con el entrevistador explicando por qué su solución no fue el tiempo constante? Si yo fuera el entrevistador y pudieras concisamente y sin malicia convencerme de que estaba equivocado, te contrataría en el acto.
Nemi
1
@Nemi: Sí, lo hice. La persona en cuestión no era una persona con autoridad de contratación, pero recibí una oferta para el puesto.
MIA
8
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;- tiempo constante :)
configurador
Corríjame si está equivocado, pero creo que las tablas hash tienen tiempos de acceso constantes, suponiendo que se realicen correctamente y no haya colisiones. Por lo tanto, una búsqueda usando una función hash debería ser posible en tiempo constante.
Trylks
Los hashes pueden tener colisiones. Es por eso que generalmente se declara como tiempo constante amortizado.
Plataforma
10

Todo lo que necesitas hacer es buscar en FizzBuzz. Hubo una gran ola de publicaciones en el blog. En general, el blogger dijo: "Le dije a la gente que lo escribiera en [algún idioma] y aquí están los tipos de errores que cometieron", y luego enumeró algunas trampas. La diversión comienza en los comentarios donde la gente dice "¡ja! Eso es trivial en [algún otro idioma], todo lo que tienes que escribir es esto:" seguido de un código. El siguiente comentario invariablemente encuentra errores en el primero. Parece que algunos desarrolladores muy buenos no lo hacen bien la primera vez, en ningún idioma. Algunos de los errores:

  • Pedí de 1 a 100 e hiciste de 1 a 99 o de 0 a 99
  • estropeando si imprimir el número junto con efervescencia y / o zumbido
  • desacuerdos sobre "fizzbuzz" vs "fizz-buzz"
  • optimizaciones perdidas, como comparar dos veces cuando una vez lo haría
  • mucho más

Cuando estoy contratando, le pido a la gente que codifique en la pizarra por mí, nada tan complicado (lo sé, no crees que sea complicado) y muchos candidatos fallan por completo. Me refiero a escribir vb-style If, ​​Then, End If pero también poner llaves (solo para estar seguro, supongo) o escribir C # (y preguntar primero, ¿C #?) Pero sin tener un punto y coma en ninguna parte. ¡No me inicies con errores lógicos!

Kate Gregory
fuente
2
@Jeff la mayoría de los desarrolladores primero escriben algo que no se compilaría. Los buenos echan un vistazo y corrigen errores simples de sintaxis. Estresado, bueno o tranquilo, los programadores bien escriben una función pero no hay código para llamarla, escriben algo que no está súper optimizado, sufren (y no detectan) un off-by-one, o pueden perder un error de sintaxis o dos. Los programadores horribles escriben código que no es ni siquiera compilable, hace lo completamente incorrecto, etc. Por ejemplo, pasar a 3 o 5, ya que están en la pregunta, en lugar de hacerlo a 99 o 100 o 101 (ish.) O incluso no código en absoluto. Realmente no puedes creerlo hasta que lo veas.
Kate Gregory
77
Si {"If {} Then {} EndIf" califica como fallando por completo} Entonces {Su estilo de entrevista es defectuoso y / o es increíblemente afortunado de poder despedir a un candidato de manera tan trivial} EndIf
Sparr
77
Programo en al menos una docena de idiomas mensualmente. Siéntate frente a una computadora y pídeme que trabaje en una que no haya tocado en un mes y cometeré errores así durante los primeros cinco minutos mientras vuelvo a la rutina, por lo general con mis errores señalados fuera por el compilador o intérprete.
Sparr
2
@Sparr, claro. Entonces, en la pizarra, si te pido que lo revises, probablemente lo veas y digas "¡Vaya! Uso muchos idiomas". Si no lo haces, diré "¿en qué idioma escribiste eso?" y entonces lo harás No es una pregunta capciosa o una trampa. Algunas personas nunca han escrito código y afirman que sí. Ese es el punto de preguntas como esta.
Kate Gregory el
2
Pero creo que esas preguntas no son buenas para eso. No podía decirle, cinco minutos antes de que comenzara este hilo de comentarios, si VB necesitaba llaves alrededor de los bloques de código. Podría haberte dicho que If / Then / EndIf se parecía principalmente a VB [.Net]. Y escribo código en VB durante ... aproximadamente dos horas cada tres meses (tareas de rentacoder.com, nunca tomo trabajos reales de VB, lo odio).
Sparr el
10

He leído el artículo de Coding Horror que mencionas, y mi opinión es que Jeff tiene razón ... pero ¿cuándo es la última vez que fue entrevistado?

Cuando lo entrevistan, generalmente está muy estresado, y a menudo tiene que responder a preguntas teóricas (sin inteligencia, sin google, sin resharper, ... solo su memoria preocupada por el estrés). Eso es lo mismo en las pruebas. El estrés no te ayuda.

Me di cuenta de que la única forma de saber si alguien es adecuado para un puesto es trabajar con él por un tiempo ... Solo tome las últimas 10 personas que contrató de cada 100 (tal vez más), cuánto fue realmente bueno ¿¿¿alquiler???

Un empleador debe contratar un solucionador de problemas, no un mono de código que sepa sobre módulos.

No puede evaluar "por un tiempo a todos los solicitantes", por lo que se requiere entrevistarlos. Es por eso que enfoco mis preguntas en eso (resolución de problemas) y hago una verificación de referencias pasadas.

Mi opinión es que el FizzBuzz es peligroso para la empresa que busca desarrolladores para respaldar su crecimiento.


fuente
28
En mi humilde opinión, el problema aquí es que FizzBuzz es una pregunta tan simple que si no puedes responderla incluso bajo estrés, mereces que la gente se ría de tu cara si te llamas "programador". Si fuera algo un poco más complicado, como "implementar un tipo de burbuja", entonces estas excusas y preocupaciones estarían justificadas, pero no para FizzBuzz.
dsimcha
23
FizzBuzz es bueno en lo que hace: el filtrado de las personas que conocen nada de la gente algo . Y saber algo aún puede no ser suficiente para hacer el trabajo. No es una prueba de decisión de contratación, es una prueba de "vas a perder mi tiempo en una entrevista". Algunos gerentes de contratación intentan llevar el fizzbuzz demasiado lejos para que haga su trabajo por ellos.
Steven Evers
31
Dios mío, el módulo no es una especie de operador esotérico. Es una operación central con la que todos los desarrolladores deben tener experiencia si desean llamarse programadores profesionales. De todos modos, si alguien puede escribir FizzBuzz no significa que lo contrates. Es solo un punto de partida rápido para ver si esta persona puede incluso intentar diseñar el flujo de control necesario para completar la tarea.
webbiedave
12
Creo que FizzBuzz es útil simplemente porque es tan trivial alucinante. Requiere un bucle for, dos sentencias if, módulo e print. Cualquier persona con alguna experiencia de programación significativa debería ser capaz de explotar sin apenas pensarlo. Si alguien tiene dificultades en una entrevista, considero que es una prueba de fuego perfectamente válida.
Adam Crossland
11
@snorfus: archivado bajo "el problema de otra persona". Prefiero perder el barco en un buen desarrollador con ansiedad social paralizante que perder un tiempo precioso y dinero entrenando y esperando los resultados de alguien sin capacidad para la programación. ¿No puedes manejarte con otros seres humanos? Ver a un terapeuta.
Aaronaught
10

Recientemente tuve la tarea de entrevistar a más de 50 programadores para un puesto senior en el que trabajarían principalmente con PHP.

Arrojé el problema del fizzbuzz en el examen de detección, principalmente para divertirme y porque quería diez buenas preguntas y solo tenía nueve. Mi intención, en ese momento, era mostrarle a la gente que también podemos divertirnos, incluso en las preguntas de la entrevista.

El 80% de los solicitantes resolvió el problema, pero no utilizó el operador de módulo.

El 15% de los solicitantes no pudieron resolver el problema.

El 5% de los solicitantes resolvió el problema utilizando el operador de módulo.

Si bien mi muestreo es bastante limitado (50 solicitantes de un país), puedo decirle que:

El 95% de ellos tenían un BS o superior en un plan de estudios de CS (las universidades aquí compiten tratando de hacer que el sonido de CS sea más espectacular).

Estaba realmente asombrado. Bueno, asustado ... pero asombrado. No pensé que estaría cerca de reproducir los resultados, ya que el problema se ha vuelto tan popular. Esto me muestra que el 5% de mis solicitantes pueden no ser súper programadores, pero al menos leen blogs relacionados con la programación.

Tim Post
fuente
Pensé que usar el operador modular era lo más obvio, me sorprende que el 95% de las personas que resolvieron el problema con éxito, usaron otra cosa. ¿Quizás es porque eran nuevos graduados y ellos mismos hicieron las matemáticas?
jmoreno
Nunca aprendí el operador de módulo en ninguna de mis clases. Si no hubiera hecho pasantías o hubiera pasado tiempo contribuyendo a proyectos de código abierto, nunca lo habría aprendido hasta que me metiera en la industria. Además, en una de mis clases introductorias de ciencias de la computación me enseñaron que el operador ternario es una mala práctica de codificación porque es demasiado confuso y difícil de leer.
Robert Fraser
¿Qué usaron en lugar del operador restante? x - (x/y)*y?
CodesInChaos
9

En mi última ronda de contratación tuve 3 trabajadores de la construcción con 0, repito cero, la educación o experiencia en programación solicito un puesto de desarrollador de software. * Entonces ese es el fondo del barril. Si asume una distribución normal de habilidades, puede ver cómo el nivel de habilidad promedio será bastante bajo e incluso 'por encima del promedio' (entre los solicitantes) seguirá siendo relativamente malo.

Ahora, si solo estás fizzbuzzing a los solicitantes que tenían lo que parecía ser una habilidad de programación, verás que ahora tienes:

  1. mentirosos
  2. entusiastas de la palabra de moda (una vez leí un artículo sobre .NET)
  3. malos programadores reales
  4. personas que usaron una tecnología para completar un proyecto, pero no aprendieron sobre ella (vea las preguntas de fizzbuzz sobre idisposable para identificarlas)

Además, algunas preguntas de 'fizzbuzz' que he visto son específicas del dominio. Puede desarrollarse progresivamente con un lenguaje / marco x durante varios años (de ahí la experiencia de z años con x) y no haber encontrado ciertas partes (los desarrolladores de bibliotecas no saben mucho sobre el desarrollo de componentes de UI, por ejemplo).

Del mismo modo, muchos desarrolladores realizan desarrollo de mantenimiento en estos días, por lo que sus habilidades de arquitectura / diseño pueden ser débiles en algunas áreas.

Ahora, no estoy seguro de si el 99% es correcto, pero IME sigue siendo bastante alto. Al menos en el rango del 80%.

* No, no llamamos ni dimos un segundo vistazo a estas aplicaciones.

Steven Evers
fuente
3
Tuvimos una situación similar, pero dado que nuestro contrato con el cliente decía que tendríamos 4 desarrolladores de tiempo completo asignados al proyecto, y el proyecto se realizó básicamente, el chico colgado de yeso aprendió a programar en el dólar del cliente por los 3 semanas restantes en el contrato.
Tangurena el
También he visto algo así cuando un programa de beneficios del gobierno / seguro de desempleo requiere que la persona que recibe el beneficio solicite cierto número de trabajos por semana. Incluso cuando esos programas tienen algún tipo de requisito nominal para que el destinatario solicite trabajos para los que realmente están calificados, los recursos para evaluar para qué trabajos están calificados y hacer cumplir esa parte particular del requisito de "solicitar trabajos" son muy limitados .
Daniel Martin
8

Sí, en serio. Probablemente no el 99%, pero sigue siendo bastante alto. Solía ​​entrevistar a estudiantes de informática para pasantías y contrataciones a tiempo completo. Entrevistaría a unos 25 estudiantes en una universidad. Nos dijeron que no hiciéramos las mismas preguntas, porque los estudiantes hablaron. Rápidamente aprendí que no importaba, porque solo obtendría 3 o 4 estudiantes de los 25 que podrían responder mi primera pregunta. "Escribir strcmp"

Les pedí que escribieran una función para comparar dos cadenas. Quizás usar la función para ordenar palabras para un diccionario. Se sorprendería de la cantidad de estudiantes que no entendieron cómo comparar dos palabras, y mucho menos saber cómo escribir la función. Y algunos de estos estudiantes afirmaron que obtuvieron todas las A en CSc.

La cosa es que la programación es MUY DIFÍCIL. A mucha gente le gusta pensar que saben programar, pero no lo hacen.

ChrisMcB
fuente
3
¡La inflación de grado apesta, pierde el tiempo para todos!
DarenW
8

Algunos pensamientos:

  • No lo consideraría en contra de alguien si su programa tuviera algunos errores, pero claramente tenían la idea correcta. La depuración es parte de la programación.

  • Creo que es triste que tantas personas soliciten trabajos que no saben que no pueden hacer. Me parece un problema con la economía.

  • Es realmente fácil hacerle a la gente malas preguntas, donde la única respuesta "correcta" es la que daría el entrevistador.

Mike Dunlavey
fuente
2
Sobre el segundo punto ... después de pasar mucho tiempo contemplando mi próximo cambio de carrera, estudiando varias industrias y buscando trabajo, fue una gran dificultad tratar de evaluar mi propio nivel de competencia en muchas cosas diferentes. Aparentemente este es un gran, gran problema para (casi) todos.
DarenW
@DarenW: Tienes mi simpatía. Creo que es importante saber lo que te gusta y trabajar desde allí. Personalmente, siempre me gustó la escuela y nunca dudé de mi interés en la ingeniería. Casi todos mis hermanos están seguros de lo que están haciendo. Uno no lo es, y es fácil ver que es una lucha. Su página de inicio indica un interés en la intersección de la ciencia y el arte, eso es genial. Algunas personas han tenido malas experiencias en la juventud, y eso puede usar toda su energía ahora.
Mike Dunlavey el
7

Esta prueba cubre muy bien varias cosas que quiero saber sobre un programador que podría contratar:

  1. ¿Puedes incluso programar?
  2. ¿Puedes escribir un programa desde cero (porque no todos pueden hacerlo!)
  3. ¿Puedes resolver un problema sin pensarlo demasiado ?

Para dar más detalles sobre el último punto, hay innumerables soluciones para fizz-zumbido. ¿Vas por legibilidad? ¿Velocidad? ¿Brevedad? ¿Intentas terminar de escribir el programa rápidamente? Cómo un programador ataca este simple problema es muy revelador. Si un programador no puede elegir una solución y verla hasta el final, ¿qué le dice eso sobre cómo esta persona se desempeñará en una tarea real?


fuente
6

Desafortunadamente, muchas personas con currículums impresionantes parecen carecer de habilidades básicas de programación. He visto muchos casos en que las personas que enumeran C y C ++ en sus hojas de vida no pueden responder preguntas básicas sobre punteros.

Dima
fuente
3

Hay dos tipos de personas que espero que FizzBuzz me ayude a evitar.

  1. Chancers sin conocimiento de programación o sin conocimiento relevante de programación. Por lo general, puede reconocerlos desde el CV, pero no siempre, y darles una tarea de programación simple es una buena manera de dejar en claro que no son programadores.
  2. Graduados de la escuela Java, que han completado un curso o título de programación pero en realidad no saben cómo programar. Estas personas pueden ser más difíciles de filtrar porque pueden hablar de teoría pero simplemente no tienen habilidades prácticas. Poner un problema simple frente a ellos y pedir una solución y una explicación de la solución es una muy buena manera de ver la diferencia entre un Petra Java y un Paula Bean.

En cualquier caso, realmente no me importa una implementación perfecta. La prueba que debe hacer con las personas que solicitan trabajos de desarrollador es que pueden programar.

Dicho esto, probablemente no me molestaría con esa prueba en particular por varias razones ahora. En primer lugar, es muy conocido y cualquiera de los grupos anteriores lo probaría rápidamente. En segundo lugar, preferiría usar las preguntas de la pantalla del teléfono de Steve Yegge para descartar a los que no son programadores antes de llegar a ellos. Si alguien reconoce esas preguntas, implicaría que han leído el blog de Steve Yegge, lo que me sugiere que estaban en el el 1% superior de los desarrolladores que toman en serio su profesión y ciertamente merecen una entrevista. Del mismo modo, si alguien tuviera un buen representante aquí o en SO, me inclinaría a entrevistarlo.

glenatron
fuente
A) ¿Qué tan bueno es "bueno"? B) ¿Estás contratando? :)
Sparr
3

Es difícil creer que los desarrolladores no puedan codificar FizzBuzz hasta que vean los "nueve a cinco" que copian y pegan su trabajo juntos e intentan conscientemente no escribir código. No podía creerlo cuando escuché a uno de nuestros desarrolladores senior que enseñaba a un desarrollador de C #, con 3 años de "experiencia", cómo usar un Diccionario. Interfaces? ¿Patrones de diseño? stdout? YAGNI? ¡Mi líder nunca había oído hablar de YAGNI! Es sorprendente lo que estas personas no saben.

Lo creo ahora. También creo que hay demasiados desarrolladores haciendo lo suficiente.

kirk.burleson
fuente
3

Creo que parte de por qué es una pregunta tan popular es porque hay más de una forma de responderla, y dependiendo de la forma en que el candidato elija ir puede darle una idea de cómo codifican. Aquí se pueden ver algunos ejemplos excelentes si tiene 10K de representante en Stack Overflow.

En cuanto a la estadística del 99%, verifique de dónde proviene ese número. Probablemente sea parcial. Si se basa en programadores de nivel de entrada que se entrevistan para su primer trabajo, entonces sí puedo ver que eso sea posible, especialmente si la mayoría de sus candidatos salen directamente de la universidad. De hecho, puedo pensar en alguien que probablemente escribiría una condición 100 si la declaración es una solución a ese problema.

Rachel
fuente
3
Sospecho que la cifra del 99% apunta a la verdad (la verdad recursiva, nada menos) de la afirmación de que el 87% de todas las estadísticas se componen en el acto.
Adam Crossland
1
@ Adam Crossland: el 100% de las estadísticas sobre estadísticas también se componen sobre el terreno.
Macha
Aún así, parece horrible que alguien no pueda resolver el fizzbuzz fuera de la universidad. Si no pueden hacer eso, ¿qué pueden hacer?
Morgan Herlocker
2
@ironcode Fui a la escuela con alguien que ni siquiera podía comenzar a comprender fizzbuzz ... Me sorprendería si pudieran escribir algo que imprimiera 100 líneas con los valores de fizzbuzz codificados. Se graduaron con honores.
Rachel
2

Encuentro la afirmación de que el 99% de los programadores no pueden programar o resolver una simple prueba de codificación muy exagerada. En el caso de la prueba FizzBuzz, o ha encontrado este problema anteriormente y puede resolverlo fácilmente con el operador de módulo o no lo ha encontrado antes y tendrá dificultades para resolverlo. No le dice al entrevistador nada sobre sus habilidades de programación.

Creo que el problema con muchos programadores que aparentemente dejan una mala impresión en una entrevista radica en la naturaleza de los métodos de entrevista técnica. Los entrevistadores esperan que los solicitantes memoricen y reproduzcan instantáneamente la sintaxis del lenguaje, los detalles y la complejidad computacional de las estructuras de datos, arquitecturas de hardware, patrones de diseño, etc. El área de la informática / ingeniería de software es vasta. Es imposible e insensible tratar de memorizar todo.

En el mundo real, la clave es poder comprender el problema de programación / diseño que se le asignó y saber dónde encontrar información (su IDE, páginas de manual, libros, google, etc.) para resolver su problema. Sin embargo, esto es algo que los entrevistadores nunca prueban.

marca
fuente
14
¿Te das cuenta de lo fácil que es FizzBuzz? No es necesario que lo hayas encontrado. Si tienes dificultades, considera un cambio de carrera.
John Smith
Pero se puede resolver sin módulo usando la división. Una solución correcta usando / en lugar de% funcionaría para mí. Por lo tanto, necesitan comprender matemáticas muy básicas y una programación muy básica.
Almo
0

Todavía soy un programador relativamente joven (he estado codificando dinero durante ~ 2 años y codificando en alguna capacidad profesional como una responsabilidad secundaria por aproximadamente 2 antes de eso), así que use suficientes granos de sal.

Tengo cierta experiencia haciendo una primera pantalla para codificadores para un Proyecto de Gran Empresa (sabíamos que el proyecto estaba condenado, pero bueno, querían pagar de todos modos). Como el único programador de la empresa que realizaba la contratación, me asignaron la tarea de revisar currículums y seleccionar a los solicitantes.

Esto era para un proyecto del gobierno por lo que tal vez , probablemente, no atrajo a los candidatos con más talento, pero no recibió una solicitud de cualquier persona con una cuenta de github que realmente había mostrado código, ni nadie que tuviera una cartera, por lo que utiliza FizzBuzz ( literalmente el problema exacto) como primer paso para cualquiera que pareciera que podría programar.

Lo presenté con una pseudo-disculpa que decía que sabía que era estúpido, pero que solo quería ver cualquier código que funcionara, y si quisieran, podrían enviar otro ejemplo de igual o mayor valor o realmente cualquier cosa, pero ese fizzbuzz sería suficiente.

El resultado: no obtuve una respuesta que fuera realmente correcta, lo cual es alucinante teniendo en cuenta el volumen de respuestas en Internet. Nadie se molestó en plagiar. Tuvimos que simplemente contratar personas que habían trabajado previamente en las iteraciones anteriores fallidas del proyecto.

Después de la conmoción inicial del ejercicio y la decepción acerca de cuán jodido fue el software / contratación del gobierno, me sentí mucho mejor con mis propias habilidades, ¿tan pequeñas victorias?

Editar: Por incorrecto no me refiero a un error off-by-one (es decir, solicité hasta 100, no 99) o algún otro error inocente que sea una solución fácil. Quiero decir que no es funcional, o no se ejecutará / compilará / etc. o mostró claramente que el problema simplemente no se leyó y no se entendió, también una parte significativa retiró la aplicación y ninguno envió otro código en su lugar.

BSpiros
fuente