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.
fuente
Respuestas:
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.
fuente
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.
fuente
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 .
fuente
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?
fuente
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.
fuente
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.
Acabas de responder tu propia pregunta.
No, eso no es lo que te pidieron que hicieras.
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.
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.
fuente
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.
fuente