¿Qué dicen las soluciones subóptimas sobre usted en una entrevista de software técnico?

La pregunta que respondí: ¿Qué dicen las soluciones subóptimas sobre usted en una entrevista de software técnico?

Esta pregunta es un poco demasiado amplia, creo. La mayoría de las preguntas técnicas en entrevistas de ingeniería de software tienen al menos una solución “óptima”, así como muchas estrategias válidas diferentes que no son las más óptimas. Pero hay más que eso:

Si le hago una pregunta técnica, no solo le pido que escriba la solución. Le pido que me demuestre su proceso de pensamiento mientras busca la solución. Voy a estar observando tus habilidades para resolver problemas: ¿qué tan bien entiendes el problema? ¿Qué tan bien puedes visualizarlo? ¿Qué tan bien piensas acerca de los casos límite? ¿Qué tan dispuesto (y capaz) eres a hacer preguntas aclaratorias cuando dejo algo? ¿Qué tan rápido puede llegar a CUALQUIER solución satisfactoria?

Los mejores candidatos que he entrevistado suelen encontrar una solución de “fuerza bruta” bastante rápido, una que demuestre que entendieron el problema y pudieron codificar una solución que realmente resuelve el problema, incluso si no funciona. así que de la manera más eficiente posible. Eso nos da mucho tiempo, entonces, para comenzar a pensar en mejores formas de hacerlo. Si no se limitan a sus armas e insisten en que su solución O (n ^ 2) es la mejor manera posible, y encontramos una solución O (n log n) que da los mismos resultados, entonces sé que esta persona puede no solo piensa en un problema sino que es lo suficientemente flexible como para pensar en múltiples soluciones.

En algunos casos, puede haber una oscura solución de O (n) o incluso O (1) para el problema, pero generalmente no espero que los candidatos lo encuentren inmediatamente en la mayoría de los casos. De hecho, en dos casos diferentes, sospeché que el candidato solo recordaba una solución de memoria cuando lo primero que pusieron en la pizarra fue la solución óptima. Los atrapé a ambos cuando seguí con otra pregunta en un dominio de problema diferente con el que realmente lucharon, a pesar de que la pregunta era sobre el mismo nivel de dificultad.

Entonces, personalmente, no me preocuparía demasiado si no se te ocurren los mejores algoritmos posibles en el acto. Es mucho más importante poder demostrar sus habilidades para resolver problemas, la organización del pensamiento y su capacidad para trabajar junto con las personas para resolver problemas. Siempre puedes optimizar.

Y digo esto sabiendo muy bien que hay muchas personas que lo rechazarían si no lograra encontrar la solución más óptima en una entrevista. Para esas personas, les digo que probablemente se están perdiendo de algunas personas realmente buenas.

(EDITAR) Notó que los detalles se actualizaron mientras escribía mi respuesta. En su mayor parte, mi respuesta sigue siendo válida, pero ha reducido el alcance solo un poco, por lo que quería reconocer eso.

El candidato A, que encuentra una solución menos óptima y trabaja hacia una solución más óptima, muy probablemente obtendría mejores calificaciones de mí que el candidato B, que acaba de encontrar la mejor solución de inmediato. Y la razón de esto es que sospecharía un poco más de que el Candidato B acaba de memorizar una solución, especialmente si llegó a esa solución sin mostrar su trabajo. Por lo tanto, le haría al Candidato B al menos una pregunta más para ver si se está abriendo camino, o si realmente es tan bueno, realmente hay algunas personas que pueden y piensan muy rápido y son realmente buenas. para llegar a soluciones óptimas en sus pies. Sin embargo, son relativamente raros, y mi experiencia ha sido que la mayoría de las veces, están engañando de alguna manera. Por lo general, no es demasiado difícil descubrir qué está sucediendo.

Como entrevistador técnico, no me importa si su respuesta es óptima, per se . Me importa la señal que estás enviando. De eso se deben tratar siempre los entrevistadores: la señal, no lo que sucede literalmente.

Entonces, supongamos que esto sucede: el candidato A comienza con una solución subóptima y la repite, llegando finalmente a la óptima. El candidato B comienza solo con la solución óptima y termina tomando un poco menos de tiempo. ¿Cómo los comparas?

No puedo Yo no estaba ahi. No puedo comparar dos candidatos cuando no vi lo que sucedió. ¿Cómo puedo interpretar una señal sobre esto con detalles tan limitados? No sé por qué el candidato B comenzó con el óptimo, o qué expectativas razonables serían para este problema.

