Me voy a centrar en entrevistas de nivel junior aquí. Hay consideraciones adicionales para ingenieros superiores o clientes potenciales.
Para un ingeniero junior, siento que hay tres áreas principales.
El primero no es uno que yo investigo activamente en una entrevista técnica (pero investigaría en una entrevista de gerente de contratación), pero a menudo sale indirectamente. Me refiero a la actitud general hacia las cosas, a veces denominada “ajuste cultural”. Básicamente, ninguna compañía razonable quiere contratar personas que sean un lastre para otras personas. La mayoría de las personas son lo suficientemente inteligentes como para no mostrarlo, incluso si su personalidad es tóxica, pero muchos no se molestan en ocultarlo, y no están siendo contratados, no importa cuán buenos sean técnicamente. Otros pueden no ser tóxicos, pero literalmente pueden encajar mal, ya que están buscando un tipo de entorno diferente al que ofrece la empresa. Un ejemplo simple para Quora sería alguien que quiera pasar todo su tiempo haciendo investigación teórica.
- ¿Cuál es la diferencia entre Java y JavaScript?
- ¿Cuál es la diferencia entre ingeniero asociado e ingeniero de software asociado?
- No puedo formatear ni convertir mi tarjeta SD del sistema de archivos exFAT de 64 GB a FAT32. ¿Qué se puede hacer?
- Soy un chico de 25 años que trabaja como ingeniero de software. ¿Cómo puedo quitarme el culo y comenzar a tomar medidas en lugar de simplemente planear cosas?
- ¿Quiénes son algunos de los mejores programadores del mundo?
La segunda área es poder resolver problemas. Esta es el área básica de competencia para un programador. Por lo general, esto se prueba pidiéndole al candidato que resuelva un pequeño problema de algoritmos. El truco allí es dar un problema que sea accesible para personas con una variedad de habilidades, y que tenga una variedad de soluciones, desde malas a buenas o grandes. Quiero que el candidato lo resuelva, incluso si lo hacen de la manera más simple (y peor) posible. Una razón es que no quiero arruinar el estado mental del candidato, ya que tienen más entrevistas que hacer. Más importante aún, a menos que lo resuelvan de alguna manera, no puedo hacer que escriban código (vea la tercera área). Lo más importante es que puedo observar cómo lo hacen, que es realmente el punto de la entrevista.
Hay casos en los que alguien está extremadamente familiarizado con el problema y solo me da la respuesta. Esto no es informativo para mí, así que solo te daría un problema diferente. Quiero verte demostrar habilidades para resolver problemas. ¿Cómo visualizas un problema? ¿Cómo se te ocurre una idea? ¿Cómo se prueba la idea? ¿Considera todos los casos de esquina? Si la idea no funciona, ¿cómo se reagrupa? ¿Sigues golpeando en una dirección para siempre, incluso si no funciona? ¿Toma pistas (daré algunas)? ¿Reconoces qué tan buena es tu solución? ¿Buscas una mejor? Todos estos dan mucha información. En algunos casos, ni siquiera es importante si resolvió el problema, si demuestra que lo habría hecho en un tiempo, y su solución hubiera sido excelente. (Dicho esto, es mejor que no busques una solución complicada primero, ya que también estoy buscando pragmatismo).
La tercera área es solo habilidades de codificación. Lamentablemente, hay personas que pueden resolver problemas, pero no pueden escribir el código correcto. Para hacerlo bien en esta área, domine un idioma que usará para la entrevista. Escribir código unidiomático, redundante o sintácticamente inválido es un problema grave. A veces también se ven personas que tienen problemas para escribir su algoritmo como código. En última instancia, esta área suele ser lo más fácil de dominar, pero algunas personas no lo hacen.
En general, espero que las personas demuestren un nivel razonable de competencia en la resolución de problemas, un nivel correcto de habilidades de codificación y que no se equivoquen con la cultura, y me alegraría que se uniera a mi equipo.