El logo de DevSkillerLogotipo de TalentBoostLogotipo de TalentScore

No asistiré a tu entrevista de prueba algorítmica

Publicado: Última actualización:
La prueba algorítmica de Tomasz Nurkiewicz

¿Cómo contrata una persona normal a un sastre de primera categoría? Piden a los candidatos que les muestren lo que han cosido hasta ahora, incluso les piden que cosan algo rápido. A continuación, observan los resultados y se fijan en lo bien que manejan la máquina de coser, en la organización del lugar de trabajo y evalúan la atención del sastre a los detalles. ¿Están desperdiciando demasiada tela o simplemente no están haciendo un buen trabajo?

¿Cómo contratan los desarrolladores de software a los mejores sastres? Bueno, probablemente sería algo así: "Esto es una pizarra. Por favor, dibuje la diferencia entre un Ghiordes y Senneh se anudan. Derivar la longitud del hilo en función de la superficie del tejido".

Honestamente, creo que un sastre de primera clase debería saber la diferencia, pero ¿qué estamos verificando realmente aquí? ¿Quieres una chaqueta elegante o una ecuación elegante en una pizarra?

Mi experiencia con una empresa de búsqueda y un banco de inversión

Permítanme compartir algunas experiencias que tuve al ser entrevistado en dos grandes empresas. La primera vendía anuncios ocasionalmente entrelazados con resultados de búsqueda orgánica reales y la otra era un gran banco empresarial. En la primera, pasé varias horas ideando soluciones a tareas algorítmicas no triviales. En la segunda era similar, pero describí mis algoritmos por teléfono a una persona sentada al otro lado del Atlántico... y la cosa se puso aún más rara.

Tweeter de prueba algorítmica

En la empresa de búsqueda, buscaba el sufijo más largo de una lista enlazada que hiciera... algo. Francamente, no recuerdo mucho. Al igual que no recuerdo la última vez que usé una lista enlazada. Sí, entiendo cómo es diferente de un array - implicaciones de rendimiento, diferentes casos de uso, etc. También lo sé porque esta pregunta se hace en todas las malditas entrevistas. Pero en el trabajo real, simplemente nunca he tenido la oportunidad de sacar provecho de esto. También hubo una pregunta relacionada con el equilibrio o el recorrido de un árbol de alguna manera extraña. Sinceramente, no fue una experiencia muy memorable. De hecho, creo que sería honesto por mi parte decir que conocía este ejercicio de antemano. No de un libro sobre algoritmos, sino de una guía sobre cómo ser contratado en esta empresa en particular. Más adelante hablaré de ello.

En el banco de inversión, primero me pidieron que generara todas las permutaciones posibles de una lista de elementos. Tengan en cuenta que todo esto ocurrió durante una llamada telefónica transcontinental. De acuerdo, sólo por diversión, voy a imaginar que me hago este tipo de preguntas. Aquí están las posibles respuestas que esperaba, de peor a mejor:

  • Busca una solución en internet, afirma que es tuya y piensa que no oigo el golpeteo del teclado
  • Recitar una solución de memoria, línea por línea, porque te has preparado como un loco, y por suerte te sabes la solución de memoria. Y no mucho más que eso.
  • Código imperativo y enrevesado que itera sobre la entrada. Preferiblemente usando variables como i, j, k
  • Solución limpia y recursiva, porque el candidato se dio cuenta de que este problema se puede descomponer.
  • Si te da asco el código escrito a mano, busca un poco más y encuentra una biblioteca que haga exactamente eso (por ejemplo Colecciones2 de Guayaba)
Pruebas de algoritmos de pizarra

En serio, probablemente estés buscando un nuevo compañero de equipo. ¿Preferirías ver un pull request con código elegante y recursivo o una única llamada a la biblioteca? Una librería probada por millones de desarrolladores, basada en el libro de Donald Knuth "El arte de la programación informática"? Además, me costó encontrar una biblioteca, mientras que los bucles anidados hechos a mano están por todas partes en Internet. ¿Qué tipo de actitud buscas? ¿Memorizar y copiar ciegamente el código de Internet, o realmente hacer la investigación para encontrar soluciones probadas?

Otro ejercicio que se me encomendó consistía en barajar aleatoriamente una matriz disponiendo únicamente de un lanzamiento de moneda al azar. Se trata de un problema interesante en sí mismo, pero que no tiene nada que ver con las condiciones de trabajo. De alguna manera se me ocurrió un algoritmo (y fue bastante divertido), pero, al cabo de unos meses, lo único que hacía era pasar un trozo de XML de un lado a otro del banco. Cientos de transformaciones mundanas por segundo y, por cierto, todos los lenguajes principales tiene soporte para shuffle: [1], [2], [3], [4]o un paquete [5].

Preguntas de la entrevista de la prueba algorítmica: la perdición de la contratación

Como soy licenciado en Informática, no me parecen intimidantes ni inútiles las pruebas de algoritmos. De hecho, es todo lo contrario, son estupendos para ejercitar el cerebro, como resolver sudokus o jugar al bridge. He asistido a múltiples concursos de algoritmos (por ejemplo El advenimiento del código) y siempre los he encontrado agradables. Pero eso es sólo mi afición, quizá prefieras estudiar DDD o SQL avanzado. Y no estoy seguro de que los algoritmos puros y las estructuras de datos encajen especialmente bien en la mayoría de los procesos de contratación. Verifican la capacidad analítica abstracta de un candidato, así como una sólida formación en CS y matemáticas (que son rasgos importantes en la ingeniería de software), pero no captan otros rasgos importantes o son demasiado enrevesados para ser concluyentes.