En lugar de terminar la respuesta allí, proporcionemos algunos detalles hipotéticos.

Escenario hipotético 1: hago una pregunta bastante desafiante. El candidato A comienza con una solución subóptima. El candidato A piensa en los puntos clave para optimizar y finalmente llega al punto óptimo. Ella sigue adelante y lo codifica , perfectamente. El candidato B comienza con la solución óptima, pero ya la ha escuchado antes. Cuando lo codifica, tropieza mucho y su código es descuidado. Él termina tomando un poco menos de tiempo para llegar al código óptimo y correcto. ¿Cómo los comparas?

Preferiría absolutamente al Candidato A. El Candidato A parece haber demostrado fuertes habilidades para resolver problemas, y luego escribe un gran código en el primer intento.

El candidato B no ha mostrado ninguna habilidad para resolver problemas, solo ha demostrado habilidades de memorización (¿a quién le importa?). Y potencialmente mostró cierta deshonestidad si no admitía haber escuchado el problema antes. Y su código era malo.

Escenario hipotético 2: hago una pregunta bastante fácil. La candidata A comienza con una solución que es estúpidamente mala (por ejemplo, está ordenando ordenando la lista al azar y luego verificando si está ordenada). Ella lo repite, llegando finalmente a la óptima. Ella traduce su algoritmo en código muy rápidamente. Aunque nunca antes había escuchado la pregunta, el Candidato B comienza solo con la solución óptima. Cuando codifica, es muy minucioso y escribe mucho más código, por lo que le toma un tiempo. ¿Cómo los comparas?

El candidato A ha demostrado habilidades de resolución de problemas muy pobres. Claro, su código era perfecto. Pero eso probablemente no sea suficiente. Tal vez podría concebir contratarla si tuviera algún código que esencialmente no requiriera pensar y solo estuviera traduciendo un algoritmo muy bien definido pero tedioso en código. Pero … vaya.

El candidato B mostró habilidades muy fuertes para resolver problemas. Le tomó mucho tiempo codificarlo, pero eso es comprensible si está escribiendo mucho más código. (Y probablemente también sea mi culpa como entrevistador. Si no me importara que él escribiera estas cosas, entonces debería haberlo detenido).

Escenario hipotético 3: hago una pregunta. El candidato A comienza con algunas soluciones subóptimas pero correctas. El candidato A itera sobre ellos, mejora las ineficiencias y desarrolla una solución óptima. El candidato B comienza con soluciones incorrectas (pero, ignorando esas fallas, son bastante rápidas). Identifica esos problemas, los corrige y tiene una respuesta correcta. ¿Cómo los comparas?

Sin detalles adicionales sobre la pregunta y las soluciones exactas, es realmente difícil de decir. Es posible que algunas preguntas el Candidato A haya señalado buenas habilidades para resolver problemas, mientras que el Candidato B mostró habilidades débiles para resolver problemas. Para una pregunta diferente, podría ser al revés. O ambos mostraron habilidades débiles, o ambos mostraron buenas habilidades. O una entrevista mostró una señal de buenas habilidades, y la otra fue una señal nula (es decir, yo, como entrevistador, no tengo suficientes razones para llegar a una conclusión sobre el candidato). Cualquiera de estas cosas es muy probable, y ni siquiera puedo comenzar a apostar qué señal era.

Siempre se trata de señal.

Las entrevistas nunca deberían ser sobre si un candidato obtiene una respuesta correcta en X minutos, o si la solución hubiera sido “lo suficientemente buena” en el mundo real, o lo que sea. Siempre se trata de por qué sucedió eso . Se trata de señal. Dado lo que sucedió, considere por qué sucedió eso. ¿Qué señales obtuviste de esta entrevista? ¿Demostraron la capacidad de ser efectivos en este rol, equipo y empresa?

Para la mayoría de nosotros, las entrevistas técnicas son la peor parte de conseguir un nuevo trabajo: el entrevistador no solo hace preguntas desafiantes, sino que a veces esas preguntas ni siquiera tienen sentido en el contexto del trabajo que desea.

Sin embargo, no importa cuán difícil sea la pregunta, recuerde que farolear rara vez es su mejor opción. En lugar de tratar de falsificar una respuesta, la honestidad suele ser lo mejor. Decir algo como “Estoy menos familiarizado con [habilidad X], pero estoy familiarizado con [habilidad Y] y puedo compartir mis pensamientos en ese contexto” puede hacer que la conversación avance de una manera productiva. (Si una habilidad es importante para el trabajo y realmente no la tienes, siempre es mejor ser honesto desde el principio).

