What are technical interviews based on?
🤓 ¿En qué se basan las entrevistas técnicas?
Suelen ser entrevistas con un ingeniero senior, con una duración estimada de 45 minutos a 1 hora y media. Estos son un tipo de “rompecabezas” y es para asesorar tus habilidades para resolver problemas algorítmicos, idealmente problemas que nunca has resuelto antes.
Es bastante común que el entrevistador conceda tips durante la entrevista, pero esto pondrá en evidencia cuánta experiencia un programador posee, lo que podría afectar la categorización en su escala de competencia y cuánto salario debería de percibir. Esto hace referencia a muchos casos en donde, por ejemplo, un ingeniero podría indicar tener 10 años de experiencia y catalogarse como un “senior” mientras trabajó en una startup, pero cuando se entrevista para una compañía con una cultura de ingeniería más amplia y fuerte, pueda que sea aceptado bajo “junior” o nivel medio. Esta forma de categorizar a los programadores se da en general según su rendimiento durante las entrevistas técnicas.
📈 ¿Por qué es bueno saber esto?
Principalmente por qué responder preguntas técnicas es difícil, y debería de ser difícil. Dada la naturaleza del trabajo es importante para el entrevistador saber cómo el candidato piensa mientras soluciona un problema que nunca ha visto antes. Generalmente hablando se puede tener noción de la agilidad mental de el programador y cuanta practica tiene desempeñando este tipo de trabajo.
Este tipo de entrevistas también permiten al ingeniero enfocarse muchas veces en la lógica del problema y no en la sintaxis del código. Ya que se suele hacer el problema en una pizarra antes - y después si el tiempo permite, se traduce a código que sí sera corrido en el compilador. Es completamente aceptable que el código que se escribe en la pizarra no sea sintácticamente correcto - nadie espera eso. Tampoco se espera que escribas código cómo getters/setters, boilerplate tests, etc. Solamente la funcionalidad. Otro de los grandes beneficios de este es que obliga al entrevistado a explicar su cadena de pensamientos cuando esta resolviendo un problema, ya que en general - cuando se le da una computadora, los entrevistados suelen comunicarse substancialmente menos verbalmente.
Para las compañías de cualquier tamaño resulta muy caro tener que lidiar con “falsos positivos”, quienes son programadores que no han sido entrevistados cautelosamente y han pasado la entrevista. En este ambiente laboral se proveerá capacitación hacia cómo funciona la cultura de ingeniería dentro de la organización, cultura laboral, entre otros. Esto resulta un proceso muy costoso para las compañías, ya que no se espera que un ingeniero sea productivo hasta después de unos meses. Si a esto se le agrega el tiempo que es necesario para entrenar a alguien técnicamente, resulta difícil justificar la contratación. Por esto las compañías prefieren perder ocasionalmente “buenos” ingenieros con este tipo de entrevistas, que dejar entrar a muchos que no serían de mucha utilidad a corto/mediano plazo.
Generalmente los criterios en los cuales las entrevistas técnicas se basan son los siguientes:
- Habilidades analíticas: ¿Se necesitó mucha ayuda externa para resolver el problema? ¿Qué tan optima fue su solución? ¿Cuánto tiempo le llevo para llegar a la solución? ¿Estructuró bien el problema y pensó en qué diferentes soluciones podrían ser mejor?
- Habilidades de programación: ¿Pudo traducir con éxito el algoritmo a la máquina? ¿Estaba el código limpio y organizado de forma sensata? ¿Pensó en posibles errores?
- Conocimientos fundamentales de informática: ¿Se tiene una base sólida en informática y tecnologías relevantes para el trabajo al cual se aplica?
- Experiencia: ¿Ha construido proyectos desafiantes e interesantes? ¿Ha demostrado iniciativa, curiosidad y otros factores importantes en los proyectos trabajados? ¿Qué decisiones técnicas (buenas o malas) ha tomado en el pasado?
- Cultura adecuada: ¿Se adecúa a la cultura y habilidades de comunicación? ¿Los valores y personalidad del individuo se alinean con los de la empresa y equipo? ¿Cómo se comunicó con el entrevistador?
Es importante saber que cada compañía y rol le darán diferente pesos a estas areas.
❗️ Por que algunos candidatos creen que no necesitan esto?
Porque si contaran con tiempo se podría googlear las respuestas y resolverlo eventualmente, pero el objetivo es verificar qué tan eficaz y entrenado se encuentra el ingeniero para afrontar algoritmos nuevos. A las compañías les interesa saber que no te tardaras muchísimas horas resolviendo un problema fácil, o que no tienes la capacidad de resolver un problema mayor.
Muy rara vez en un ambiente laboral se utilizan estructuras de datos como Arboles de búsqueda binarios (Binary Search Tree’s o BST), o reimplementan algoritmos como MergeSort. Saber cómo funcionan intrínsecamente las estructuras de datos es de hecho útil. Estos conocimientos en el mundo real no son tan comunes, y en las ocasiones que se presentan son realmente valiosos. Este tipo de conocimientos se pueden aprender de ser necesarios, pero ¿cómo saber que se tiene que usar una BST si no se sabe que existe?
Muchos ingenieros argumentan que hay una correlación entre estas habilidades y ser buen ingeniero. Esto significa que el ingeniero ha pasado por cursos de informática o ha aprendido estos temas por su cuenta, lo cual de ambas maneras es una buena señal. También resulta que la gran parte de conversaciones técnicas en el trabajo giran alrededor de estos conceptos básicos, y es raro hacer preguntas de resolución de problemas sin tener que involucrar conceptos básicos de algoritmos.
Cada compañía selecciona sus preguntas de forma aleatoria y las suelen renovar según cierta periodicidad. Así que no se debe esperar el encontrar las preguntas en esta lista, más bien se debe esperar poder practicar, aprender fundamentos claves y posiblemente encontrar soluciones optimas de las cuales se hubiera alcanzado por pensamiento propio.