Entrevisté a un candidato para un puesto de programación. Él es un recién graduado de una universidad en ciencias de la computación.
Tiene una excelente recomendación de su supervisor mientras estaba haciendo una pasantía para un trabajo de programación, y tuvo una serie de proyectos paralelos de programación en su haber durante su tiempo en la universidad. Proyectos no muy difíciles, pero definitivamente sitios web/aplicaciones móviles autónomos y utilizables. Basado en el currículum, parece un ajuste estelar.
El único problema es que cuando le hice una prueba en papel, básicamente tiene que usar lápiz y papel para responder algunas preguntas de programación, tuvo problemas y no pudo contestar una sola. Todas mis preguntas son preguntas de programación muy básicas, en algún lugar a lo largo del nivel de fizzbuzz, haciendo coincidir un elemento en la matriz, el tipo de preguntas que pueden responder fácilmente aquellos que toman un semestre de curso de programación de nivel de entrada.
Y ya mencioné que no me importa en absoluto la sintaxis/lenguaje. El pseudocódigo es lo suficientemente bueno para mí.
Pidió retirar las preguntas para obtener respuestas, a lo que acepté. Al día siguiente me envió las soluciones totalmente corregidas. Hizo las tareas en un IDE y logró obtener todas las respuestas correctas.
Esto me desconcierta: si es tan bueno como implica su recomendación de referencia, ¿por qué no puede manejar la prueba en papel? ¿Es posible que haya algunas personas que puedan codificar bien frente a la pantalla de una computadora, pero cuando se trata de escribir soluciones de programación en un papel, tengan dificultades?
Editar:
for
, if
... nada en absoluto sobre llamadas esotéricas de biblioteca. Cualquier cosa que requiera conocimientos prácticos en un determinado marco se considera no básica. Por lo tanto, no le pido al examinado que memorice ninguna llamada al http
método.¿Es posible? Seguro. Las personas pueden acostumbrarse tanto a un IDE con autocompletado de sintaxis y resaltado de sintaxis que se bloquean mentalmente si intentan escribir código en papel o en una pizarra.
¿Es posible que haya hecho que alguien más haga el trabajo? Seguro.
¿Por qué no pedirle que regrese y haga un conjunto similar de problemas con una computadora con cualquier IDE que desee configurar? Si es capaz de producir código de calidad en un entorno mucho más cercano al lugar de trabajo real, genial. En el futuro, puede ofrecer a los candidatos la opción de usar un IDE o hacer las preguntas en papel por adelantado si las personas tienen un bloqueo mental con las pruebas en papel.
Este enlace de los comentarios https://blog.codinghorror.com/why-cant-programmers-program/ publica un problema interesante, uno que es francamente frustrante escribir en papel.
¿Por qué?
Aquí están los requisitos en el texto:
Escriba un programa que imprima los números del 1 al 100. Pero para los múltiplos de tres imprima "Fizz" en lugar del número y para los múltiplos de cinco imprima "Buzz". Para números que son múltiplos de tres y cinco, escriba "FizzBuzz".
Aquí están los requisitos como pasos
Aquí es donde se desmorona. Los programadores no piensan cómo hacer los 4 pasos a la vez, hacen un paso a la vez. En una computadora esto es fácil, escriba el primer paso, luego edite el segundo, luego edite el tercero, verifique si el cuarto funcionó.
Pero en papel, tendrías que escribirlo más de 3 veces, ya sea en papel o en tu cabeza. Esto toma una gran cantidad de tiempo porque no es así como los programadores han sido entrenados para pensar. Y cualquier pequeño error es otra reescritura.
La programación es un arte de hacer cientos de pequeños errores rápidamente y arreglarlos. Duplicar esto por escrito lleva un tiempo ridículamente largo. Un desarrollador senior que tarda 15 minutos es completamente razonable.
Esto también es mucho estrés para acumular durante el estrés de la entrevista regular, una actividad que generalmente ya es difícil para los programadores. Entonces se congelan.
LOOP 100 TIMES
luego sangrar: CHECK MODULO 3
y sangrar IF TRUE PRINT "Fizz"
, etc. La sintaxis en Python, por ejemplo, permite esto sin reescribir incluso en papel :)Escribí mis primeros programas en 1967 y conseguí un trabajo de programación en 1970. Durante los primeros años de mi carrera, escribí mis programas en hojas de codificación.
Hay tres diferencias significativas entre entonces y ahora, cualquiera de las cuales podría ser un problema para un programador con solo experiencia en IDE:
A menos que realmente necesite la capacidad de programar sin un IDE, debe configurar un entorno de programación para sus pruebas.
si es tan bueno como implica su recomendación de referencia, ¿por qué no puede manejar la prueba en papel?
Porque no hay necesidad de recordar todo lo que puedes buscar en Google en poco tiempo. Encuentro preguntas sobre la complejidad del algoritmo, la búsqueda de elementos de matriz o la clasificación, etc. intimidantes y poco profesionales. Estas son cosas sobre las que puede leer muy rápidamente si las necesita.
¿Es posible que haya algunas personas que puedan codificar bien frente a la pantalla de una computadora, pero cuando se trata de escribir soluciones de programación en un papel, tengan dificultades?
Sí, es posible porque es mucho más importante tener una idea general de lo que está haciendo y ser capaz de pensar de forma abstracta, tener una visión a largo plazo o ver el panorama general y ser capaz de encontrar la información necesaria cuando la necesite que saber por corazón cada algoritmo. El conocimiento enciclopédico puro es inútil cuando la gente no sabe cómo aplicarlo correctamente.
Demasiadas entrevistas se enfocan en cosas tales como si sabe qué tan rápido es una clasificación determinada (que puede encontrar en unos pocos segundos) en lugar de evaluar cómo piensa la gente.
si es tan bueno como implica su recomendación de referencia
Eso se debe a que sus expectativas son demasiado altas tanto para el candidato como para el supervisor. La carta de recomendación, si es imparcial, simplemente significa que el nivel del candidato es satisfactorio en relación con la persona que escribió la carta. Eso no significa que el candidato sea hábil en relación con sus estándares .
Por ejemplo, un niño de 14 años que puede compilar un programa de hola mundo puede impresionar a su abuela, pero no a usted.
Probablemente tenga mejores conocimientos técnicos que el supervisor, o al menos alguien que tenga mayores expectativas de excelencia.
¿Es posible que haya algunas personas que puedan codificar bien frente a la pantalla de una computadora, pero cuando se trata de escribir soluciones de programación en un papel, tengan dificultades?
Todo tipo de cosas son posibles, desde bloqueo mental hasta trampas. Pero ninguno de ellos se puede conocer con certeza y ninguno se aplica a lo que debe hacer, que es medir la competencia y la idoneidad. En igualdad de condiciones, el CV de este candidato debe estar al final de la pila.
Las recomendaciones son solo papel, mejor que nada, pero no se debe confiar en ellas por completo. He visto recomendaciones entusiastas dadas a personas que el recomendado apenas conoce o no conoce en absoluto.
Las pruebas en papel no son malas y son bastante estándar en toda la industria en el área de donde vengo. Mi sugerencia sería pedirle al candidato que escriba algoritmos en lugar de código real. Puedo comprar que el candidato no conoce la sintaxis exacta. Pero deberían poder proporcionar algoritmos/pseudocódigo.
Podría haber dos problemas potenciales
El candidato en realidad puede estar haciendo trampa.
El candidato tardará más tiempo en completar la tarea de lo habitual, lo que significa que pasa su tiempo leyendo la publicación que se le da el problema.
Todo se reduce a la forma en que te han arreglado. En nuestros días, gran parte del enfoque estaba en los algoritmos y nos enseñaron a escribir algoritmos en papel. Antes de que IDE apareciera, teníamos que escribir código en el bloc de notas, lo que hizo que nuestro dominio de la sintaxis fuera mucho más fuerte que alguien que haya aprendido en IDE. Obtener la sintaxis correcta no es muy importante, pero si el candidato está luchando hasta el punto de que no puede responder una sola pregunta, en mi opinión, entonces el candidato debe trabajar en los conceptos básicos de la programación. Lo más probable es que tengan dificultades y se tomen mucho más tiempo para completar su tarea de lo que normalmente se esperaría.
"¿Es posible que haya algunas personas que puedan codificar bien frente a la pantalla de una computadora, pero cuando se trata de escribir soluciones de programación en un papel, tienen dificultades?"
Absolutamente posible. Diferentes personas trabajan de diferentes maneras. Sus cerebros funcionan de diferentes maneras. Y algunas personas simplemente tienen problemas para escribir las cosas a mano.
Puedo escribir cosas sin tener que pensar en el proceso de escritura, va directamente de mi cerebro a la pantalla. Escribir en papel es más difícil. (Hablar cosas es mucho más difícil, convertir los pensamientos en habla requiere un gran porcentaje de tu poder mental).
Entonces, si quieres observar a las personas, obsérvalas usando las herramientas a las que están acostumbrados, y allí ves qué tan bien pueden hacerlo. Si alguien es malo escribiendo en papel y bueno usando un IDE, contrátelo. Al revés, no.
Cualquier cosa que el solicitante podría haber hecho sin que usted lo vigilara tiene una relevancia más o menos nula cuando se trata de medir su desempeño. Cualquier cosa para la que no tengas control del entorno puede usarse para hacer trampa. En particular, le diste el examen para que se lo llevara a casa y lo aprobó. Entre el momento en que salió de tu oficina y cuando regresó, tuviste cero control de todo lo que hizo. Decir "él puede haber buscado en Google las respuestas" es realmente el menor de tus problemas; podría haberle dado la prueba a su amigo y pedirle que escribiera todas las respuestas para él, por lo que sabe.
Aquí hay algunas opciones de lo que puede hacer si está interesado en este candidato:
Pídale que realice una prueba de programación adecuada, en un entorno de programación real. Configuras la computadora portátil, configuras el entorno, configuras el IDE, él hace el código. Obtiene acceso completo a autocompletar si lo desea, un compilador si lo necesita, etc. Luego puede ver si realmente puede codificar (en lugar de escribir en papel). En la vida real, todos usan las eficiencias que brindan los IDE modernos, por lo que no hay razón para no hacerlo en una entrevista.
Invite al candidato a volver y enséñele que puede usar pseudocódigo; si escriben "List.append" en lugar de "List.add", o incluso "add X to list", está bien. Nuevamente, en realidad, en una situación laboral, tendrán acceso a cosas para hacer esto por ellos. Tal vez el candidato esté obsesionado con "¿obtuve la sintaxis correcta?" y no puedo darte lo que realmente quieres. Si dice que la sintaxis no importa, entonces puede obtener lo que desea.
Haz preguntas de sondeo. "Escribir FizzBuzz" en realidad no te dice mucho; solo te dice si ha memorizado la solución de FizzBuzz. "Explícame cómo escribirías un programa para hacer X" te dice mucho más. Específicamente, te dice si esta persona tiene la aptitud mental para diseñar una solución a un problema que puede o no haber visto antes. Si ni siquiera pueden decirle, en palabras sencillas (y "decirle" es una palabra operativa, esto debería ser un ejercicio verbal, para evitar problemas como la disgrafía o la dislexia), cuál es el primer paso para resolver el problema, esa es la bandera roja que estás buscando para enviarlos a casa.
Podría tener DISGRAFÍA como yo. O autismo, o cualquier otra cosa que pueda causar problemas para escribir las cosas.
Aparte de eso, a menos que tenga la intención de que la gente programe una carpeta de tres anillos, deshágase de las pruebas en papel. Tome una computadora portátil de repuesto y haga que el programa/examen del solicitante esté en eso.
Además, no estamos en los días en los que tenías que verter libros y manuales y memorizar todo. Los lenguajes de programación se han vuelto mucho más complejos, matizados y detallados que en los días de COBOL.
Puede ser que el tipo sea muy bueno con sus herramientas y muy malo sin ellas. O podría ser que el tipo sea simplemente un tramposo, robando en el trabajo de otros y simplemente ensamblando lo que pueda encontrar sin entender mucho.
Al final, cualquiera que sea la respuesta, todo se reduce a sus necesidades específicas. ¿Necesitas a alguien que se sienta cómodo con algún tipo de herramienta? ¿Alguien capaz de codificar un algoritmo en COBOL incluso como si nunca conociera el lenguaje y odiara la codificación de procedimientos? Entonces, por muy bueno que sea este tipo, no encaja bien.
¿Necesita a alguien que esté ensamblando código, porque la mayor parte del trabajo duro en su tienda lo realizan las API, y la parte difícil es encontrar las API inteligentes y usarlas de manera eficiente? Entonces este tipo, por malo que sea, en realidad encaja bien.
Decide tus necesidades. Decida por qué la prueba en papel es relevante o no. Decida por qué la prueba casera (con la posibilidad de solicitar soluciones en Internet) es relevante o no. Ahí está la respuesta. Para muchas posiciones, alguien que hace las preguntas correctas en Internet y tiene la habilidad suficiente para reunir las respuestas de manera significativa es suficiente. Para algunas otras posiciones, el mismo tipo es solo una responsabilidad.
Reconsidere lo que realmente necesita y tome su decisión en consecuencia.
Pidió retirar las preguntas para obtener respuestas, a lo que acepté. Al día siguiente me envió las soluciones totalmente corregidas. Hizo las tareas en un IDE y logró obtener todas las respuestas correctas.
Probablemente sucedieron dos cosas:
Estoy de acuerdo con la respuesta de Ertai87 en que la mejor manera es darles una prueba del mundo real. Después de todo, el propósito de la prueba FizzBuzz es determinar si al menos pueden programar, pero eso es algo diferente de obtener trabajo real, ingresar el código e implementar la solución adecuada.
Personalmente, programo bastante bien (creo); pero nunca he sido bueno con los términos o conceptos o explicándole cosas a la gente cuando me hacen preguntas sobre programación. Puede tener algo que ver con cómo aprendí o cómo pienso, no lo sé. Pero eso no significa que no sea un buen programador.
Por otro lado, he visto una cantidad de programadores que pueden explicar todos los conceptos, conocen todos los términos y parecen realmente legítimos hasta que se ponen a codificar y resulta que son bastante malos en eso.
¿Qué tipo de programador querrías, alguien que pueda programar bien o alguien que pueda hablar bien sobre programación?
Además, no puedo recordar una mierda sin intellisense. ¿La gente realmente piensa que los programadores pueden recordar cada método de cada tipo de cada lenguaje con el que se supone que deben trabajar?
Además, las pruebas son estúpidas. FizzBuzz es estúpido. Dame una tarea que pueda hacer en un IDE, como cómo trabajaría si estuviera trabajando... y realmente no importa cómo lo haga si te lo devuelvo y es lo que quieres. Puedo usar google, stack overflow, c# corner... ¿qué importa eso? Un no programador no puede programar mirando el desbordamiento de pila. Un no programador ni siquiera sabría las preguntas correctas para obtener las respuestas que está buscando.
Realmente deberías seguir tu instinto, que estoy seguro te está diciendo que lo contrates.
Existe la posibilidad de que haya hecho trampa en la universidad y su pasantía lo haya llevado a trabajar para un amigo de la familia en un puesto alto. Conozco a una amiga que consigue una buena pasantía, por el tiempo que quiera a la semana debido a las conexiones de su madre. También sé de alguien que hizo trampa para ingresar a la universidad y luego tuvo uno de los años en la universidad hecho por otra persona.
Sería muy cauteloso aquí, proporcionaría otra prueba con un límite de tiempo por correo electrónico y le haría saber que la obtendrá en un momento determinado y que tiene esta cantidad de tiempo para terminarla. Si él/ella realmente es todo eso, también podrían hacer algo mucho más difícil que la programación de nivel de entrada.
Dele algunas pruebas más, pero use una pizarra esta vez para que no sea tan diferente de un IDE. Si todavía no puede hacerlo, déjalo pasar.
Las pruebas en papel solo verifican el sobreaprendizaje: poder recordar rápidamente hechos que ha memorizado para que generalmente estén en su memoria de trabajo. Si eres bueno en el desarrollo, no hay razón para saber más que motivos porque cualquier conocimiento adicional que necesites puede buscarse en Docs. Deberías gastar tu poder mental aprendiendo nuevas tecnologías, no sintaxis y cosas básicas que simplemente no usas. Muchos de los desarrolladores con los que hablo no han tocado cosas como algoritmos de clasificación desde la universidad. Las pruebas en papel deben permanecer en la universidad donde pertenecen.
El zumbido de Fizz en una pizarra es mucho más fácil de resolver porque puedes borrar y hacer ajustes sobre la marcha. No siempre se puede hacer eso con papel. Las especificaciones de diseño también cambian mucho. Tal vez quiera poder ver a su desarrollador hacer otra cosa, o tal vez su desarrollador literalmente hizo lo más fácil que pudo haber hecho. Sobre el papel, tendría que hacer un juicio sobre los puntos de acoplamiento. En una pizarra, puede simplemente cambiar los requisitos en ellos y ver cómo responden sin preocuparse realmente por nada.
existe la posibilidad de que sea un programador inteligente de Google :)
https://www.hanselman.com/blog/AmIReallyADeveloperOrJustAGoodGoogler.aspx
jane s
wesley largo
usuario1602
danny coulumbe
davidg
Gravitón
P.Hopkinson
Trevor
Trevor
Gravitón
Mirv - Matt
Gravitón