¿Por qué necesito memorizar las minucias de CS para entrevistas de trabajo cuando solo puedo buscar en Google la información?

Si su jefe le dice: “Hoy, necesito que use esta biblioteca de árbol rojo-negro para implementar este almacén de datos”, probablemente no necesite saber la complejidad temporal de la inserción, solo necesita hacerlo. Si por alguna razón necesitaras saberlo, puedes buscarlo en Google.

Si, en cambio, su jefe le dice: “Tenemos que implementar un almacén de datos con estas características. Escribe un correo electrónico describiendo cómo debemos hacerlo “, entonces puedes usar Google todo lo que quieras pero debes saber qué vale la pena buscar en Google y qué no.

Pero si en su 1: 1 su jefe le pregunta: “Aquí hay algunas propiedades que nuestro sistema necesita tener. ¿Cuáles son las categorías de diseños para hacer esto? Usted y Jackie pueden esbozar los diseños la próxima semana, pero quiero saber cuáles serán los enfoques de nivel superior ”, entonces tiene un problema. Tu jefe hace una pregunta razonable. Ella quiere saber la “disposición de la tierra” para el espacio de diseño. Deberías saberlo. Si no puede describirlo al menos aproximadamente, ¿cómo puede estar segura de que cubrirá el espacio? Pero no tienes tiempo para buscarlo en Google. Tienes que hablar de eso ahora.

Acabo de describir tres escenarios del mundo real. El primero es para un programador sin mucha experiencia, el segundo escenario es para un entorno de trabajo bastante estructurado y un ingeniero de carrera temprana, y el tercero es habitual para un ingeniero con potencial de liderazgo (o actualidad) en una empresa en rápido movimiento.

Todo esto es un trasfondo para su pregunta. Su primera responsabilidad cuando lo entrevistan es hacer que la entrevista sea la mejor entrevista posible. Parte de eso es responder las preguntas cuando puede, a fondo pero no demasiado.

Pero para algunas preguntas, “la respuesta” no es el punto. Si no hubiera trabajado recientemente con árboles rojo-negros, probablemente diría esto: “Para ser honesto, la última vez que trabajé con árboles rojo-negros fue hace diez años, y no recuerdo exactamente la complejidad de su tiempo . Son árboles, y lo que está buscando con un árbol es lograr la complejidad logarítmica para las búsquedas, y la inserción y eliminación, que generalmente comienzan con algo que parece una búsqueda. Pero solo obtienes la complejidad logarítmica si el árbol se mantiene equilibrado, es decir, si la mayoría de los nodos en el árbol tienen ‘subárboles izquierdos’ y ‘subárboles derechos’. Un árbol desequilibrado es solo una lista vinculada ineficiente. Por lo tanto, se han encontrado varias formas inteligentes de mantener los árboles equilibrados de forma incremental. Un árbol rojo-negro es uno de estos. Por lo general, estas formas tienen pequeños costos en espacio o tiempo o ambos, y cuando se trata de diseño detallado, usaría Google para recordarme las propiedades de los algoritmos conocidos. Pero puedo decirle que el costo amortizado de una inserción es aproximadamente O (log n). Ciertamente no puede ser menos.

¡Una respuesta como esta le da mucho trabajo al entrevistador! Al entrevistador no le importó lo que había memorizado. El entrevistador se preocupó si usted “obtiene” árboles rojo-negros. Y esta respuesta le mostró al entrevistador que no solo obtienes árboles rojo-negros, también obtienes árboles. Eres un verdadero arbolista. Incluso si el entrevistador estaba aburrido, o acababa de pasar la noche entera, o estaba distraído por la mancha en su camisa, ahora tiene su atención, y se ha preparado para una pregunta de seguimiento como, “Está bien, entonces, ¿Cómo elegirías entre los diferentes tipos de algoritmos de árbol equilibrado?

