¿Debería preocuparme las tareas de programación de ingeniería excesiva que se dan durante el proceso de entrevista? [cerrado]


27

Recientemente tuve una entrevista telefónica con una empresa. Después de esa entrevista telefónica, me dijeron que completara una breve tarea de programación (un programa pequeño; no debería tomar más de tres horas). Solo se me indica directamente que complete la tarea y entregue el código. Me dieron total libertad para usar cualquier idioma que deseara y no me dijeron exactamente cómo entregar el código.

Inmediatamente planeé lanzarlo en Github, escribir un conjunto de pruebas para él, usar Travis-CI (integración continua y gratuita para repositorios públicos de Github) para ejecutar los conjuntos de pruebas y usar CMake para construir los makefiles de Linux para Travis-CI. De esa manera, no solo puedo demostrar que entiendo cómo usar Git, CMake, Travis-CI y cómo escribir pruebas, sino que también puedo simplemente vincularme a la página de Travis-CI para que puedan ver el resultado de las pruebas. Supuse que eso sería un poco más conveniente para el entrevistador.

Como conozco bien esas tecnologías, esencialmente no agregaría tiempo a la tarea.

Sin embargo, estoy un poco preocupado de que hacer todo esto para una tarea relativamente simple se vea mal. Aunque no agregaría mucho más tiempo para mí, no quiero que piensen que paso demasiado tiempo en cosas que deberían ser simples.


55
Sería cuidadoso al poner respuestas a los problemas de las entrevistas en github, ya que a algunas compañías les gusta mantener sus problemas confidenciales.
Scroog1

77
Las preguntas están disponibles públicamente en su blog (me enviaron un enlace a la publicación del blog), por lo que no creo que estén preocupados por eso.
DormoTheNord

3
@DormoTheNord Yo diría que no estás sobre ingeniería: tener un buen proceso de desarrollo es algo completamente diferente de la sobre ingeniería, y es (IMO) una buena señal.
K.Steff

3
Dedicaría parte de ese tiempo extra a documentar las áreas grises en la especificación del problema, suposiciones, limitaciones, ... Demuestre que no solo se sumerge en la codificación, sino que contempla el problema y su contexto.
HABO

44
@DormoTheNord Las preguntas pueden ser públicas, pero sus respuestas también lo serán. Estará disponible para otros entrevistados, si pueden encontrarlo. Eso , probablemente no les gustará.
Izkata

Respuestas:


29

Como entrevistador, me complacería ver el conocimiento del proceso de desarrollo de software demostrado por este enfoque; en lugar de solo escribir el código.

En particular, tener un conjunto de pruebas incluso para problemas muy simples sería una buena señal (incluso el nivel de FizzBuzz). He visto a candidatos presentar soluciones que ni siquiera resolvieron el problema y un simple conjunto de pruebas les habría mostrado esto. Además, tener el historial de confirmación me permite tener una idea del proceso de pensamiento que el candidato ha utilizado para llegar a la solución.

Por otro lado, he conocido personas que han sido rechazadas por algunas empresas en una etapa temprana del proceso de ingeniería excesiva. Sin embargo, en la mayoría de los casos, esto se ha debido a una ingeniería excesiva de la solución, no necesariamente a los procesos utilizados.


2
¿Irías tan lejos para decir que si una empresa me rechaza por hacer lo que planeo hacer, sería una señal de que la empresa no respeta las metodologías de desarrollo de software y que prefiero no trabajar para esa empresa?
DormoTheNord

77
No necesariamente iría tan lejos, ya que hay una cierta cantidad de suerte involucrada (desafortunadamente). Puede obtener el único entrevistador al que no le gustó ese enfoque; o tal vez estén de mal humor ese día y no quieran revisar los datos adicionales proporcionados por este enfoque. Dicho esto, generalmente no hay daño en aclarar el nivel de detalle que desean. Además, hacer una o dos preguntas aclaratorias también puede ser una buena señal para el entrevistador (aunque obviamente no bombardearlas continuamente con preguntas mal informadas).
Scroog1

