Algoritmos: ¿Por qué hay tanto odio aquí por las preguntas de entrevista de algoritmos?

En mi humilde opinión, hay algunas preocupaciones válidas sobre las entrevistas de algoritmo.

Estoy de acuerdo en que cualquier buen ingeniero de software que valga la pena, necesita comprender la complejidad del tiempo y la complejidad del espacio. También estoy de acuerdo en que las estructuras de datos informáticos y los paradigmas de programación son una parte esencial del trabajo de cualquier ingeniero de software. Especialmente en el mundo de hoy, donde los requisitos de cómputo, escala y datos son cada vez mayores. Incapaz de comprender estos parámetros puede causar errores, ineficiencia en el rendimiento y, en última instancia, pérdida de ingresos para la empresa.

Dicho esto, tengo las siguientes preocupaciones sobre las entrevistas de algoritmos:

  1. Es un mito que la capacidad de los ingenieros de software para resolver las preguntas del algoritmo del juguete mejora a medida que pasa el tiempo. Con todas las bibliotecas, la mayoría de los ingenieros de software no intentan equilibrar un árbol diariamente, sino que es esencial que un ingeniero de software sepa cuándo usar una matriz, lista, árbol o tabla hash o cualquier otra estructura de datos.
  2. El otro problema con las preguntas algorítmicas son los entrevistadores. Muchas preguntas algorítmicas no se pueden resolver en 45 minutos, si el entrevistado se ha encontrado con la pregunta por primera vez. En este caso, el enfoque del entrevistado debe ser juzgado, en lugar de la solución final. Sin embargo, la mayoría de los entrevistadores tienen sus observaciones basadas en el resultado final. En otras palabras, las entrevistas no simulan el ambiente de trabajo, sino que imitan el cuestionario de una escuela.

Los que responden odian las preguntas de algoritmos, porque a pesar de que esas preguntas son comunes en las entrevistas, la capacidad de responder esas preguntas de una manera digna de entrevista es inútil cuando se trata de habilidades de pensamiento crítico más grandes necesarias en el lugar de trabajo.

Esto es lo importante para un empleado, en lugar de un entrevistado: saber si debe escribir algún código para resolver un problema en lugar de encontrar algún otro medio (tal vez ni siquiera automatizado). Las empresas necesitan personas que puedan pensar críticamente, en lugar de simplemente vomitar respuestas de libros de texto.

La otra razón por la cual la entrevista basada en algoritmos es inútil es el hecho de que no hay forma de juzgar si la persona usó el algoritmo correcto por la razón correcta.

Finalmente, cada algoritmo tiene un número casi infinito de variaciones, y si doy una que sea técnicamente correcta, aún podría fallar la entrevista si el entrevistador nunca ha oído hablar de esa solución.

Sin embargo, en lugar de mostrar que sabía cómo encontrar mis propias soluciones, debería haber proporcionado la respuesta estándar en mis propias entrevistas, aunque es completamente opuesto a lo que desea en un programador.

Fallé en una de esas entrevistas, porque proporcioné una forma más eficiente de hacer listas enlazadas, y dado que el entrevistador no conocía este método, me equivoqué desde el punto de vista de la entrevista.

Para más información sobre este lamentable estado de cosas, vea:

La respuesta de Marcas Neal a ¿Cuál tendrá un mayor impacto en el futuro de la atención médica, la tecnología portátil o el big data?

… ..Y la respuesta de Marcas Neal a la Ingeniería de Software: ¿Los desarrolladores profesionales practican preguntas sobre algoritmos todos los días?

“La mayoría de las personas preferiría morir antes que pensar; de hecho, lo hacen” – Bertrand Russell

Me entrevisté como entrevistador y como entrevistado en varios trabajos. Creo que, a menos que los que odian puedan proporcionar un mecanismo de entrevista alternativo que haya demostrado funcionar en determinadas limitaciones de los recursos humanos y los equipos de reclutamiento, esta es la mejor manera en que sabemos cómo filtrar la experiencia.


Creo que lo odian:

… Porque estas preguntas requieren preparación y revisión de los fundamentos, práctica, pensamiento profundo y arrojan a las personas fuera de su zona de confort.

… porque si no puede responderlas, la entrevista puede ponerle cara de póquer por su título y experiencia. “Pero puedo hacer muchas otras cosas además de este conocimiento de libros”

… porque piensan que estos problemas no son necesarios en el mundo real. ** **

… porque nivela el campo de juego. Todos tienen acceso a estas preguntas, todos las han aprendido en un momento dado, es un desafío mental decente para todos. Son tan fáciles de seguir (por ejemplo, ¿búsqueda de árbol en un sistema paralelo? ¿Manipulación compleja del DOM desde una extensión de Chrome sin una gran biblioteca externa?)

… porque son enemigos. Igualmente odiarían ser desafiados a diseñar un sistema usando OOP, no OOP, patrones de diseño, funcionales, lo que sea. Si les pide que diseñen clases para un zoológico, invocarían a un hipster de programación funcional que cree que OOP está muerto. Si les pregunta sobre la escritura de pruebas automatizadas, invocarán a DHH que piensa que TDD está muerto. Si habla de bases de datos y consultas, lo contrarrestarán con “usamos ORM y no tenemos que escribir consultas”. Si todo lo demás falla, los que odian dirán que simplemente pueden “buscarlo en Google”. Pues claro. Pero “No puedes buscar en Google tu camino hacia Google”.