Un seguimiento como ese es entrevistar a gold, porque te permite mostrar tus cosas. Es una pregunta de alto nivel. Tiene muchas buenas respuestas y ni siquiera tiene que haber memorizado nada, solo puede usar estudios de casos. “Bueno, si las inserciones nunca suceden, entonces no tenemos que preocuparnos por el equilibrio incremental, porque podemos usar un método basado en la ordenación para construir un árbol equilibrado previamente. Lo mismo si las inserciones casi nunca ocurren. Si podemos agregar por lotes las inserciones y hacer una inserción masiva, eso puede requerir una estructura de datos diferente que si las inserciones siempre suceden una por una. Si necesitamos el límite más estricto en el peor tiempo de inserción, entonces tendremos que ser más listos que si realmente solo nos importara el tiempo amortizado ”.

Incluso los mejores entrevistadores tienen días libres. A veces las preguntas perspicaces simplemente no vienen a la mente. Pero la entrevista ha sido programada y debe continuar. Puedes ayudar a enviarlo en direcciones que sean más divertidas y más esclarecedoras sobre tus habilidades reales. Su entrevistador también se alegrará de haberlo hecho.

Admito que cuando entrevisto personas, incluyo “C # Trivia!” como parte de la entrevista. Le digo a la gente por adelantado que no espero que escuchen la sintaxis exacta y que está bien no saber la respuesta.

Lo hago para tener una idea general de cuán informada es una persona, si es el tipo de persona que va a tratar de entender por qué algo funciona de la manera en que funciona y cómo reaccionan cuando los corrijo o les digo la respuesta.

No tengo ningún problema con que alguien diga “No sé” o “¿Es eso como …” o “Tendría que googlear eso”. Si intentas BS, desviar o mostrar frustración, eso es un indicador de personalidad. Si alguien no puede responder algo, creo que deberían poder hacerlo. Daré pistas y veré a dónde van. Si no pudieron responder algo, ¿me hacen preguntas de seguimiento?

También hago preguntas de seguimiento sobre dónde usaron una tecnología en particular y cómo.

No espero que todos puedan explicar cómo se almacenan las variables en la memoria, o explicar el montón y la pila. Pero si, por ejemplo, dice que debe usar un StringBuilder en lugar de un String, le preguntaré por qué.

También depende de qué tipo de puesto está solicitando. Si está solicitando un puesto de alto nivel, debería poder explicar algunos de los conceptos detrás del enhebrado y cuándo es útil.

Si creo que eres el tipo de persona que simplemente busca en Google y copia el código sin entender lo que hace el código, probablemente no me impresionará mucho. Todos los desarrolladores de google para obtener respuestas. Los buenos desarrolladores siguen cavando hasta que entienden lo que realmente significa la respuesta.

Usted no Si está “memorizando” el tiempo de ejecución de la inserción en un árbol de búsqueda binario, lo está haciendo mal. Si sabe cómo funciona un BST equilibrado, sabrá sin necesidad de memorización, el tiempo de ejecución de las operaciones en él.

Retrocediendo un poco: la ingeniería de software implica, entre otras cosas, elegir la estructura de datos correcta para el problema que está resolviendo. Conocer las estructuras de datos estándar, cómo funcionan y sus propiedades, es crucial para poder hacer esto.

Retrocediendo un poco más: ¿Por qué necesita saber algo sobre informática, ingeniería de software o codificación, para ser contratado para un puesto de programación, cuando podría simplemente buscarlo en Google y aprender la profesión en el trabajo?

Las buenas empresas contratan por potencial. Si de alguna manera pudieran hacer preguntas que les permitieran saber con certeza que usted tiene el potencial de aprender rápidamente informática, ingeniería de software y codificación, podrían contratarlo incluso sin habilidades. Esto no sucede a menudo.

La contraposición es que si demuestra falta de potencial en una entrevista, las buenas compañías no lo contratarán. Si un candidato acaba de pasar cuatro años en la universidad estudiando ciencias de la computación y, sin embargo, no sabe cómo funcionan las estructuras de datos básicas, es poco probable que lo aprendan una vez contratado.

¿Por qué necesita preguntar sobre entrevistas de trabajo de alguien cuando puede Google eso?

¿Por qué necesitabas preguntar sobre ‘memorización de minucias’ en Quora cuando pudiste haber buscado en Google eso?

¿Por qué necesitabas ‘memorizar’ que ‘Por qué’ se deletrea de esa manera cuando podrías haber buscado en Google eso?

O en un nivel más básico, ¿por qué necesita ‘memorizar’ 2 después de 1 cuando puede Google eso?