+1: siempre y cuando no esté restando valor a la solución, me gustaría ver pruebas unitarias y cualquier otra cosa que haga sin preguntar.
Telastyn

1
El exceso de riesgo podría ser mitigado enviando tanto un enlace github base como un enlace directamente al código fuente para la prueba de los vagos / ocupados.
Dan Neely

15

Tener como entrevistado a alguien que entendiera cosas como el control de versiones, CI, pruebas de unidad y similares sería un paso adelante en lo que generalmente veo.

Aunque, para mí, lo más importante es que el problema se resuelve y se resuelve bien, sabiendo que el candidato entendió formas de mejorar la calidad de su entrega definitivamente llamaría mi atención.

Lo que generalmente veo es personas que no solo no entendieron el problema, sino que tampoco entendieron cómo resolver el problema, y ​​que serían ignorados sin importar cuántas herramientas adicionales usaran en el proceso.


6

Tenga en cuenta que hay un límite de tiempo. El entrevistador lo sabe, por lo que esto significa (si yo fuera el entrevistador) que verá que no solo resolvió el problema dentro del tiempo asignado, sino que lo hizo tan rápido que le sobró tiempo para el chapado en oro, lo cual es una buena señal de su habilidades de resolución de problemas, así como su aprecio por el rigor y la diligencia.

El exceso de ingeniería es una mala palabra cuando creas AbstractFactoryManagerAdaptors que se conectan para entregar BuzzManager y FizzManager solo para resolver FizzBuzz.

Lo que está haciendo es una diligencia excesiva, que ni siquiera es una cosa (aunque la falta de diligencia definitivamente lo es).

Dicho esto, si termina con el tiempo o con una solución a medio piratear porque usó su tiempo en los extras que dice "no agregue tiempo en absoluto", parecerá que tiene una comprensión muy pobre de cuán grande aparentemente pequeño Las tareas pueden ser. Esto puede ser un atributo peligroso en un ingeniero y muy común entre los juniors. Priorice apropiadamente y haga las cosas de crédito extra solo después de completar la solución requerida .


No hay un límite de tiempo difícil, pero solo una nota que dice que la tarea no debería llevar a un programador decente más de tres horas. ¿Verificarán realmente mi registro de git para asegurarse de que solo pasé tres horas en él desde la confirmación n. ° 1 hasta la confirmación final?
DormoTheNord

2
@DormoTheNord si no hay un límite de tiempo, entonces el tiempo que no se dedicó a la solución solicitada puede verse como una mala prioridad. Desafortunadamente, todos los ingenieros son pensadores independientes y, por lo tanto, tienen sus propias opiniones sobre estas cosas de uno a otro, en casos como este puede ser una suerte si el que revisa lo que hizo es del tipo que lo ve de esa manera, o el ordenar verlo como una gran bendición. He conocido grandes ingenieros de ambas curvas. En estos casos, todo se reduce a lo que usted valora, mostrar eso y alguien con quien valora lo mismo que usted lo apreciará, con quien desea trabajar.
Jimmy Hoffa

Esto es lo que odio de las entrevistas de trabajo ... la suerte involucrada en complacer las preferencias personales del entrevistador. Tal vez debería ser estandarizado :)
DormoTheNord

No te preocupes, la suerte se igualará en tu carrera Solo tienes que tener suerte cuando obtienes la buena suerte y cuando obtienes la mala :)
Scroog1

1
Tendría cuidado al describirlo como 'chapado en oro' porque generalmente se supone que ese término es algo malo: en.wikipedia.org/wiki/Gold_plating_%28analogy%29
whatsisname

6

Otra opinión a considerar es que su enfoque no es ni bueno ni malo. Me imagino a los entrevistadores que lo considerarían demasiado y me puedo imaginar a los entrevistadores que les encantaría aún más la ingeniería.

