¿Es “Explique el lenguaje RAII” una buena pregunta de detección de C ++? [cerrado]


13

Una compañía con la que trabajo me ha pedido que haga pruebas de teléfono de candidatos para asegurarme de que no se avergüencen por completo al enviar a alguien a un cliente potencial.

Resulta que un buen número de personas fueron ubicadas para un rol de desarrollador de C ++. No paso mucho tiempo en C ++, pero he realizado algunos proyectos triviales y no triviales en el lenguaje. Pensé que "Explicar el idioma de RAII" sería una buena pregunta de softball que los desarrolladores más serios de C ++ podrían responder mientras estaban medio dormidos, y me permitiría pasar a preguntas más interesantes sobre la experiencia. Pero resulta que las personas que tienen más de 10 años de experiencia en C ++ no reconocen el término, incluso si amplío el acrónimo a "Adquisición de recursos es inicialización". Un candidato llegó a decir que sentía que no siempre era práctico aplicar la técnica en el desarrollo de Windows, lo cual pensé que era un sentimiento extraño, pero pude ver un par de ejemplos que posiblemente respalden esa línea de pensamiento.)

Incluso un par de desarrolladores de C ++ que conozco lo suficientemente bien como para juzgar su competencia dijeron que no reconocían el término, pero al leer un resumen de la técnica, dijeron "Oh, sí, no sabía que tenía un nombre. Simplemente pensó en esas cosas como algo que solo tienes que hacer ". Recuerdo el término de la segunda edición del libro de Stroustrup, a pesar de que el impacto total no se absorbió en ese momento.

Entonces, es "¿Puedes explicarme el idioma de RAII?" ¿Una pregunta de evaluación justa? ¿Es razonable esperar que todos los desarrolladores competentes de C ++ lo entiendan? ¿Es el término más esotérico de lo que yo pensaría? Suponiendo que un candidato no conoce el término, ¿hay preguntas de seguimiento que podrían ayudarme a descubrir si al menos han internalizado las prácticas que hacen que funcione la RAII? ¿Existen mejores preguntas alternativas "de desvanecimiento" que le den al candidato cierta flexibilidad para responder y lo ayuden a demostrar su comprensión del desarrollo de C ++?

Edición para agregar : Para aclarar, no soy el tipo de entrevistador que descalifica a las personas porque no conocen palabras de moda y siglas. Sin embargo, creo que es razonable esperar que un programador experimentado de C ++ haya internalizado buenas prácticas para la gestión de recursos. También creo que es importante verificar que un candidato comprenda algunos "conceptos básicos" sobre la tecnología en la que afirma tener experiencia antes de pasar a preguntas más interesantes sobre diseño, resolución de problemas, etc. Creo que lo que estoy buscando es una buena manera para hacer una pregunta abierta, adecuada para su uso en una breve revisión telefónica, que puedo usar para juzgar la comprensión básica de un candidato de las buenas prácticas de gestión de recursos en C ++, antes de hacer preguntas "difíciles".


3
"Incluso un par de desarrolladores de C ++ que conozco lo suficientemente bien como para juzgar su competencia dijeron que no reconocían el término". Bueno. "Entonces, es" ¿Puedes explicarme el idioma de RAII? "¿Es una pregunta de evaluación justa?" ¿Por qué preguntar? No podías encontrar personas que lo supieran. ¿Qué más necesitas saber que aún no sabes? Tal vez debería minimizar este tema (ya que ya conoce la respuesta) y centrarse en "¿Hay mejores preguntas alternativas" más leves "que podrían ser interesantes? Excepto que es un tiroteo de opiniones, que no se toleran bien.
S.Lott

99
Los modismos cambian, las buenas prácticas no. En lugar de preguntar acerca de un idioma en particular, ¿qué tal simplemente preguntar, "qué pasos das al diseñar una clase para asegurarte de que no se filtre?"
Blrfl

Es justo, aunque el tamaño de mi muestra es bajo y ya no participo activamente en la comunidad C ++, por lo que no sé lo que la comunidad considera conocimiento esencial en estos días. Básicamente, estoy tratando de descubrir cómo ampliar mi repertorio de preguntas que pueden usarse para juzgar el conocimiento real de C ++ más allá de, por ejemplo, los conceptos básicos de la sintaxis.
JasonTrue

2
Tu problema no es lo que esperaba. Asumí que encontrarías a alguien que sepa lo que es RAII, lo contraten, y solo más tarde descubres que todavía apestan en la codificación.
Kevin

1
@JasonTrue: Creo que se supone que las preguntas de fizz buzz son preguntas de programación reales, como invertir una cadena. Pero de todos modos creo que es una buena pregunta. También puede considerar preguntar qué características en c ++ - 0x el entrevistado considera más interesantes o importantes. Es un poco más difícil, pero si obtienes una buena respuesta, probablemente signifique cosas buenas. Y la pregunta siempre puede volver a ser, 'qué impulso de las bibliotecas son más importantes / interesantes' si obtiene una mirada en blanco.
Kevin

Respuestas:


24

