Nota del traductor: el artículo original se publicó en una serie de tweets.Probablemente ya haya leído un montón de explicaciones de por qué manejar listas enlazadas es una mala pregunta para una entrevista. En primer lugar, quiero explicar de dónde vino. ¡Engancha a todos, sumérgete en la
teoría del
juego HISTORIA!
Aunque la industria del software floreció en los años 80, realmente despegó en los 90. En esta década, el número de trabajadores de la industria en los Estados Unidos se triplicó y
superó el millón de personas . Con un crecimiento explosivo, surgió la necesidad de contratar a muchos empleados y evaluarlos.
¿Qué necesita ser evaluado? Bueno, antes que nada, conocimiento de idiomas. Según TIOBE, en 1986–2006, el C era el lenguaje más popular del mundo, seguido de C ++. En 2006, Java llegó primero, pero C se mantuvo cerca.
C trabajó cerca del hierro sin abstracciones innecesarias. Un diccionario Python vacío consume hasta 288 bytes, es decir, el 5% de la memoria total de la primera generación de Apple II. Las abstracciones son demasiado caras, demasiado costosas. Si necesita una estructura de datos compleja, debe construirla usted mismo utilizando matrices, estructuras y punteros.
(C ++ resultó ser mejor en este aspecto, ya que allí apareció una biblioteca estándar de plantillas, pero se adoptó oficialmente solo en 1998 y comenzó a usarse en todas partes mucho más tarde. Recuerdo haber leído los argumentos sobre gastos generales incluso en 2005).
Las listas vinculadas son una estructura de datos necesaria que permite la asignación dinámica de memoria con menos riesgo de desbordamientos del búfer. Y tenía que escribir estas listas vinculadas manualmente. Esto significa que tenía que manipular manualmente los punteros en las listas vinculadas.
En otras palabras, en la década de los 90 la pregunta "Cómo expandir una lista vinculada" no es una prueba de pensamiento algorítmico o conocimiento de las estructuras de datos, es una pregunta "¿Programaste en C?". Si es así, la respuesta es trivial para ti. Si no, es imposible responder (idealmente).
Actualmente, la mayoría de nosotros no programamos en C. Pero la pregunta obsoleta no ha desaparecido, sino que ha sido modificada. Sospecho que la razón es que una gran cantidad de programadores continuaron preguntando y preguntando, sin entender el contexto histórico y las razones por las que apareció esta pregunta.
La situación probablemente se ayudó al consolidar el éxito de ventas
"Hackear una entrevista de programación" . Su autora Gail Luckman MacDowell trabajó en la especialidad en 2000-2008 y probablemente escribió un libro basado en su propia experiencia. El libro se ha convertido en una referencia de escritorio para entrevistar compañías, y las listas vinculadas se han establecido en la lista de preguntas estándar.
Sin un contexto histórico, las listas vinculadas se presentaron como "habilidades para resolver problemas" como una pregunta. Pero esto contradice completamente el objetivo original: si prueba su conocimiento del idioma, no quiere que las personas que no estén familiarizadas con este idioma respondan la pregunta (es decir, "resuelvan el problema").
Por ejemplo, la pregunta "Determine si hay un bucle en la lista vinculada". Se supone que el candidato debe encontrar una solución como "la tortuga y la liebre", publicada en un
artículo científico de 1967 . ¡Le pide al candidato que repita la investigación en 30 minutos!
Quizás cuando pasamos a cuestiones como la "resolución de problemas", calibramos la complejidad tomando las listas vinculadas como guía. Lo que distorsiona completamente la escala.
(Por cierto: un argumento más para las listas vinculadas es "verificar el conocimiento fundamental de la informática". Bueno, si es así, ¿por qué no todos preguntan sobre máquinas de estados finitos deterministas? ¿El teorema de Rice? ¿Cómo funciona el compilador? Las estructuras de datos son una parte muy pequeña de la informática y, a menudo no representativo).
Para resumir, la cuestión de una lista vinculada fue una buena prueba de la capacidad de escribir en C, y ahora se ha convertido en una mala prueba de "¿Puedes resolver problemas?"
Moraleja: piense nuevamente sobre hacer preguntas sobre listas enlazadas en una entrevista.
Otra moraleja: se puede aprender mucho de la historia.
(Tercera moraleja: si ve un artículo a medio completar y piensa: "Oh, es más fácil lanzar un proyecto en una serie de tweets", esto es una trampa, no caigan en él)