1. Porque se cree que las personas inteligentes con una base sólida en los fundamentos de la informática son buenos desarrolladores de software.
Las preguntas en la línea de “diseñar un algoritmo para ____” prueban dos cosas:
- Habilidades de inteligencia / resolución de problemas.
- Fundamentos de informática.
Inteligencia / Habilidades para resolver problemas
Un candidato me dice: “No puedo creer que Google me haya pedido que diseñe un algoritmo para comprimir una cadena. Eso es ridículo. En primer lugar, no sé nada sobre la compresión de cadenas y no debería tener que saberlo. Segundo , incluso si necesitaba saber esto en algún momento del trabajo, lo buscaría en línea “.
- ¿Por qué no pasé mi entrevista de Microsoft?
- ¿Cuál es el mejor formato para contar algo sobre ti?
- De sus tareas actuales, ¿qué considera que ha requerido la mayor cantidad de esfuerzo con respecto a la planificación / organización? ¿Cómo has logrado esta tarea? ¿Cómo evaluarías tu efectividad?
- ¿Qué pasará si lo hice mal en una entrevista telefónica y mucho mejor en otra entrevista telefónica con Google?
- ¿Cuál es la lista de consultas importantes que debo preparar para la entrevista?
¿Si lo?
Cuando el entrevistador hace una pregunta como esta, a ella no le importa si sabes cómo hacer una compresión de cuerdas. Repito: cuando un entrevistador le pide que diseñe un algoritmo para hacer X, no intenta probar su capacidad para hacer X.
Lo que está tratando de probar es su capacidad para resolver problemas nuevos y difíciles que no ha visto antes. Esta pregunta para “diseñar un algoritmo para _____” es una forma de estimar eso.
Así es como funciona la escuela. A tu maestro nunca le importó si supieras la derivada de 3x ^ 2 + e ^ x. Le importaba si supieras cómo tomar derivadas de ecuaciones que nunca has visto antes.
Fundamentos de informática
Esto es realmente donde TopCoder y las preguntas de la entrevista difieren (o deberían diferir). Mientras que muchas preguntas de TopCoder en realidad implican un conocimiento avanzado de algoritmos, las preguntas de entrevista en realidad no lo hacen.
Las estructuras de datos y los algoritmos que necesita conocer están cubiertos principalmente durante el primer año o dos de un programa de CS. Es algo básico, para la mayoría de los graduados con un título de CS: árboles binarios, listas vinculadas, tabla hash (¡zomg yes hash tables!), Etc.
Los fundamentos de CS se prueban por una variedad de razones:
- Pueden ser útiles Bien, entonces no usarás mucho un árbol binario o una lista vinculada en el mundo real, pero es casi seguro que tendrás que crear tu propia estructura de datos desde cero. Comprender cómo se implementan los “estándar” puede ser útil para guiarlo.
- Son indicadores de lo bien que generalmente entiendes CS. Si realmente se siente cómodo con las listas vinculadas y los árboles binarios, probablemente se sienta bastante cómodo con los temas relacionados.
- No son tan difíciles, por lo que no es un gran “costo” esperar esto. Si tienes un título de CS, debes saber esto.
- Es un accidente! Una de mis preguntas favoritas es modificar un árbol binario para que soporte algo. Cuando comencé a hacer esta pregunta, no pensé: “Caramba, en el 1% de posibilidades de que este candidato necesite usar un árbol binario en algún momento del mundo real, me aseguraré de que lo sepan”. “. Es solo que, bueno, se me ocurrió una pregunta de entrevista que es relativamente desafiante. El hecho de que requiere el conocimiento de un árbol binario no es intencional.
Dicho esto, algunos entrevistadores realmente arruinan esto. Quieren elegir una pregunta de entrevista “desafiante”, pero la hacen desafiante en el lado del conocimiento en lugar del lado de la resolución de problemas. Como resultado, el porcentaje correcto de candidatos está aprobando (quizás) pero no el tipo correcto. Si hace una pregunta que requiere que los candidatos sepan (por ejemplo) árboles rojos / negros, lo está haciendo mal.
2. Porque los niños geniales lo están haciendo.
Hasta cierto punto, las compañías miran compañías como Google, Facebook y Microsoft y calculan, “bueno, deben saber lo que están haciendo, así que las copiaremos”.
Y hasta cierto punto, eso es cierto. Estas compañías pasan tiempo pensando en su proceso de entrevista.
Sin embargo:
- Esto no significa que lo estén haciendo bien. Google, por ejemplo, requiere que los pasantes pasen por “entrevistas de conversión” para obtener una oferta de tiempo completo. ¿Seriamente? Acabas de tener a alguien trabajando contigo durante tres meses y luego, para probar si sería un buen empleado, les darás entrevistas que tus propios estudios internos ya han demostrado que no tienen mucho poder predictivo .
- Para lo que están contratando no es necesariamente para lo que estás contratando. Google, Microsoft, Amazon: no son startups. Tienen diferentes recursos y tienen diferentes requisitos. Pueden poner una barra más baja en, digamos, el conocimiento de la tecnología porque tienen el tiempo y los recursos para guiar a alguien y porque hay mucha infraestructura interna.
3. Porque todas las otras entrevistas también están rotas.
Entonces tiene un problema con estas entrevistas de “diseñar un algoritmo para ___”. Bienvenido al club. Encontrarás, oh, la mayor parte de la industria aquí.
Si rechaza estas entrevistas únicamente por esto, puede ser un poco miope.
Las entrevistas estilo algoritmo están rotas. Hay muchas cosas importantes que no prueban (p. Ej., Ética de trabajo), y hay muchos candidatos excelentes que rechazan este tipo de entrevistas (debido al nerviosismo, por lo menos).
¿Pero qué vas a hacer?
Probaré a las personas con conocimientos relevantes.
De acuerdo, haz eso. Pero, vea, una persona brillante e inexperta podría saber menos al principio, pero aprenderá rápidamente. Las personas inteligentes tienden a tomar buenas decisiones y pueden adaptarse rápidamente a los cambios. Una persona tonta puede ser un peso muerto cuando la industria o el proyecto evolucionan. También pueden tomar decisiones muy estúpidas que pueden resultar en muchos gastos.
Le preguntaré a la gente sobre su experiencia. El rendimiento pasado es el mejor predictor de éxito.
Oye, si sabes que alguien fue considerado un gran programador en su último trabajo, entonces eso es genial. Adelante y contratarlos.
Sin embargo, si los está entrevistando para evaluar si tuvieron éxito, entonces realmente está evaluando su capacidad de sonar como si tuvieran éxito.
Le daré a la gente un problema de tarea.
Bueno. Buena idea. Solo una cosa: ¿cómo sabes que es su trabajo? Incluso si es su trabajo, ¿es realmente representativo de su trabajo? ¿O pasaron mucho tiempo pensando en el diseño y los errores y nunca lo harían en el mundo real?
Tampoco es necesariamente una gran cosa para los candidatos. Las entrevistas al estilo de la tarea están listas para una situación abusiva (cuando las empresas les dan tarea a los candidatos cuando en realidad no están tan interesados en ellas).
Empresas que asignan tareas a los candidatos: ¡elimínelo!
Muchos candidatos se desaniman por las entrevistas al estilo de tarea, lo cual es algo malo para usted como empresa.
Haré que la gente construya un proyecto real en mi oficina. De esta manera puedo ver cómo son en el mundo real.
Excelente. Pero, si la capacidad de resolución de problemas es algo que realmente le interesa, ¿cómo lo probará? ¿Su proyecto de la vida real tendrá una prueba suficiente de resolución de problemas? Tal vez pueda agregar un algoritmo complicado, pero ahora está haciendo una evaluación de las habilidades de resolución de problemas de alguien en función de un tamaño de muestra de 1.
Además, seamos honestos: mucha codificación no es difícil o interesante. Mucho de esto es hacer que este botón extraiga algún archivo, procese los datos de una manera obvia y yadda yadda yadda.
Lo que distingue a los programadores mediocres de los grandes no es su capacidad de hacer el 80% que es sencillo. Es su capacidad de hacer el 20% (o menos) lo que es difícil e interesante. Al hacer su entrevista tan “realista”, ahora ha dedicado mucho menos tiempo a las cosas que realmente distinguen a los candidatos.
Bien vale. Bueno, entonces les haré el mismo tipo de preguntas sobre algoritmos, pero al menos les daré una computadora. Realmente no se puede esperar que la gente escriba código perfecto en la pizarra.
Err, bueno, no, no puedes esperar que la gente escriba código perfecto en la pizarra. Así que no esperes eso de ellos.
Lo bueno de una pizarra es que permite que las personas no se tropiecen con la sintaxis. No hay pequeñas líneas onduladas que le digan que su sintaxis no es correcta o que no agregó las inclusiones correctas. “Lo suficientemente cerca” no es lo suficientemente bueno para un compilador, pero es lo suficientemente bueno para la codificación de pizarra.
Al usar una pizarra, usted pone énfasis en los aspectos conceptuales del problema en lugar de los detalles molestos, en su mayoría irrelevantes. Continúe y escriba su matriz 2D como [,] en lugar de [] [], o use .add cuando debería usar .insert. A la pizarra ya mí no nos importará.
No estoy diciendo que nunca debas dar entrevistas al estilo de tarea, o proyectos en persona, o probar el conocimiento relevante.
No estoy diciendo que estas entrevistas estilo algoritmo sean perfectas. Ellos no están. También tienen fallas.
Todas las entrevistas son defectuosas. Siga adelante y elija el estilo que funcione para usted y su empresa, con el reconocimiento de que también es defectuoso. Es mejor para todos que usemos una diversidad de procesos de entrevista.