Parece que descubrió que los desarrolladores de C ++ que conoce por experiencia son competentes y no están familiarizados con ese acrónimo o incluso con la expresión completa. Eso por sí solo parece indicar que la pregunta no es adecuada como pregunta de detección durante una llamada telefónica.

Por otro lado, podría llegar al mismo punto a través de una forma más indirecta presentando un escenario. Algo así como: "Está implementando una clase Log que escribirá información de registro en un archivo. Obviamente, necesitará tener una variable miembro que sea un identificador de archivo (std :: FILE *). ¿Dónde asigna y libera este archivo? ¿encargarse de?" Si el candidato comienza a hablar de crear un método open () y close () en lugar de asignar el identificador de archivo en el constructor y desasignar el identificador en el destructor, puede continuar preguntando cosas como cómo se comportaría su clase si el el código de llamada generó excepciones, etc.


Una excelente sugerencia. Me gusta este enfoque.
JasonTrue

Toma demasiado tiempo en una entrevista telefónica.
HelloWorld

15

No creo que sea una pregunta práctica como se propone. Creo que encontrarás que muchos desarrolladores caerán en el campo "oh, sí, no sabía que tenía un nombre". Te sugiero que pruebes a los candidatos con el concepto y no con el nombre del concepto. Déles un ejemplo de código y pregúnteles por qué está incompleto o pídales que demuestren que conocen el concepto.


3

Creo que es una pregunta válida. Aunque no sé qué tan popular es el término RAII (en mi equipo, usamos el término RAII todo el tiempo), pero el concepto de manejo de recursos es importante, especialmente si también quieres seguridad de excepción y seguridad de subprocesos múltiples. .


3

Bueno, sé que cuando quiero saber si alguien es competente, lo primero que hago es verificar su conocimiento de las siglas. Una vez establecido, me aseguro de que sepan los nombres de otras tecnologías que creo que suenan bien. Si todavía están allí después de eso, les pido una lista de sus colores favoritos.

No puedo soportar este tipo de cosas. Quiero decir, al final de la entrevista, son sirenas y campanas de advertencia. No quiero trabajar en un lugar donde realmente importa que conozca mnemotécnicos extraños que mi jefe piensa que son "fundamentales". No puedo molestarme en aprender los nombres de personas con las que he tratado durante años, así que estoy seguro de que no malgastaré el espacio del cerebro con lindos acrónimos que describen las mejores prácticas.

Mira mi codigo. Pregúntame cómo haría las cosas. Dibujaré basura en una pizarra hasta que las vacas lleguen a casa. Te codificaré una aplicación. No me hagas preguntas triviales de mierda. La trivia siempre es impredecible, y nunca es fundamental.


No tiendo a hacer muchas preguntas de conocimiento esotérico en las entrevistas de selección, pero hay un poco de debida diligencia que debo hacer para asegurarme de que alguien no sea completamente incompetente. En consecuencia, estoy buscando una pregunta abierta que me permita verificar cierto nivel de conocimiento y al mismo tiempo que el candidato muestre sus propios antecedentes. Espero "algo" de conocimiento directo si alguien dice que conoce la tecnología X en su currículum; mi pregunta se reduce a, ¿qué conocimiento debo esperar de un programador de C ++ que es una puerta de entrada útil para una mayor conversación?
JasonTrue

44
@jason: Bueno, probablemente pueda recordar el acrónimo RAII durante unos meses. ¿Ese conocimiento efímero me hace competente, a pesar de que no he tocado C ++ en años? Es una trivia concisa. Pregúnteles cómo manejan las cerraduras y asegúrese de que entiendan el CONOCIMIENTO real, no el acrónimo extraño.
Satanicpuppy

1
@jason: estoy de acuerdo. Simplemente no estoy de acuerdo en que los conceptos básicos incluyen este tipo de curiosidades. Un idiota podría saberlo, y un experto podría no saberlo. Estás basando tu proceso de selección en algo irrelevante para la habilidad.
Satanicpuppy

55
Saber cómo se llama RAII no es un conocimiento esencial. Pero alcanzar automáticamente el patrón es.
btilly

2
RAII es un concepto fundamental de buen C ++, y el término ha existido durante al menos 20 años. Creo que descartarlo como trivia es algo injusto. Si bien puedes tener buenos desarrolladores de C ++ que no conocen el término, para mí huele a alguien que no investiga su oficio.
Kaz Dragon

1

Si su propósito es eliminar rápidamente a los incompetentes totales, intente algo como esto:

Prueba FizzBuzz

Luego, puede dejar los conceptos y prácticas de C ++ a quienes estén en una mejor posición para evaluar la experiencia en C ++.


1
Utilicé y recibí esta pregunta con frecuencia, y la mencioné anteriormente en mi comentario, pero me resulta incómodo preguntar en una conversación telefónica de 25 minutos.
JasonTrue

0

Es una pregunta válida, pero no para la detección. Lo usé como una pregunta escrita, para ser discutido en la entrevista. Puede obtener mucha información sobre los patrones de pensamiento con previo aviso. Como pregunta de detección, es solo una trampa desagradable.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.