Hoy he realizado mi primera entrevista con posibles pasantes. Si bien esto ha sido en su mayoría preguntas abiertas, he tenido algunas tareas de programación triviales para ellos:
- Escriba una función que devuelva verdadero si los lados del triángulo (todos los enteros) a, byc pueden representar un triángulo rectángulo .
- FizzBuzz.
- Calcule el enésimo elemento de Fibonacci usando la recursión (si no supieran qué es Fibonacci , incluso les escribiría la definición F (n) = F (n-1) + F (n-2); F (1) = 1; F (0) = 1).
- Implemente la lista de estructuras para la función de entero y escritura para revertirla.
Obviamente, estas son tareas muy fáciles y no estaba preparado para que alguien no las resolviera.
¿Cómo debo actuar cuando luchan con estas preguntas? ¿Debo renunciar a la respuesta? ¿Dar punta a punta (hice eso y terminé resolviendo el problema yo mismo)? ¿O simplemente seguir adelante (o tal vez simplemente detenerse) con la entrevista?
PD. Al tener problemas con las preguntas, no me refiero a tener un error, me refiero a si ni siquiera pueden comenzar. Este fue un caso con Fibonacci y las preguntas de la Lista.
interview
internship
Mykolas Simutis
fuente
fuente
Respuestas:
Dijiste que estás entrevistando para puestos internos en la pregunta, así que esto es desde ese punto de vista, para los desarrolladores a tiempo completo la barra será un poco más alta.
Cuando entreviste a pasantes, debe recordar que es posible que no hayan completado sus estudios y que también hayan ingresado a la universidad sin experiencia previa en programación y ciencias de la computación. Como tal, debe escalar las expectativas a lo que razonablemente puede esperar que alguien conozca y al grado de prestigio de la posición (es decir, Google puede salirse con las expectativas que una empresa de la que la gente no ha oído hablar puede).
Al revisar las preguntas que presentó, probablemente las vería de la siguiente manera en una entrevista:
Aplicación básica de geometría con codificación simple, la mayoría de los estudiantes deberían poder hacerlo sin mucha dificultad. A lo sumo, podría ser necesario un recordatorio del Teorema de Pitágoras si muestran un poco de estrés por estar en una entrevista. Esto casi podría verse como un problema de "impulso del ego", ya que puede ayudar a calmar a algunas personas si están muy nerviosas antes de la entrevista.
Nuevamente, otra aplicación de algunas declaraciones de control básicas. Es posible que los estudiantes que no hayan estado expuestos al operador del módulo, o que no lo hayan usado mucho, necesiten recordarlo, pero no deberían encontrar ningún problema real para resolver el problema.
Esto tiende a ser un problema bastante común, por lo que la mayoría (si no todos) los estudiantes lo verán en algún momento antes de la graduación. El problema es que generalmente aparece cuando se presenta la recursividad a los estudiantes, ya que se presta bien o es una solución recursiva o en bucle que luego se puede comparar para que los estudiantes de diferentes escuelas puedan verla en diferentes momentos dependiendo de la secuencia de los cursos. En la práctica, si a alguien no se le ocurriera el recursivo, pediría una alternativa usando bucles y si no se le ocurriera eso, me preocuparía más su potencial capacidad.
Esta pregunta en realidad podría ser demasiado abierta, ya que está escrita, por lo que también podría ser una buena pregunta para ver cómo el candidato busca información adicional (por ejemplo, si se deben incluir funciones de eliminación, conversión a matrices, etc.), pero si enunciado del problema definido ("Implementar una estructura de lista básica para enteros que permita agregar números al final o en un índice arbitrario, eliminarlos e incluir una función para devolver una copia invertida de la lista") que los estudiantes deberían poder resolver El problema siempre y cuando las listas sean una estructura común presentada ya sea en un curso temprano de estructuras de datos o en un curso básico temprano de informática.
En términos de tratar con los candidatos, si tienen dificultades, asegúrese de que estén relajados y permítales un poco de indulgencia, ya que podrían estar teniendo ansiedad por el rendimiento, ya que esta podría ser su primera entrevista real. Es posible que se requieran consejos para resolver los problemas, sobre todo en el caso de los problemas tercero y cuarto en lugar de los dos primeros.
Además, estructure el proceso general de la entrevista para que haya puntos de "salida elegante" incorporados. Por ejemplo, puede tener la siguiente agenda:
Este flujo de entrevistas tiende a funcionar bien si desea poder despedir a los candidatos antes de tiempo, ya que saben desde el principio que podrían ser despedidos después del descanso. La breve entrevista antes de la prueba también significa que no solo se presentan para tomar el examen, lo que les permite practicar algo de la entrevista y también puede permitirles decidir que no encajan bien. Si hay otros programadores observando el cuestionario o asistiendo al candidato durante el mismo, entonces también les da la oportunidad de aprobar / reprobar al candidato mientras están tomando un breve descanso.
En todo momento, cuando esté entrevistando para una pasantía y los candidatos sean estudiantes, debe recordar que todavía son estudiantes y es posible que no tengan mucha práctica con las entrevistas (lo que conduce a una posible ansiedad por el rendimiento) y que también no hayan llegado al punto en sus estudios para incluso poder responder a las preguntas, lo que significa que podría ser una buena idea enviarlas en su camino con una copia de las "soluciones ideales" a los problemas que se les presentan también.
fuente
Mi objetivo para cualquier entrevista de trabajo, sin importar de qué lado esté, es terminar sintiendo que estoy hablando con un colega. Los colegas entran a mi oficina todo el tiempo cuando están atrapados en un problema. Pido ayuda a mis colegas cuando me atoro. Entonces, en una entrevista, trato de recrear esa dinámica.
En otras palabras, ¿qué diría si un colega necesitara implementar una secuencia de fibonacci y no supiera de qué se trata? Se lo explicaría hasta que lo capten lo suficiente como para continuar por su cuenta. No hay vergüenza en la ignorancia, siempre que no sea permanente.
Si haces ese ejercicio y aún no puedes imaginarte trabajando con esa persona, entonces no son una buena opción para el trabajo.
fuente
El punto de hacer preguntas como esta en una entrevista es determinar si alguien puede descubrir cómo resolver problemas. El trabajo de ser un programador generalmente consiste en dos cosas: "Tomar estos requisitos e implementarlos en código" y "descubrir por qué la implementación no cumple con los requisitos y solucionarlo". Entonces, lo que realmente está buscando no es una solución a estas preguntas específicas, sino la capacidad de resolver las cosas.
Entendiendo esto, daría una o dos pistas para que alguien comience, y tal vez algo más si está claro que están haciendo un progreso real pero faltan detalles en alguna parte. Pero si queda claro que simplemente no pueden descubrir cómo resolver el problema, entonces tiene su respuesta y no hay necesidad de continuar con el ejercicio.
Para dar un ejemplo, cuando entrevisté en mi trabajo actual, me dieron una pregunta sobre cómo encontrar la ruta más corta de un nodo a otro en un gráfico. Respondí que probablemente usaría algo como el Algoritmo de Dijkstra, que recordaba vagamente haber aprendido un día en la universidad y que nunca había usado desde entonces, y di una explicación rápida (e incorrecta) que satisfizo las condiciones específicas dadas por el pregunta. El entrevistador señaló que mi solución terminaría en un bucle infinito si el gráfico se modificara ligeramente, y eso corrió mi memoria, así que le expliqué la forma correcta de evitar este problema. Y terminé consiguiendo el trabajo.
fuente
para puestos de interno puede que estés preguntando un poco demasiado.
No tengo idea de lo que quieres decir con la cuarta pregunta. en cuanto a hacer una pregunta de recursión, es un poco poco práctico, revise su propia base de código y determine la cantidad de áreas que se usa la recursión, estoy dispuesto a apostar que es poca. Las situaciones de la entrevista son estresantes, y esperar que los candidatos implementen estrategias raramente utilizadas que son al revés en comparación con la mayoría de las cosas que programarás es injusto para ellos, especialmente al comienzo de una entrevista. Personalmente, estaría haciendo preguntas donde tienen que explicar qué significan los conceptos importantes / cómo se usan, proporcionando ejemplos enlatados. Me interesaría mucho más que los candidatos que pueden decirle que X book o Google Y search proporcionarán todo lo necesario para implementar algo en su base de código.
fuente
En mi humilde opinión, sus dos primeras preguntas deben poder resolverse para cualquiera que se llame a sí mismo programador, ya sea junior o senior, directamente de la escuela o autodidacta.
Si veo que el entrevistador está luchando con alguno de estos, trataría de reformular el problema y verificar si lo entendió completamente. Luego, aliéntela a usar lápiz y papel, pizarra, dibujar figuras o cualquier enfoque que prefiera para abordar el problema. También le pido que piense en voz alta, que vea su proceso de pensamiento y, si es necesario, que le dé pequeños indicios si está en el camino correcto, simplemente no se atreve a avanzar o tiene algún obstáculo. Pero si incluso varios consejos no ayudan, o, como mencionó anteriormente, termino resolviendo el problema para ella, probablemente terminaría la entrevista para detener el desperdicio de nuestro tiempo. En una entrevista, siempre me esfuerzo por ver y centrarme en lo que el candidato sabe, en lugar de lo que ella no sabe, pero si parece que no puedo encontrar ningún conocimiento significativo, me rindo después de un tiempo.
El tercero y el cuarto son un poco más difíciles, por lo que podría aceptar si un junior no puede obtenerlos, si de lo contrario demostró un buen enfoque y entusiasmo para resolver problemas. Pero para una persona mayor, todavía son una necesidad.
fuente
Tenía que buscar lo que querías decir con "FizzBuzz"; Resulta que había oído hablar del juego y sus reglas, pero no por ese nombre y no en mucho tiempo. Por lo tanto, no piense que no tiene que dar NINGUNA información a los entrevistados.
Dicho esto, todos estos son problemas de codificación básicos que esperaría que alguien entrevistando incluso para un puesto de codificación de nivel de entrada pueda pensar, si no pueden codificar una respuesta mediante inspección. Entonces estamos en la misma página allí. La respuesta a su problema depende de cómo se equivoquen:
Problemas menores de sintaxis: si espera código en un idioma determinado, no cuente demasiado si omiten un punto y coma o escriben mal un uso de algún identificador. La mayoría de los IDE lo detectarán de inmediato, y todos hacen errores tipográficos de vez en cuando. En casi todas las entrevistas en las que se esperaba que codificara algo, "pseudo-C-ish" era aceptable siempre que el algoritmo se comunicara correctamente al entrevistador y la lógica fuera sólida.
Defecto de lógica menor: si el algoritmo se comportara como se esperaba en la mayoría de los escenarios esperados, pero no en todos (digamos que al codificar FizzBuzz, 15 solo daría como resultado "Fizz" o "Buzz", pero no ambos como se supone que debería), entonces ser el "probador de la unidad" y señalar que el algoritmo fallaría en esa instancia, y ver si pueden solucionarlo. Es posible que hayan pasado por alto ese caso en particular o que no hayan entendido los requisitos lo suficiente. Ambos son nuevamente entendibles, ocurrencias cotidianas en la codificación, que deben superarse fácilmente simplemente proporcionando información adicional o comentarios.
Principales fallas lógicas: si el algoritmo no pasa la mayoría de los escenarios de prueba que se le dio, indíquelo también y vea si pueden solucionarlo. Esto es más un problema; o entendieron mal algún requisito muy básico del sistema, o pasaron por alto algún agujero lógico abierto. Pero, si pueden solucionarlo con más detalles del problema, sin que se les diga exactamente dónde está fallando su código, acéptelo a requisitos poco claros y continúe.
No sé por dónde comenzar / respuesta codificada a casos específicos / no puedo entender su pseudocódigo: Estas son las señales de alerta. Si le pide a alguien que codifique un algoritmo que sigue las reglas de FizzBuzz, explicándoles esas reglas, y obtiene una mirada en blanco, la entrevista ha terminado. Del mismo modo, si pueden poner ALGO en el tablero pero falla en grandes partes del espacio del problema, y usted debe tomar su mano para ilustrar el fallo y cómo solucionarlo, no continuaría con una segunda entrevista. .
fuente
Si realmente tienes un pasante potencial que actúa como un ciervo en el faro porque nunca ha sido entrevistado, tiene problemas de ansiedad, nunca ha estado en una situación de la vida real como esa (generalmente lo notas en su lenguaje corporal), puedes comenzar por preguntándoles en qué trabajaron por última vez.
Entonces será su territorio, por lo que podría no estar locamente nervioso. Cuando encuentre un lugar apropiado, pregunte: "Oye, ¿cómo implementaste eso?". Si él puede explicar, podría darte una idea de su forma de pensar.
Pon tus propias pruebas en la agenda después de eso.
fuente
Fizzbuzz es un requisito absoluto. Si no pueden codificar Fizzbuzz, no debes contratarlos.
Por lo general, le pido al candidato una sesión de código previa a la entrevista, donde usamos Google Docs para resolver un problema de programación (generalmente Fizzbuzz + un problema de nivel superior si pueden completar Fizzbuzz fácilmente).
Normalmente estoy hablando por teléfono o en skype con ellos durante esto, y dado que los estoy viendo completar el problema (y hablando con ellos sobre lo que están pensando en ciertos momentos), puedo estar razonablemente seguro de que no lo hicieron. No busques en Google la respuesta.
Mientras sus otros problemas estén bien especificados (es decir, les dé la fórmula para cada uno), entonces sus preguntas estarán bien.
Cuando entrevisto a los candidatos, trato de mantener los problemas de programación que probablemente encuentren. Me encantan los problemas de manipulación de cadenas porque cuando estás en la web, casi todo lo que el usuario enfrenta tiene que ver con algún tipo de manipulación de cadenas. Cómo manejan eso es importante.
fuente
Depende del calibre de la posición que está tratando de llenar.
Si vas por un desarrollador senior, entonces esperaría que supieran todo eso. Si se equivocaban y me sentía mal, simplemente detendría la entrevista, gracias y adiós. Si estuviera de un humor más cortés, simplemente les agradecería y me apresuraría por el resto de la entrevista.
Si iba por un desarrollador junior, esas preguntas podrían considerarse bastante difíciles. Me interesaría más explorar su capacidad y disposición para aprender. Así que intentaría darles pistas y guiarlos y ver cómo responden.
fuente
Las entrevistas internas son una clase diferente de entrevistas. Lo que normalmente hago es usar mis preguntas estándar de desarrollador (como las que usted proporcionó) para evaluar en qué nivel se encuentran en su educación. La capacidad de resolver estos problemas variará enormemente de estudiantes de segundo año a adultos mayores.
Después de tener esa información, enfoco la entrevista en otras habilidades como, por ejemplo, si podrán trabajar en un equipo, se les puede enseñar, se beneficiarán de la pasantía en nuestra empresa, si les apasiona el desarrollo / aprendizaje, etc.
Para mí, son las cosas no técnicas las que realmente diferencian a un interno de los otros candidatos. Preferiría pasar unos meses entrenando / asesorando a alguien que se esfuerza por aprender y crecer, que alguien que solo quiere un trabajo para el semestre.
fuente
Pregúntese qué valor puede agregar el entrevistado a su empresa. Tenga en cuenta el costo de involucrar a un mentor, especialmente si no pueden resolver los problemas a nivel fizzbuzz. Si la respuesta no es proporcional al salario previsto, entonces tiene un buen caso económico para no contratarlos.
No tenga miedo de volver a su gerente y decirle "no hubo candidatos que agregarían suficiente valor a nuestra empresa para que valiera la pena contratarlos". Esto tiene que ser un mejor curso de acción que terminar con alguien que en realidad tiene un valor negativo, debido al costo de tener a alguien que lo ayude constantemente.
fuente
Mi respuesta puede parecer un poco desagradable o despectiva, pero creo que funciona bien. Para empezar, le doy al candidato una pregunta que es muy fácil, que sirve como una pregunta de calentamiento para ayudar a construir su confianza. Ya sea que tengan éxito o no, paso a una pregunta que es menos trivial y que está directamente relacionada con lo que implica el trabajo.
En este punto, es todo o nada. Si navegan por él, genial, no hay problema. Si luchan un poco, no hay problema, los ayudaré a seguir adelante y luego pasaré a otras preguntas para evaluar otras habilidades.
Sin embargo, si carecen por completo de la capacidad de resolverlo, continúo y quemo el resto del tiempo de la entrevista ayudándoles. El candidato todavía se siente involucrado en la entrevista, pero no tengo que dirigir la entrevista en direcciones diferentes e irrelevantes. También es bueno para el candidato, ya que puede ser educativo.
fuente
Entonces, mi respuesta es: prepárate mejor.
PD: Ya eres un gerente, por lo que deberías tener mucho estrés.
fuente