Echa un vistazo a los últimos trabajos de desarrollador.

La mayoría de las preguntas técnicas están diseñadas para revelar cómo piensa, se comunica y resuelve problemas. Eso significa que dos candidatos pueden llegar a la misma solución (correcta) a un problema, y ​​aún así ser juzgados de manera diferente en función de cómo llegaron a esa respuesta.

Después de sentarme al otro lado de la mesa y entrevistar a más de 700 candidatos de ingeniería de software, tengo algunas opiniones firmes sobre las respuestas buenas y malas. Quiero compartir con ustedes la mejor estrategia para manejar preguntas técnicas, especialmente cuando no saben la respuesta.

Asegúrese de entender la pregunta

A veces, cuando se le hace una pregunta desafiante, es difícil de responder porque no comprende completamente lo que quiere el entrevistador. (Para ser justos, a veces los entrevistadores son intencionalmente ambiguos, para que hagas preguntas aclaratorias). Cuando te encuentres con una pregunta difícil, verifica que la entiendas.

Por ejemplo, si se le pide que “atraviese un árbol”, realmente todavía no sabe lo suficiente como para resolver el problema. ¿Cuál es la estructura del árbol? ¿Deberías atravesarlo de una manera particular? Haga preguntas para asegurarse de que realmente comprende lo que está tratando de resolver, antes de comenzar a resolver la pregunta.

Trabajar a través de ejemplos

Una vez que comprenda la pregunta, use los ejemplos disponibles para ayudar a resolver el problema; Los ejemplos le permiten retomar patrones y generalizaciones que se aplican a la pregunta en cuestión. Debe trabajar a través de ejemplos básicos y simples y evitar cosas que podrían ser casos extremos que podrían descarriarlo (es decir, nulo, 0, 1, -1, etc.).

Encuentre la solución más fácil y obvia

Claro, a todos nos gustaría encontrar soluciones brillantes a los problemas, pero si tiene una fecha límite ajustada, a veces la más directa es la mejor. Este último también le muestra al entrevistador que puede encontrar una solución de línea de base, sobre la cual puede iterar aún más.

Por ejemplo, supongamos que el entrevistador le pregunta cuántas pelotas de golf caben dentro de un 747. (Sí, muchos empleadores todavía hacen ese tipo de preguntas locas, solo para verlo resolver el problema). Llegando a una solución rápida, solo para demuestra que eres capaz de pensar las cosas de forma lógica, también te da tiempo para optimizarlo aún más. Hablando de que…

Siempre busca mejoras

Nunca deje una solución “mala” en su lugar. Piensa en cómo puedes refinarlo, con suerte mientras haces menos trabajo computacionalmente. ¿Puede almacenar resultados intermedios para no tener que volver a calcularlos? ¿Puede utilizar otra información para su ventaja para que pueda hacer menos trabajo?

Llegar a una solución inicial es un gran punto para hacer más preguntas al entrevistador. ¿Hay cosas que te pueden faltar? ¿Recursos que deberías aprovechar? La mayoría de los entrevistadores están interesados ​​en saber si puedes hacer preguntas inteligentes.

Trabajar con más ejemplos

Si se queda atascado o no ve una mejor manera, intente trabajar con más ejemplos: elija otros más pequeños para ver si puede notar nuevos patrones que puedan ayudarlo a resolver la pregunta principal.

No te rindas

Si te quedas atascado, sigue iterando a través de más ejemplos y piensa en cómo el problema en cuestión (con suerte) tiene similitudes con los que has resuelto en el pasado. Si le dan un acertijo que lo deja perplejo, considere preguntarle al entrevistador si puede resolver un problema similar al que realmente conoce la respuesta.

Incluso si nunca llega a una solución ideal, demostrar que está tranquilo e ingenioso bajo presión sigue siendo algo bueno para demostrarle al gerente de contratación.

Después de llegar a una solución, hable con el entrevistador sobre su trabajo. Si tuviera que encontrar una solución mientras trabajaba, ¿qué haría? ¿Cómo verificarías que la respuesta es correcta?

Haz tu mejor esfuerzo para no frustrarte o desanimarte. (Dada la duración de las entrevistas de trabajo en estos días, aún puede tener un largo día por delante). Respire hondo y siga intentándolo. La mayoría de los entrevistadores admirarán su tenacidad, que es un gran rasgo en cualquier empleado.

Fuentes: Dice es un servicio DHI