** ¿De Verdad? Creo que si no ha experimentado, en su gazilion de años de experiencia en desarrollo de software, alguna vez ha experimentado un problema que requiera el conocimiento de árboles, gráficos, listas vinculadas, gestión de memoria o consultas de bases de datos: o ha estado haciendo trabajos triviales en el desarrollo de software o simplemente nunca se te ocurrió cuando podrían usarse.

Antes de que me empiecen a pinchar las horcas de desarrollo súper de Quora, como sucedió en esta pregunta; ¿Cuáles son los cinco problemas que todo programador debería poder responder? permítanme presentar algunos ejemplos:

  • En iOS, una jerarquía de vistas es esencialmente un árbol. Crear y administrar dinámicamente estas vistas requiere ‘conocimiento’ de cómo se estructura y funciona un árbol.
  • en iOS, a pesar de que tenemos ARC y la administración de memoria no es un gran problema en la mayoría de los casos, aún puede entrar en ciclos de retención y demás. En una aplicación suficientemente avanzada, es casi inevitable enfrentar este problema si está trabajando con un equipo diverso. Requiere cierto conocimiento de gráficos, ciclos y cómo visualizarlos.
  • En la ingeniería de la planta y específicamente en la industria de tuberías, si está construyendo un software para diseñar el sistema de tuberías, necesitará gráficos.
  • Si está escribiendo juegos en un sistema de cuadrícula, escribiendo el algoritmo de ruta más corta, necesitará gráficos
  • si estás manipulando el DOM, estás manipulando un árbol. Tener el conocimiento puede guiarlo a escribir mejores marcos, como React.

Existen numerosos ejemplos y, a menos que esté buscando un trabajo trivial, se requieren estas habilidades.

Las personas odian lo que temen o no entienden.

En la actualidad, casi todas las empresas de primer nivel las convierten en una parte obligatoria de sus entrevistas y las entrevistas que fallan causan ansiedad. Algunas compañías, de hecho, lo llevan más allá de lo razonable, algunas mantienen el buen sentido pero aún mantienen altos niveles de contratación y muy pocas no se preocupan por el conocimiento algorítmico, en su mayoría roles muy específicos, que exigen competencia inmediata en una tecnología específica.

Las empresas que pueden permitirse el lujo, buscan ingenieros que puedan adaptarse fácilmente a una multitud de problemas futuros diferentes, porque tienen una lógica muy sólida y fundamentos informáticos y saben cómo pensar. Estas personas se adaptarán a cualquier idioma y tecnología con bastante facilidad. Las preguntas algorítmicas son las mejores que hemos encontrado hasta ahora para evaluar la resolución general de problemas.

Digamos, por ejemplo, que en algún mundo del mañana, las preguntas de JavaScript se vuelven omnipresentes en la programación de entrevistas de trabajo, independientemente del tipo de trabajo para el que se entreviste. Como no soy un experto en JS, lo más probable es que esté fallando una entrevista de trabajo tras otra, y probablemente me pregunte si tiene sentido o no que todos las usen. De hecho, incluso podría llegar tan lejos y afirmar lo estúpido que es para todos requerir un amplio conocimiento de JS. Terminaría odiando a JS simplemente porque soy un asco.

Lo mismo sucede con las preguntas algorítmicas de hoy. Las personas tienden a chupar y a ellos, por lo que los odian.

En la mayoría de los casos, un conocimiento profundo de los componentes internos de los algoritmos no es importante en la vida diaria de un desarrollador de software. Para la gran mayoría de las personas y las circunstancias, las bibliotecas comerciales son más que adecuadas. La contratación basada en eso me parece el equivalente a la contratación de un mecánico de automóviles en función de si pueden construir una máquina de prueba de emisiones.

Ser bueno en rompecabezas probablemente sea un buen rasgo para ser programador, pero también lo son un millón de otras cosas.

El problema con las preguntas de algoritmos (no los algoritmos per se) es que básicamente es un truco de memoria. Se te pide que resuelvas un problema usando un algoritmo que alguien más pensó, probablemente usando una implementación que alguien más inventó, así que básicamente es una prueba para ver si tienes buena memoria, no es que seas bueno en los acertijos.

Otro problema es que probablemente para el 99% de los trabajos de programación, no escribirás un algoritmo de complejidad en toda tu carrera. Es como un oficial de policía entrenado para usar un arma, es probable que * nunca * lo disparen con ira.

Así que eso no quiere decir que no se deben enseñar algoritmos, al igual que no se quiere decir que a un oficial de policía no se le debe enseñar a usar un arma, pero no vamos a pretender que es probable que juegue un papel en su trabajo.

Ellos tienen su lugar. Probablemente sería una buena idea que el gerente de contratación examine las preguntas sobre algoritmos haciendo que los empleados actuales las respondan.

Hago preguntas como estas, pero no creo en ser un “¡No hay trabajo para ti!” Algoritmo Nazi. Si alguien no lo ve de inmediato, les doy progresivamente más pistas. Si alguien parece entender la respuesta, y especialmente si está interesado y parece archivar el nuevo truco en su cabeza, esa es una respuesta satisfactoria en mi libro. Pero, por supuesto, si alguien pudiera obtener estas preguntas sin problemas, sería una gran ventaja. No he visto a alguien así hasta ahora, pero no hago tantas entrevistas.