No te preocupes tanto. En cambio, resuelva el problema de la manera que considere mejor y probablemente recibirá ofertas de trabajo de personas que estén de acuerdo con usted. Ese es un gran primer paso hacia un ambiente de trabajo productivo. Recuerde, las entrevistas van de dos maneras. La respuesta del entrevistador a su solución también le dirá mucho sobre ellos. ¿Realmente quieres trabajar con personas que creen que tus instintos y filosofía de desarrollo están equivocados?


3

En realidad, a nadie le importa si el candidato puede preparar un repositorio Git o crear archivos MAKE a toda prisa, porque eso es solo recordar lo que aprendió de memoria. Estas son habilidades secundarias al aspecto real de resolución de problemas y diseño de la pregunta de la entrevista.

Entonces, sí, su intuición es acertada porque potencialmente se ve mal, porque puede parecer que el candidato cree que alguien que puede regurgitar algunos comandos y patrones memorizados para crear un esqueleto de proyecto tiene impresionantes habilidades de software.

Sin embargo, el aspecto del conjunto de pruebas de la solución es bueno. Entregar una respuesta con un conjunto de pruebas de regresión probablemente le otorgará sus puntos. Más aún si su conjunto de pruebas ejercita los casos más destacados en el código. El conjunto de pruebas no tiene que tener muchas trampas formales y depender de herramientas; el hecho de que de alguna manera tengas uno allí es lo suficientemente bueno para una entrevista. Es más o menos obvio que si puede reunir algunas pruebas unitarias ad hoc en un cuestionario de entrevista, puede hacerlo con herramientas en un proyecto real.


1

Recientemente tuve una entrevista telefónica con una empresa. Después de esa entrevista telefónica, me dijeron que completara una breve tarea de programación (un programa pequeño; no debería tomar más de tres horas).

Procedería con precaución. Evalúe la relevancia del desafío para el trabajo y asegúrese de que el reembolso futuro del empleador hará que valgan la pena 3 horas de su tiempo.

Cuestiono el valor de este tipo de pruebas y prefiero juzgar a alguien por sus logros pasados. Una tarea corta predefinida no puede decirle al empleador nada sobre lo que puede hacer. Solo lo que no puede hacer, y eso se puede determinar rápidamente con algunas preguntas por teléfono.

Las pruebas tienen su lugar. Hágase las siguientes preguntas sobre el examen y responda en consecuencia.

  1. ¿El examen es justo dado su nivel de carrera actual?
  2. ¿La prueba tiene una respuesta correcta claramente definida?
  3. ¿El entrevistador tiene interés en su potencial como persona o está mostrando más interés en los resultados de la prueba (es decir, las agencias de contratación son terribles para esto).
  4. ¿La prueba representa el tipo de trabajo que le gustaría hacer o es una verificación de habilidades ambigua (es decir, prueba si conoce la sintaxis de Java).

Solo se me indica directamente que complete la tarea y entregue el código.

Acabas de responder tu propia pregunta.

Inmediatamente planeé lanzarlo en Github, escribir un conjunto de pruebas para él, usar Travis-CI (integración continua y gratuita para repositorios públicos de Github) para ejecutar los conjuntos de pruebas y usar CMake para construir los makefiles de Linux para Travis-CI.

No, eso no es lo que te pidieron que hicieras.

De esa manera, no solo puedo demostrar que entiendo cómo usar Git, CMake, Travis-CI y cómo escribir pruebas, sino que también puedo simplemente vincularme a la página de Travis-CI para que puedan ver el resultado de las pruebas. Supuse que eso sería un poco más conveniente para el entrevistador.

Tendría cuidado en demostrar habilidades demasiado pronto o demasiado tarde en el proceso de la entrevista. Si siente que no le fue bien en la entrevista y ahora está tratando de compensar, entonces no va a funcionar. Por otro lado, hacer demasiado cuando no se le pide demasiado demuestra demasiado entusiasmo. Esto podría hacer que el empleador contrarrestara con una oferta de salario más baja de lo que esperaba.