En su mayor parte? Me dice que eres humano y que legítimamente estás tratando de resolver el problema de la manera más humana posible.

La mayoría de las veces en las entrevistas, un candidato tiene una restricción de tiempo. Brindar una solución subóptima aproximada significa que realmente está trabajando en el problema en sí mismo, al menos configurando el entorno limitado para comenzar a tomar decisiones mejor informadas basadas en lo que puede ver y razonar. De hecho, de eso se trata parte del método científico. Observaciones iterativas basadas en la evidencia y razonamiento. Dar un primer enfoque subóptimo también muestra que está pensando y trabajando desde los primeros fundamentos cuando se encuentra con un problema con el que no está familiarizado. Ese es el tipo correcto de personas para contratar.

Entonces, para el escenario dado, A muestra que realmente está resolviendo el problema y que podemos observar el proceso de pensamiento. (Sin embargo, no llamaría a todo este proceso un indicador definitivo. Esa parte es una historia completamente diferente. Por lo tanto, me fui divagando).

B por otro lado es bastante interesante. Para evaluar B, TIENES que hacer tu tarea. Debe tener en cuenta la suma de todas las partes y hacer preguntas como:

  • ¿Es un ingeniero experimentado? (Suponiendo que el problema es práctico. Pfft, ¿a quién estamos engañando?) En caso afirmativo, debería averiguar más sobre cómo obtuvo esa solución en tan poco tiempo y qué motivó ese problema. No quieres una casualidad.
  • ¿Es un genio? Si es así, ¡felicidades!

Si la respuesta a las preguntas enumeradas es un rotundo ‘No’, tendremos que tener en cuenta ciertas cosas. ¿Ha encontrado este problema en una entrevista previa o en alguna otra fuente? Si es así, entonces debe haberlo memorizado. A menos que la pregunta sea realmente simple y obvia, que rara vez lo son, entonces debe levantar una bandera potencialmente falsa positiva. Por lo tanto, en cada parte es responsabilidad del entrevistador recopilar la mayor cantidad de métricas necesarias para tomar una decisión informada como sea posible. Extiende la maldita entrevista si es necesario.

La entrevista por su naturaleza definitiva es un proceso bidireccional. Su objetivo es recopilar tantos datos como sea posible. Por lo tanto, la comunicación es un rasgo vital. Hacer las preguntas correctas también es un rasgo importante. Ese es tu trabajo como entrevistador. No hacerlo significa que usted falló en su trabajo.

Además, resolver los problemas de la entrevista no es un boleto de garantía para un trabajo en absoluto. Todavía hay otros factores artificiales como el ajuste cultural. AFAIK, ese es un factor completamente diferente y también está pendiente en RNGesus.

En pocas palabras, no los compararía porque este no es un concurso de meadas.

(Pensándolo bien, cuando lo piensas, en algún nivel es algo así como …)

Algunas de esas preguntas efectivas sobre algoritmos tienen tres o cuatro respuestas de diferente complejidad. Como entrevistador, me gustaría que el candidato presente al menos uno. Luego decía: “¿Qué pasaría si te dijera que hay una solución n log n para este problema, puedes encontrarla?” Y ver qué hizo el candidato. Es solo para ver cómo piensan, no creo que llegar a la solución final sea tan importante, especialmente si se basa en un truco oscuro.

Hay preguntas de la entrevista que están diseñadas para ser cada vez más difíciles de ver qué tan profundo es el conocimiento de un candidato. Parece que hubo uno acerca de encontrar duplicados en una secuencia de enteros, que se hace cada vez más difícil al aumentar el tamaño de la secuencia.

El principio básico para comprender las respuestas a preguntas como estas es comprender que los candidatos están siendo juzgados por lo buena que se percibe su resolución algorítmica de problemas, no por las respuestas finales que producen.

Supongamos que una pregunta tiene algunas direcciones de pensamiento muy lógicas, y una de ellas conduce a la complejidad de tiempo óptima, mientras que otras conducen a complejidades de tiempo ligeramente peores. El candidato A prueba primero el óptimo, y luego razona que su complejidad temporal es óptima. El candidato B intenta primero un enfoque diferente, razona correctamente sobre la complejidad del tiempo, y luego prueba el enfoque óptimo porque piensa que la complejidad del tiempo puede mejorarse.