La razón es que no todo está fácilmente disponible en Google y es más eficiente saber cosas en la parte superior de tu cabeza para poder razonar sobre ellas.

En poco tiempo de una entrevista de 40 minutos, no querrá perder el tiempo derivando ‘minucias’ de los primeros directores. Resolver un problema a un nivel que usa ‘últimos principios’ que ‘primeros principios’ es más eficiente.

Por ejemplo, si usar set o unordered_set en C ++ para almacenar un montón de palabras para decir un problema de detección de spam, sabe que set se implementa como rbtree, que debería tomar O (log n) para insertar, aunque mantendrá las palabras ordenadas. unordered_set tomará tiempo constante pero no mantendrá el orden porque eso se implementa usando la función hash. Esto lo ayudará de inmediato a tomar decisiones de alto nivel si tiene su memoria con usted.

En el trabajo, el “último principio” es esencialmente el siguiente: todo lo que es conocido por todo Google también lo es para usted (en la práctica a través de la base de código común). Para resolver un problema que se le ha dado, digamos que encuentra spam o no, se espera que use todo lo que está disponible para usted y no solo los primeros principios de los libros de texto. Trabajaría en un nivel superior de abstracción solo si no pasa tiempo buscando las respuestas básicas y tiene algo de memoria debido a la experiencia de interactuar con diferentes tipos de tecnologías.

Estás compitiendo con personas que conocen esas cosas frías, por dentro y por fuera. No es mucho pedir que seas competente en el trabajo que estás entrevistando. Memorizar detalles minuciosos no es la prueba. Solo prepárate para preguntarle a tu entrevistador sobre cualquier cosa que olvides y tendrías que buscar en la web para encontrarla. La honestidad es la mejor política. Olvidar o no saber cómo aplicar tiempos de ejecución de algoritmos comunes como árboles de búsqueda binarios equilibrados puede o no ser perdonable, dependiendo de su entrevistador y compañía. Intentar fingir y ser atrapado no será perdonable.

Algunas compañías pueden descartar las entrevistas tempranas cuando el candidato está demasiado nervioso o las tardías cuando el candidato está demasiado cansado. Si mira la lista de entrevistas de un candidato y todos los entrevistadores notan la falta de una competencia central, entonces esa es una señal bastante clara.

Mi consejo es practicar lo que quieres hacer. Si aspiras a trabajar en el desarrollo de juegos, practica escribir juegos. Si se trata de servicios web, ve a hacer algunos de esos. Aplicaciones de escritorio? ¿Cuántos de esos has implementado? ¿Aplicaciones móviles? Elija un IDE y comience a codificar su proyecto. Etc.

Encontrará razones para comprender el tiempo de ejecución y la complejidad del espacio si hace preguntas de diseño como: “¿Cuál es el número máximo de X que puedo soportar?”

Los entrevistadores de las empresas de marca hacen preguntas oscuras y picayune porque:

  1. Hay muchos más solicitantes que puestos y esto proporciona una manera de eliminar a algunos solicitantes.
  2. Hay un factor snob sobre “Fui a una escuela de la Ivy League y tú fuiste al Estado U”. y esto refuerza el factor snob
  3. Hay muchos malos entrevistadores, es decir, personas que seleccionan cosas de poca o ninguna importancia en el trabajo.

Si y no. Si bien probar algunos “hechos” es de un valor cuestionable en una entrevista, junto con el “¡Gotcha!” preguntas que, afortunadamente, parecen estar pasando de moda: se trata de una aproximación para descubrir si usted sabe que estos hechos existen en primer lugar. Ahí es donde una buena entrevista es diferente a Jeopardy : por lo general, está bien obtener la respuesta incorrecta con detalles exactos, pero demuestre que obviamente sabe dónde buscar para hacerlo bien. De hecho, soy un gran admirador de las pruebas para llevar a casa. Entonces puedes buscar tu ♡ en Google. Si la prueba está bien diseñada, aún debe quedar claro si está fingiendo.