Sin embargo, estoy un poco preocupado de que hacer todo esto para una tarea relativamente simple se vea mal.

Sí, se ve mal. Resolver su desafío con una línea de código será mucho más impresionante que un proyecto completo.

Desde mi experiencia, esta no es la forma de ganar la entrevista de trabajo, pero es una forma de perder el trabajo. La prueba de código es un problema de control de calidad. Todas las empresas que usan pruebas de código cuando contratan personas lo hacen, porque anteriormente no usaban pruebas de código. Tuvieron una mala experiencia de alguien deslizándose por las grietas del proceso de la entrevista que no debería haberlo hecho.

Tomarán su código fuente y lo pasarán por la oficina. La gente comentará al respecto, y lo que no quiere que digan es "¿Cometió este error? Pero pasó tiempo usando Git, CMake y Travis-CI. Qué idiota por perderse este error".

Eso es. Has perdido.

Quieren saber que puedes codificar, porque no pueden enseñarte eso. Git, CMake y Travis-CI se pueden enseñar fácilmente.


2
@JimmyHoffa, ¿no estás de acuerdo con mi respuesta completa o solo con mis comentarios sobre las pruebas? ¿Tal vez no pude expresar mi perspectiva correctamente, o tal vez no? Para mí, valoro más el componente humano que una prueba escrita. Un candidato que falla en FizzBuzz no prueba nada para mí. Tengo que hablar con esa persona para entender por qué. pero sí quiero contratar trabajadores calificados (siempre). Simplemente no creo que vaya a casa, escriba esta prueba y regrese. Es una forma efectiva de hacer eso. Prefiero hacer la pregunta de FizzBuzz y verlos resolverlo. Lo entiendes?
Reactgular

1
@JimmyHoffa Creo que esto se reduce a las expectativas de los empleadores para una contratación. Dicho esto, me balanceo más a tu lado cuanto más leo sobre las pruebas de FizzBuzz. Un programador que no puede aprobar en ningún nivel profesional tiene problemas. No estoy seguro de si este tipo de prueba es la misma que la OP. Vea esta pregunta relacionada: stackoverflow.com/questions/117812/…
Reactgular

En pocas palabras, soy un fanático de los extenuantes procesos de entrevista y los candidatos que intentan ir más allá (sin comprometer las solicitudes centrales; de lo contrario, priorizan mal su tiempo). Toda su respuesta parece hablar en contra de estas dos cosas.
Jimmy Hoffa


@JimmyHoffa Creo que mi actitud proviene del trabajo independiente en el campo creativo, donde los clientes a menudo le piden a un proveedor que complete el trabajo creativo o las pruebas como parte de su proceso de licitación previo al trabajo. No hago ese tipo de trabajo, porque si pasara horas en cada perspectiva no obtendría ningún trabajo facturable. Cuando le dije al OP que procediera con precaución, tenía la esperanza de evitar que perdiera el tiempo. El OP quería invertir tiempo en hacer mucho trabajo extra. Es una tentación, pero ¿vale la pena la recompensa? Tal vez, pero el OP no aclaró esto. Podría ser un contrato de trabajo a corto plazo.
Reactgular

0

Creo que su enfoque no es ni bueno ni malo per se . Le preguntaría al entrevistador si está bien usar Github y las otras herramientas. Como @Izkata señaló en los comentarios, está haciendo pública su solución.

Como entrevistador, sabía que generalmente no hay daño en el candidato que intenta aclarar algunas cosas. Además, hacer una o dos preguntas puede ser una buena señal, ya que no te apresuras a hacer cosas que no entendiste.

Sin embargo, recuerde que lo más importante es que el problema se resuelve y se resuelve bien. En ese sentido, todos están de acuerdo en que un conjunto de pruebas ayuda. Pero, para eso, tal vez solo necesite enviar un par de clases de prueba junto con su proyecto / solución.

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.