¿Son aceptables los desbordamientos de búfer de un desarrollador graduado? ¿Estamos poniendo el listón demasiado alto? ¿Cuáles son las capacidades esperadas de los ingenieros graduados / junior?
Contexto:
Actualmente estamos reclutando para un puesto de Desarrollador Junior trabajando principalmente en C en Linux.
Como parte del proceso, requerimos que los candidatos completen una prueba de código en su tiempo libre en C.
Hasta ahora hemos rechazado a dos candidatos sobre la base de que su código, aunque legible y en un caso bastante idiomático, sufrió errores de desbordamiento del búfer debido a escrituras de búfer ilimitadas.
[Editar]:
- Solicitamos explícitamente un código de calidad de producción con verificación de errores.
- Ofrecemos un marco de prueba y construcción para los candidatos.
[Actualizar]:
Como resultado de este hilo, y las conversaciones que hemos tenido con otros desarrolladores en persona, estamos cambiando la forma en que realizamos las pruebas de código y a quién nos dirigimos con nuestro reclutamiento.
Decidimos que un candidato que no puede arreglar o comprender un desbordamiento del búfer significa que no sería adecuado para el trabajo que llevamos a cabo, en particular recibiría más tutoría de la que nos sentimos cómodos. Por lo tanto, seguiremos rechazando candidatos que finalmente no puedan enviar una muestra de código robusta.
Sin embargo, hemos implementado algunas medidas para hacer que el proceso de reclutamiento sea más productivo tanto para nosotros como para los candidatos.
En particular:
- Hacemos que nuestras expectativas sean más explícitas, con una explicación clara de lo que entendemos por calidad de producción y una advertencia de que se espera que el código sea robusto con respecto a la entrada y los errores.
- Ahora vinculamos a los candidatos a recursos sobre programación defensiva y la biblioteca estándar C en la descripción de la prueba de código.
- Cambiamos nuestro público objetivo de desarrolladores junior y graduados para apuntar a personas con alguna experiencia relevante.
- En caso de que el código enviado falle de alguna manera, pero de lo contrario sería aceptado, ahora proporcionamos un caso de prueba mínimo que causa la condición de error y brindamos a los candidatos la oportunidad de corregir sus errores (a menos que el código sea rechazado por alguna otra razón). También señalaremos líneas / funciones problemáticas si es apropiado.
- El objetivo de las pruebas en sí ahora ha cambiado ligeramente de un filtro frontal a una oportunidad de construir una mejor imagen del candidato, en particular informará nuestra discusión telefónica. Dicho esto, todavía estamos dispuestos a rechazar basándonos únicamente en el código.
[Actualización 2015-07-09]: Andy Davis de Nujob ha escrito un artículo interesante y relevante sobre el uso de una prueba de código desde la perspectiva del candidato, y vale la pena mirar el artículo. Encuéntralo aquí .