Tengo una prueba de programación en línea para un puesto de consultor de análisis de nivel de entrada. Siempre he consultado el código o la documentación en línea durante la programación, pero en la prueba no se me permite hacerlo. Ahora no sé cuál es el punto de probar la memoria si puedo codificar con la ayuda de Google.
¿De qué sirve tener pruebas de programación supervisadas si se puede hacer bien con la ayuda de documentación o fragmentos de código en línea? ¿Es justo probar así? ¿Cómo puedo transmitir que puedo codificar bien, solo que no soy bueno para recordar todas las cosas para no tener que buscar en línea?
Podría entender si se tratara de una prueba de programación básica, pero es una prueba de programación de nivel moderado a difícil que, en la vida real, incluso un profesional experimentado necesitaría ayuda de la documentación o de Google.
Tenga en cuenta que la prueba se realizará en la plataforma hackerrank y no estoy seguro de si la lógica o la implementación importarán si no paso todos los casos de prueba.
Actualizar:
Antes del comienzo de la prueba, tiene una casilla de verificación con la nota: "No consultaré/copiaré código de ninguna fuente, incluido un sitio web, un libro o un amigo/colega para completar estas pruebas, aunque puedo hacer referencia a la documentación del idioma o usar un IDE que tiene características de finalización de código".
¿Cómo usaría el IDE o la documentación si no se me permite escapar de la pantalla completa? ¿Debo preguntar explícitamente qué está permitido y qué no está permitido?
¿Es justo probar así?
¿Es sensato? No sé.
¿Es justo? Sí, es justo. Si a los demás se les pide que hagan lo mismo. Es justo.
Después de todo, el objetivo de un examen no es necesariamente aprobarlo. Es comparar tu desempeño con el desempeño de los demás. En ese sentido, es justo.
Si alguien solía codificar con Google y alguien puede recordar todo, este tipo de pruebas no son justas. Ponen a prueba más la capacidad de recordar muchas cosas que las habilidades de programación. – Andrei Suvorkov
Eso no es exactamente cierto. No solo ponen a prueba la memoria del candidato. También prueban la capacidad del candidato para hacer preguntas al entrevistador.
Además, la habilidad de programación es en parte recordar muchas cosas. Los mejores programadores, los que tienen mucha experiencia reciente, recordarán más. Así son las cosas.
Es como con el ajedrez. Los mejores jugadores de ajedrez recordarán las posiciones del tablero mucho mejor que un principiante completo.
Cuanto más practicas en algo. Mejor te vuelves en organizar y agrupar esa información en tu memoria. Además, cuanto más practiques algo, parte de ello puede incluso llegar a tu memoria muscular.
En cualquier caso, te sugiero que practiques usando la técnica de repetición espaciada . Cuanto menos tenga que depender de Google para cada pequeña pregunta de sintaxis (especialmente de sintaxis básica), más eficiente será como programador.
Ahí es realmente donde debes poner tu esfuerzo porque realmente no vas a hacerlos cambiar de opinión. O la otra alternativa es entrevistarse con otras empresas que son menos estrictas en sus entrevistas técnicas.
Y el día de la prueba, el punto es no ponerse nervioso. Use nombres de funciones inventados o pseudocódigo si es necesario. Solo dile al entrevistador lo que estás haciendo. No tenga miedo de decir que no sabe algo y de hacer preguntas cuando lo necesite.
Y si necesita practicar entrevistas en tiempo real, le sugiero que pruebe estos: http://pramp.com/ y http://interviewing.io
foo
. Aquellos que 'simplemente recuerdan todo' deben saber casi toda la documentación de MATLAB para escribir mean(foo,'all')
. Aquellos que simplemente olvidaron que tal comando existe pueden escribir sum(foo(:))/numel(foo)
o una función basada en funciones aún más primitivas.Parafraseando la entrevista de Cracking the Coding: la mayoría de las empresas son conscientes de que sus pruebas darán como resultado algunos falsos negativos. Particularmente en las compañías de renombre que obtienen cientos y cientos de solicitantes, están bien con eso. Lo que quieren evitar más que nada son los falsos positivos. Un falso positivo significa que están desperdiciando su dinero en alguien que no va a ayudar, que potencialmente puede introducir más errores en la base de código que un candidato calificado y que, en última instancia, le cuesta a la empresa más de lo que aporta.
En resumen: tienes toda la razón. Este no es un escenario del mundo real y lo está poniendo a prueba más allá de lo que debería esperarse, especialmente de un candidato junior. Pero esa no es realmente su preocupación, su preocupación es asegurarse de que obtengan al mejor candidato con menos probabilidades de cometer errores.
editar: Aquí hay un escenario propuesto. Tenemos tres empresas con participaciones y reputaciones idénticas en el mercado. Todos se ven como perspectivas laborales muy atractivas. Se aplica exactamente el mismo grupo de 10.000 candidatos a cada empresa.
De los 10.000 candidatos, 100 de ellos son candidatos calificados y excelentes. 9.900 de ellos no son aptos para el puesto y podrían dañar la infraestructura de la empresa.
La empresa A decide que es fundamental que analice a todos los candidatos y elija solo los que desee. En la ronda 1 de entrevistas, usan una prueba básica de FizzBuzz y eliminan 5000 de inmediato. En la segunda ronda, envían una pregunta de entrevista que tiene aproximadamente el nivel de dificultad que esperan para el trabajo y la reducen a alrededor de 300 candidatos. Realizan entrevistas en persona para los últimos 300 candidatos y las reducen a los 100 candidatos calificados. Comparan a esos candidatos entre sí y seleccionan su favorito.
La empresa B decide que en realidad solo se preocupan por dos cosas: contratar rápidamente y conseguir un candidato calificado. Envían una prueba impersonal de FizzBuzz completa por correo electrónico para completar por correo electrónico, y eliminan a las mismas 5000 personas que no sabían lo que estaban haciendo. La segunda ronda de entrevistas requiere operadores bit a bit, bit shifting y todo tipo de preguntas de nicho, solo para entrevistas, con las que el 99,999 % de las personas en este rol nunca tendrían que lidiar. Esto reduce su búsqueda a 23 candidatos. La empresa B confía en que cualquiera de los 23 candidatos hará bien el trabajo. Pueden entrevistarlos individualmente para encontrar una buena personalidad y luego pasar al trabajo real.
La empresa C simplemente envía un cuestionario básico de FizzBuzz y tiene 5000 candidatos que deciden que encajan bien (muchos falsos positivos). Seleccionan uno al azar, porque el tiempo es dinero, ¡maldita sea! ¡Estoy seguro de que todos pueden hacer el trabajo! Después del proceso completo de incorporación, la configuración de los beneficios, etc., se dan cuenta de que su candidato solo buscó en Google la respuesta al cuestionario de FizzBuzz y no sabe nada sobre las funciones relevantes del trabajo.
Las empresas A y B eventualmente pueden llegar al mismo punto final de seleccionar un solo candidato calificado, pero la empresa B lo ha hecho en mucho menos tiempo y con un costo de mano de obra significativamente menor para buscar candidatos. Sí, expulsaron a algunas personas injustamente, pero especialmente para algo de nivel bajo o medio, no necesitan un desarrollador brillante. Solo necesitan un desarrollador, alguien que pueda desempeñarse tan bien como cualquier otro.
Cuando llegue el final del año y las empresas A, B y C tengan que comparar entre sí, si todo lo demás es igual, la empresa B habrá retenido más dinero y tendrá más tiempo y energía para dedicar a los proyectos que la empresa A. La empresa C, que seleccionó un falso positivo, ahora tiene que volver al proceso de contratación, habiendo perdido tanto dinero como tiempo. Tiene sentido desde el punto de vista comercial eliminar a los candidatos con una preocupación mínima por los falsos negativos, siempre y cuando pueda conservar una cantidad razonable de verdaderos positivos.
Esta prueba está bien. No quieren poner a prueba tu habilidad para buscar en internet sobre las cosas. Quieren poner a prueba tu forma de pensar. Porque programar es entender los requisitos e implementar algoritmos (en mi humilde opinión).
Los errores en la fuente se pueden corregir más tarde, pero si no puede pensar como programador, (probablemente) no es aplicable para esta posición.
Incluso si recuerda algunas estructuras, códigos, esto no le ayudará mucho si no puede entender las cosas.
Y si todos los candidatos son probados bajo las mismas reglas, sí, la prueba es justa. Es otra historia si esta es una buena prueba (y buena para quién).
Debo enfatizar que no soy un fanático de las pruebas en este tipo de condiciones, no son una prueba particularmente buena de la capacidad real de un candidato, ya que es bastante raro no poder hacer referencia a Google o recursos similares mientras se lleva a cabo. trabajo de verdad.
Dicho esto, no significa necesariamente que la prueba sea injusta : si todos los candidatos están sujetos a las mismas condiciones de prueba, entonces es justo. Si desea el trabajo, debe tomar la prueba lo mejor que pueda, al igual que todos los demás. Si quieren contratar a alguien con buena memoria para este tipo de conocimiento, supongo que esa es su prerrogativa. Así como eres libre de no trabajar en algún lugar si no te gustan sus prácticas de contratación.
¿Es justo probar así?
Con cualquier parte de una entrevista; es perfectamente justo siempre y cuando no te escojan. Cualquier cosa que una empresa piense que le dará la información necesaria para tomar una decisión de contratación informada es justo que te la pidan.
Sin embargo, siempre vale la pena recordarlo; usted siempre es libre de rechazar cualquier parte de una entrevista, aceptando el resultado probable de que será eliminado del proceso en ese momento. Las entrevistas se tratan tanto de que usted quiera trabajar para ellos como de que ellos quieran contratarlo.
¿De qué sirve tener pruebas de programación supervisadas si se puede hacer bien con la ayuda de documentación o fragmentos de código en línea?
Mientras que especular sobre los motivos de alguna otra compañía es siempre un juego de adivinanzas. Algunas razones probables pueden ser:
Piensan que les dará una comprensión de su conocimiento básico.
Piensan que si has trabajado en el idioma durante un tiempo considerable, recordarás una cantidad considerable de cómo funciona.
Quieren ver cómo trabaja en un entorno desconocido o en un campo donde no existe documentación (por ejemplo, cuando trabaja en la vanguardia)
Esta fue la forma en que fueron entrevistados, así que esta es simplemente la forma en que usted será entrevistado.
Desconfían de contratar a un candidato que pasa la prueba improvisando los resultados existentes en línea, sin tener el conocimiento necesario, ya sea que esto sea realmente un problema real o no.
¿Cómo puedo transmitir que puedo codificar bien, solo que no soy bueno para recordar todas las cosas para no tener que buscar en línea?
Aunque esto dependerá del empleador, si están dispuestos a leer su código (deberían hacerlo), en lugar de enviarlo a través de un sistema automatizado de "qué porcentaje aprobaron", siempre puede usar pseudocódigo para las áreas que conoce. cómo resolver pero carece del conocimiento de sintaxis para completar (o donde necesita hacer suposiciones sobre cómo funciona una determinada API).
Por ejemplo, si sabe que "hay una manera de enviar una pulsación de tecla falsa" pero no sabe cómo hacerlo en la API Win32 real sin buscarla, puede escribir un código como este:
if(realLogic){
SendWindowsKeyPress("ENTER_KEY"); // There is a way to do this in the Win32 API, but I do not have the reference to hand. Placeholder function signature used here.
}
Tener en cuenta que los comentarios son valiosos y explicar las cosas para las que necesitaría visitar una referencia es perfectamente válido.
Por supuesto, si no están dispuestos a leer su código o tienen pautas estrictas sobre "realmente debe ejecutarse o no lo contrataremos", simplemente no tendrá suerte y lo descartará como una empresa a la que le gustaría probablemente no quiera trabajar en primer lugar.
Me gustaría aprovechar lo que dijo @Romeo Ninov en su publicación:
Quieren poner a prueba tu forma de pensar.
Esto es 100% correcto. Recientemente tuve una entrevista técnica a través de una videoconferencia en la que me pidieron que resolviera dos problemas de codificación. Se me permitió usar mi idioma de preferencia.
No podía recordar la sintaxis para hacer algo en particular en este idioma y le pregunté al entrevistador si estaría bien que lo buscara rápidamente en Google. Dijeron que no debería preocuparme por eso y que está bien simplemente simularlo/usar pseudocódigo en lugar de cualquier sintaxis que no pueda recordar. También justificaron esto explícitamente diciendo que estaban más interesados en ver mi proceso de pensamiento y no necesariamente mi capacidad para 1) resolver los problemas correctamente y 2) recordar la semántica del lenguaje.
Pero eso obviamente es un poco diferente a usar Hackerrank. Para eso, simplemente necesita practicar hasta que ese tipo de problemas se conviertan en una segunda naturaleza.
(O hasta que se vuelvan obsoletos como mecanismo de deshierbe, podemos soñar, ¿no?)
Dependiendo de lo que realmente necesite, ¿tiene permitido (¡y puede!) usar manuales de referencia fuera de línea para funciones API, nombres de parámetros, etc.? En muchos casos, incluso estarían integrados en plataformas IDE.
Eso debería ser razonable, y eso debería ser suficiente.
Esta prueba no está diseñada para evaluar su capacidad para buscar soluciones en Google o hacer preguntas sobre el desbordamiento de la pila. Está diseñado para analizar cómo abordas personalmente un problema sin ayuda. Se espera que cometas errores. Se espera que falles.
Lo que realmente quieren ver es cuándo y cómo fallas. Que tipo de errores cometes. Así se van a comparar todos los candidatos y elegir al que falle con menos daños colaterales.
Piense en ello como probar materiales para construcciones, como puentes, centrales eléctricas, etc. Esos materiales están sujetos a condiciones que van mucho más allá de las condiciones de las operaciones estándar. Se ve obligado a trabajar en condiciones más estrictas de lo habitual para que sus fortalezas y debilidades puedan verse más fácilmente.
Un codificador que entiende lo que está haciendo puede ser más lento sin una búsqueda en la web, pero uno que no puede completar el trabajo sin cortar y pegar, pronto pegará algo incorrecto y no lo entenderá. Creo que esta compañía puede estar en algo.
El empleador conoce el trabajo y las habilidades que necesita para hacerlo, por lo que creo que es perfectamente razonable.
Entiendo lo que dice, pero más bien es parte de un proceso de contratación fallido en lugar de uno injusto. Muchos reclutadores con los que he hablado están de acuerdo.
El empleador necesita saber qué hará usted si alguien más no ha resuelto el problema. Para esto, las pruebas técnicas en línea no funcionan, ya que solo dan un aprobado/suspenso y no permiten respuestas fuera de lo común. Necesitan darle un problema del mundo real y observar su enfoque.
Una prueba técnica en línea solo verifica su memoria de sintaxis y preguntas de programación arbitrarias que están intencionalmente ofuscadas de una manera que nadie escribiría código. - Me gustaría saber cuándo esto reemplazó a tener una cartera y buenas referencias.
Entonces lo entiendo y en parte estoy de acuerdo, pero también lo veo desde el punto de vista de los empleadores. Tal vez sugiera que en lugar de tomar la prueba en línea, sugiera reunirse cara a cara y responder cualquier pregunta técnica que tengan. - Esto es lo que hago. Rechazo las pruebas en línea y estoy feliz de alejarme de cualquier trabajo que no sea lo suficientemente flexible para acomodar, pero sé que no todos tienen ese lujo.
No mencionó si requieren un código que realmente se ejecutaría, o uno que no necesariamente se ejecutaría como está, pero que simplemente les mostraría cómo resolvería la tarea.
Supongo que es la segunda opción. El punto es mostrar sus habilidades de diseño de software y no depende si escribe correctamente una función de biblioteca.
También pueden tener miedo de que uses Google de manera injusta (haciendo trampa, copiando soluciones completas u obteniendo ayuda de otras personas).
PD: Probablemente tampoco insistan en memorizar las funciones de la biblioteca (eso no tendría sentido): si no recuerda la función de la biblioteca, simplemente llame a una hipotética.
jose