Al final de mi vida, aprendí a leer tablas de contenido en los libros como un proxy para leer el libro, de modo que al menos tenga un índice mental de dónde podría encontrar algo. Pero si nunca has abierto el libro, no sabrás qué hacer con Google. Esta es también la razón por la cual una calificación CS se considera un punto de datos; Es un proxy para el conocimiento de un plan de estudios. Al menos dice: has abierto el libro.

Quizás esto sea más fácil de entender si alguna vez has sido el entrevistador. Los entrevistadores comienzan con un conocimiento casi nulo de qué tipo de pensador eres y cuánto CS has aprendido. Es posible que no sepa que existen estructuras de datos equilibradas o por qué existen. Definitivamente esperaría que un ingeniero graduado [o graduado equivalente] pueda explicar la complejidad de tiempo y espacio de las estructuras de datos comunes en una entrevista. Si no pueden, ¿cómo podría predecir la calidad de su trabajo diario? ¿Qué más extrañaron aprender? Los ingenieros son personas muy bien remuneradas. Es realista esperar que valga la pena. (Si cree que las preguntas sobre Big-Oh son inapropiadas, imagine las preguntas que un ingeniero civil o médico tuvo que hacer para obtener su poder de conocimiento).

Las entrevistas son difíciles y no sabemos, en general, cómo hacerlo bien *, en mi humilde opinión. Si eres un buen ingeniero y fallas en la entrevista, el proceso ha fallado a todos. Pero actualmente no tenemos buenas formas de prevenir esto por completo.

*: Tiene muchos modos de falla. Ver, por ejemplo, jess en Twitter; https://twitter.com/ieatkillerbe … (hilo).

Porque si realmente entiendes el tema, entonces las respuestas a preguntas como esta simplemente se caen. Los candidatos realmente buenos no han memorizado todas las minucias, han digerido internamente el tema a un nivel que la intuición asume, y la respuesta es simplemente obvia.

En una buena entrevista, una pregunta como esta sería el comienzo de una discusión sobre las compensaciones entre diferentes implementaciones. El entrevistador no está tratando de ver qué tan bueno es para memorizar hechos: está buscando si comprende de lo que está hablando o es un mono de código que solo sabe cómo copiar el código de pegado del desbordamiento de pila.

Depende completamente de lo que está buscando su potencial empleado. Algunos buscan conocimientos específicos que deben ser naturales en la persona que desean. Por lo general, las preguntas en una entrevista no se refieren tanto a lo que sabes, sino a cómo reaccionas a la pregunta en sí.

No necesitas memorizarlo. Simplemente diga: no sé el orden del tiempo libre, pero podría buscarlo fácilmente a través de una búsqueda en Google o en un libro de algoritmos estándar, o si lo desea, podría intentar estimarlo. O mejor la sugerencia de Terrence Yang

“¿Fuera de mi cabeza, una buena búsqueda en Google podría ser ‘[y luego decir una búsqueda en Google plausiblemente buena exactamente]’?

No es para probar su conocimiento, sino si farolea y BS cuando no sabe algo, o admite una falta de conocimiento y proporciona una solución para aprender ese conocimiento o puede proporcionar una estimación razonable.

¿Por qué necesito memorizar las minucias de CS para entrevistas de trabajo cuando solo puedo buscar en Google la información? … Cuando necesito una estructura de datos particular de ese tipo para algún proyecto, leeré sobre sus propiedades y usaré una biblioteca o la implementaré yo mismo si no existe una biblioteca.

Voy a señalar que lo que dijiste aquí no tiene mucho sentido. Esto es lo que parece que estás imaginando: alguien dice: “Aquí hay un problema y quiero que uses un árbol rojo-negro”. Te vas y lees en un árbol rojo-negro.

Esto es lo que realmente sucede: alguien te presenta un problema y tú encuentras una solución. ¿Es su solución lo suficientemente buena? Tal vez. ¿Hubiera sido mejor si usaras una estructura de datos diferente? Tal vez. ¿Sabía qué estructura de datos mejoraría su solución en este caso? No.

Porque las entrevistas son generalmente tontas. Ingrese al código abierto para que su trabajo sea público y pueda evitarlos en gran medida. No he tenido que responder a estas cosas que busco en Google desde mi primer trabajo. Google es la mitad de mi cerebro y libera mucho espacio para concentrarse en hacer realmente la mierda.