Si creo que el candidato A tuvo suerte, pero realmente ambos candidatos sabían lo que hacían, entonces es difícil decir quién sale primero. Por un lado, estoy un poco impresionado con B por pensar en múltiples soluciones al problema y reconocer dónde su complejidad de tiempo era subóptima, especialmente si no tenía que preguntar. Por otro lado, A puede haber resuelto el problema más rápido. Si creo que A lo resolvió más rápido solo porque tuvieron suerte con la dirección que exploraron primero, entonces el hecho de que fueran más rápidos no influye realmente en mi calificación. Sin embargo, pueden tener tiempo para intentar un segundo problema, lo que podría impresionarme aún más si lo hacen bien. B podría no tener tiempo para otra pregunta.

Si, por otro lado, B pasa mucho tiempo buscando direcciones que conducen a soluciones altamente subóptimas, mientras que A muestra una idea clara del problema que les permite descartar rápidamente los enfoques subóptimos y concentrarse en el enfoque óptimo de inmediato, entonces A le va mucho mejor que B. La comunicación es clave para A en este caso. Necesito entender su proceso de pensamiento detrás de cómo eligen qué caminos de ataque explorar para el problema. Necesito comprender qué conocimiento desarrollan sobre el problema que los lleva a la solución óptima. Sin eso, no podría estar seguro de si su solución es óptima debido a una visión aguda, o porque tuvieron suerte, o porque habían escuchado el problema antes (lo que significaría que necesito hacer una pregunta diferente).

A2A

Además de lo que otros han escrito aquí, señalaría que una persona puede dar una solución subóptima por razones distintas a las que él o ella es incapaz de proporcionar una solución más óptima. Es posible que él o ella se sienta bajo presión para dar una solución lo más rápido posible y / o esté nervioso.

Dicen, con mayor frecuencia, que estaba tratando de completar una tarea arbitraria en un marco de tiempo artificialmente limitado, por lo que dio una respuesta que funciona (con suerte).

En otras palabras, tenía 20 minutos, por lo que le dio una solución de fuerza bruta o puramente pragmática a algo que normalmente tendría días o semanas para “acertar” (prueba, mejora, perfil, verificación, etc.).

Todo depende de si lo deja en subóptimo. Se espera que la primera puñalada para resolver un problema sea subóptima. Pero luego debe sugerir cómo podría mejorarse y cómo mejora con los cambios sugeridos (sobre la marcha Big-Oh si puede gestionarlo). Esto demuestra que no está satisfecho con una solución subóptima y esforzarse por hacerlo mejor. “Lo suficientemente bueno no es lo suficientemente bueno”.

Llevaré a la persona con la solución subóptima cada vez. Sé que pueden recibir comentarios negativos e iterar para mejorar. El tipo que arrojó la solución perfecta me hace preguntarme si acaba de ver mi pregunta antes y me deja inseguro de cómo responde a las críticas.

More Interesting

Para las principales compañías de software como Google, Facebook, Amazon, Microsoft, ¿cuánto importa el perfil o es solo el rendimiento de la entrevista?

¿Qué debo preparar para una entrevista técnica si la entrevista es dentro de unos días?

¿Cómo es la entrevista de pregrado de St. Stephen's College y cuáles son las preguntas más frecuentes?

¿Los entrevistadores técnicos explican la confusión resultante de hablar y pensar en un idioma no nativo?

¿Qué es una entrevista de selección técnica?

¿Cuál sería un buen plan de preparación de 7 días para una entrevista de desarrollador web de nivel de entrada (javascript)?

¿Dónde encuentro más preguntas de diseño de software con una posible respuesta como se proporciona en la entrevista de Cracking the Coding?

¿Cuáles son las mejores preguntas que hacen los entrevistadores en la entrevista relacionada con C, si va a realizar una entrevista de la compañía 5-6 CTC?

¿Cuál es su opinión sobre las entrevistas de programación?

¿Cuáles son las preguntas que se dan en 'Cracking the Coding Interview' que también están presentes en 'Introducción a los algoritmos' por Cormen et al. (comúnmente llamado como CLRS)?

Si me estoy preparando para una entrevista tecnológica, ¿cuál sería el mayor beneficio: HackerRank, LeetCode o InterviewBit? ¿Qué distingue estos tres sitios?

¿Cuáles son algunas de las preguntas de programación de computadoras que la gente ha encontrado en entrevistas para trabajos de nivel inicial y pasantías?

Cómo explicar la programación extrema en la entrevista.

Cómo resolver este problema cuando tengo dos matrices declaradas como caracteres sin signo pero contienen valores enteros y tengo que realizar una resta por elementos pero no puedo tomar matrices enteras intermedias

Cómo medir la complejidad temporal y espacial de una función recursiva