Hoy en día, la mayor parte del trabajo en TI requiere coser APIs y frameworks. Nos parecemos más a los sastres que a los fabricantes de telas. El dominio de los algoritmos es útil cuando se trata de escalar una sola característica de su sistema, pero una experiencia más centrada en los sistemas distribuidos probablemente le llevará más lejos. Por ejemplo, conocer la teoría de los grafos o las funciones discretas es valioso. Sin embargo, la experiencia práctica con una gran red de bases de datos replicadas o la comprensión de por qué algunas funciones hash están comprometidas tiene un impacto mucho mayor en tu trabajo diario.

Pruebas de algoritmos de pizarra

En efecto, entender qué es la recursión es esencial. Al igual que saber por qué HashMap es tan rápido en Java. Pero entender por qué Diccionario es aún más rápido en C# es el siguiente nivel. Pista: la disposición de la memoria, algo que no está relacionado con la complejidad computacional teórica. Sin embargo, muchos creen que hacer preguntas puramente algorítmicas es la forma más sencilla de encontrar desarrolladores excepcionales y bien formados. Tal creencia es muy romántica, pero a menudo extremadamente ingenua. Basta con ver cuántos libros ayudan a tener éxito específicamente en las entrevistas (famosamente algorítmicas) de Google. No enseñan los fundamentos de la informática, apenas explican cómo resolver clases específicas de problemas del estilo de Google.

La ordenación es una de las preguntas de entrevista sobre algoritmos más (ab)utilizadas. Saber cómo Quicksort es valioso, aunque, por ejemplo, Java no lo ha utilizado durante casi una década. Entender lo que es O(nlogn) también puede ser útil. Pero la mayoría de las veces no era la complejidad algorítmica lo que hacía que mi sistema se detuviera. En su lugar, era un problema N+1, algo que me encontré por las buenas pero que apenas se trató durante mi formación en informática. Si no puedes resistir el impulso de preguntar sobre la ordenación, al menos discute lo que significa que un algoritmo sea estable. Lo más probable es que utilices un algoritmo rápido ya hecho. Lo más probable es que lo único que te preocupe sea si es estable o inestable. Pista: la ordenación en Java es estable, en C# no lo es.

Pruebas de algoritmos de pizarra

Tenga en cuenta que las preguntas algorítmicas son estupendas si eso es lo que realmente necesita a diario. Los expertos en aprendizaje automático tienen que entender qué descenso de gradiente es, y eso requiere una importante formación en matemáticas. Además, la estadística, la investigación, la infografía y el desarrollo de juegos suelen requerir una cierta formación en informática. Por lo demás, aprovecha bien el tiempo de reclutamiento y haz las preguntas adecuadas.

Un mejor enfoque para un prueba algorítmicaDiseño y trabajo conjunto

Entrevisté a montones de personas durante mi carrera, lo considero parte de mi trabajo, especialmente en los puestos más altos. Muchas de las entrevistas eran olvidables, pero en ocasiones los candidatos quedaban muy satisfechos, aunque no consiguieran el trabajo. Esto crea una gran relación y una marca para tu empresa. ¿Cómo he creado una experiencia tan buena?

  • Prefiere la resolución de problemas de la vida real. Diseñar una arquitectura similar a la de Twitter o crear un sitio web similar al de Instagram: este tipo de ejercicios son mucho más divertidos que encontrar el camino más corto o el palíndromo más largo.
  • Prefiera la programación por parejas a los bocetos en la pizarra. Ver cómo trabaja un candidato, cómo navega por el código, busca respuestas, aborda los obstáculos... esto debería decirle mucho. Además, trabajar juntos reduce el estrés y hace que el proceso sea más humano.
  • Prefiero una base de código existente a un editor vacío. Nos encantan los proyectos de nueva creación, pero modificar una base de código existente está mucho más cerca del trabajo real.
  • Prefiero las pruebas a la producción pura de código. Codificar está muy bien, pero ¿el candidato busca o desarrolla pruebas junto a la implementación? Ese aspecto se pasa por alto casi universalmente durante una prueba algorítmica.
Prueba del algoritmo

Recuerda que para trabajar juntos no es necesario reunirse in situ. Hoy en día, compartir la pantalla y la colaboración en tiempo real es algo muy sencillo, también con DevSkiller.

Resumen

No hay nada malo en hacer preguntas sobre algoritmos durante una entrevista de trabajo. Es una parte importante de nuestro campo. Sin embargo, teniendo en cuenta el poco tiempo que se tiene para reclutar, hay formas más sabias de elegir a su próximo mejor ingeniero. Al ejercitar las habilidades reales, te aseguras de que un candidato es excelente en lo que realmente necesitas. Además, esto reduce el estrés y mejora la percepción que el candidato tiene de su empresa.

Compartir correo

Es más que un simple boletín de noticias

Reciba información útil directamente en su bandeja de entrada y aprenda más sobre la contratación de tecnología.

Verificar y desarrollar las habilidades de codificación sin problemas.

Vea los productos DevSkiller en acción.

Certificaciones de seguridad y cumplimiento. Nos aseguramos de que sus datos estén seguros y protegidos.