No muchos ingenieros de software en Google podrían implementar un árbol de búsqueda binario equilibrado desde cero en un documento de Google en una pantalla de teléfono de 45 minutos.
Aquí está mi mejor conjetura sobre cuántos ingenieros de Google podrían administrar una solución. Esto es especulación total. (¡Los compañeros de Google se sienten libres de intervenir!)
- Ingenieros de bibliotecas centrales: 70%
- Graduado universitario reciente – 10%
- Ingeniero típico – 7%
- Ingeniero con más de 20 años de experiencia: 5% (Hemos olvidado más de lo que los otros ingenieros saben. Al menos esa es mi excusa).
EDITAR: Brian Bi sugirió en su respuesta que probablemente he sobreestimado las cifras en un orden de magnitud. Dada su experiencia en programación competitiva y su reciente estado de graduación, confiaría en su estimación sobre la mía.
- ¿Qué hay de malo en la condición if cuando pongo doble '==' después de la x?
- ¿Puedo estudiar ingeniería informática después de estudiar biología y matemáticas después de la clase 10?
- ¿Qué estudia un ingeniero informático en la universidad (es decir, matemáticas, etc.)?
- ¿Qué tan bueno es la especialización en Ingeniería Informática?
- ¿Cuáles son actualmente los temas candentes en la investigación de ingeniería eléctrica?
¿Por qué es un problema difícil para la pantalla de un teléfono?
Considere la implementación del MIT de un árbol rojo-negro. Con comentarios, el archivo fuente principal tiene más de 600 líneas, y eso no incluye encabezados o código de soporte. Hay una implementación de árbol AVL más pequeña en GitHub en aproximadamente 250 líneas con comentarios mínimos. Es cierto que hay una implementación de 70 líneas de un árbol rojo-negro en Haskell. Sin embargo, este código es bastante denso.
Entonces, ¿cuántos desarrolladores pueden producir una línea de código C funcional cada diez segundos? ¿Por 45 minutos seguidos? ¿Bajo presión de entrevista? ¿Y sin la ayuda de un compilador o incluso el resaltado de sintaxis? Agregue a eso la complejidad del algoritmo e incluso los desarrolladores fuertes pueden encontrar bastante difícil completar la pregunta dentro del tiempo asignado.
Además de eso, muchos desarrolladores no han tenido que implementar un árbol de búsqueda binaria equilibrado desde la universidad. Y algunos pueden haber leído solo sobre los algoritmos. Por ejemplo, encontré árboles de separación en un curso de posgrado de CS, pero nunca me pidieron que implementara uno. Cubrí los árboles rojo-negros con más detalle en uno de los cursos de pregrado, pero eso fue hace bastante tiempo que olvidé si realmente implementamos uno.
Además de ser demasiado difícil, hay varias razones por las cuales esto no sería una buena pregunta para la entrevista.
- La pregunta requiere conocimiento de dominio específico. Los candidatos que no hayan visto los detalles de implementación antes están en grave desventaja con respecto a los candidatos que sí lo han hecho. La pregunta filtraría inadvertidamente a algunos ingenieros fuertes solo porque no habían estado expuestos a la implementación de una estructura de datos en particular.
- No prueba la creatividad de un candidato. Los candidatos que logran resolver el problema probablemente replicarán alguna forma de solución encontrada previamente. Por ejemplo, implementarían un árbol AVL en lugar de un enfoque nuevo y novedoso del problema. Los buenos problemas de entrevista son aquellos que los candidatos no han visto antes, ya que les permite demostrar habilidades para resolver problemas.
- La habilidad que se prueba no es lo suficientemente general. Dada la gran cantidad de implementaciones existentes, muy pocos ingenieros tienen que implementar un árbol binario equilibrado. Hay algunas personas en Google que trabajan en algoritmos centrales como este, pero la mayoría de los desarrolladores simplemente usan lo que producen. Por otro lado, poder usar un árbol binario equilibrado y razonar sobre su tiempo de ejecución son habilidades generales que pueden probarse. Y aunque podría esperar que un candidato pueda nombrar y describir aproximadamente al menos una implementación de un árbol binario equilibrado, probablemente aún evitaría esa pregunta porque podría dar lugar a un falso negativo.
- Alentaría las trampas. ¿Cuántos candidatos buscarían una implementación y la usarían como referencia para su propia implementación? ¿O copiarlo directamente? Esa es otra razón por la cual no es una buena idea hacer preguntas sobre cosas que están bien cubiertas en Internet, en particular para la pantalla de un teléfono.
Por lo tanto, no muchos ingenieros de Google harían bien en tal problema. Sin embargo, no importa ya que a) este tipo de preguntas generalmente no se hacen yb) ¡ya tienen trabajos en Google!