Responsive imageLaboral

Cómo superar un test de programación durante la entrevista

Si eres desarrollador web, es muy probable que en algún momento tengas que enfrentarte (o te hayas enfrentado ya) durante una entrevista de trabajo a un test práctico en el que se te pide que resuelvas un problema o que lleves a cabo un ejercicio de programación. Son ejercicios que sirven para poner a prueba al candidato y comprobar cuáles son sus conocimientos prácticos y cómo encara la búsqueda de soluciones a nuevos problemas. Estos son nuestros consejos para superar un test de programación como parte de un proceso de selección.

Qué puedes esperar de una entrevista para un perfil técnico

En este tipo de entrevistas se suele reservar un momento para hablar de los aspectos técnicos. Durante la conversación, puedes sacar a relucir tus conocimientos teóricos y demostrar que conoces el lenguaje apropiado para el puesto. El problema que esto plantea es que una conversación siempre girará alrededor del ámbito teórico y el entrevistador difícilmente podrá evaluar tu capacidad real de resolución de problemas en el área del desarrollo. Y precisamente por eso existen las pruebas prácticas: el escenario en el que debes demostrar al reclutador que, más allá de la formación y habilidades que reflejaste en tu currículum, sabes afrontar los desafíos y sacar adelante las tareas. Normalmente, estas pruebas consisten en resolver un problema o realizar un desarrollo desde cero. Pero lo importante no es solo el resultado, sino también los motivos por los que has elegido un método concreto para llegar hasta ese resultado y cómo has desarrollado ese método durante el proceso. A la empresa le interesa comprobar: cuál es tu forma de proceder cómo trabajas en equipo para facilitar el trabajo a tus compañeros cómo respondes ante un bloqueo

En qué consisten los tests de programación

Los tests pueden tener formatos distintos y se dirigen a candidatos con distintos perfiles. “Este tipo de pruebas se utilizan tanto para ingenieros de software (BE/FE/mobile) como para software test engineers de cualquier nivel (junior, mid y senior), pero en función del nivel, se esperará del candidato una solución de mayor o menor dificultad técnica”, asegura Marta Ruiz, team lead en Xing.

Desarrollo

Pueden consistir en: construir el esqueleto de una aplicación móvil desarrollar el código apropiado para un tipo de web concreta encontrar un error en un código ya dado

Adaptación

A partir de un fragmento de código, desarrollar una adaptación para un uso distinto del que tenía originalmente. Por ejemplo, añadir la posibilidad de que plugins externos puedan manejar sus propios archivos, para lo que el candidato tendrá que añadir el código necesario para este fin sin comprometer el código preexistente. Existen plataformas como TestDome donde se pueden consultar distintos tipos de tests que las empresas acostumbran a pedir a los candidatos.

Resolver un enunciado

Otra plataforma también a menudo utilizada por reclutadores y empresas durante las pruebas es Codility, donde normalmente el candidato debe resolver un enunciado en 30 minutos. La propia plataforma permite compilar y probar la solución ofrecida, y devuelve una puntuación. También permite hacer un test gratuito para prepararse de cara a una posible entrevista.

Las 5 claves para preparar la prueba

Con estas premisas en mente, ya puedes empezar a preparar de forma específica el test de programación de un proceso de selección. Para ello, te recomendamos que sigas estos consejos:

1. Prioriza las instrucciones que te dé el reclutador

Las empresas que recurren a este método tienen estilos y necesidades distintas, por ello es esencial que prestes atención a las instrucciones que se te entregan para poder completar la prueba. No atender a los requerimientos de la empresa puede ser interpretado como síntoma de desgana, de no saber respetar las instrucciones de un superior o de no saber trabajar en equipo. Por ejemplo, según comenta Marta Ruiz, la red Xing acostumbra a realizar tests de programación a los candidatos que superan la entrevista inicial, aunque en lugar de fijar un límite de tiempo para resolverlos, les pide que sean ellos quienes comuniquen la fecha estimada en que van a entregar la respuesta. “En este caso, si no proporcionas una fecha o la excedes sin avisar, esto será sin duda un mal indicador”.

2. Dedica tiempo a pensar en la solución

Las ganas de acabar la prueba en un tiempo que impresione al reclutador pueden hacer que te precipites y tomes una decisión incorrecta o parcial. También pueden entrar en juego los nervios, que podrían hacer que interpretaras mal el enunciado y acabaras optando por un camino que no fuera el requerido. Invertir el tiempo suficiente en entender la prueba y asegurarte de que sigues las pautas correctas aumentará tus probabilidades de encontrar la solución perfecta. Y si tienes alguna duda, no dudes en preguntar. Huye de esa vocecita que te dice que admitir que no has entendido una parte del test es un síntoma de debilidad. La buena comunicación en equipo es un factor clave para el éxito, y precisamente cuando más falta hace esa comunicación es cuando surgen complicaciones o malentendidos.

3. Documenta todo el proceso

En estas pruebas no solo se busca un buen resultado final, sino también comprobar cómo el candidato va resolviendo los problemas que van surgiendo por el camino. Parte del objetivo de un test de este tipo es que el candidato pueda explicar y argumentar el porqué de sus decisiones. Es más: muy posiblemente, tras la entrega, la empresa te pregunte sobre tus decisiones, incluso si el resultado ha sido satisfactorio. Deberás tener claras las respuestas que quieres dar y tus argumentos. Y para ello, nada mejor que plasmarlo todo por escrito, tanto para ti mismo como para ayudar al reclutador a comprenderlo de un solo vistazo. Es más: según explica la team lead de Xing, lo ideal es “acompañar tu entrega final de un archivo README que contenga los pasos a seguir para ejecutar y evaluar el resultado final”.

4. Haz Commit con frecuencia

Es decir, confirma los cambios provisionales que deban pasar a convertirse en solución permanente. Como sabes, guardar los archivos en el repositorio implica que estos cambios se han consolidado y que la ejecución ha sido exitosa. Según Marta, “esto también proporciona información sobre la línea de pensamiento del candidato”.

5. Interactúa con el resto de miembros del equipo

A un desarrollador freelance que trabaje por su cuenta se le presupone la capacidad de trabajo autónomo e independiente. Pero para encontrar soluciones dentro de un grupo de trabajo, la virtud está en saber trabajar en equipo. En algunas entrevistas grupales hay varias personas de la empresa evaluándote para un test en tiempo real. En ese caso, y si procede en el tipo de test (en algunos casos debes hacerlo a solas), puedes comunícate con el resto de miembros de las distintas áreas: calidad, operaciones… pues es una forma de demostrar tu capacidad para el trabajo colectivo Por último, ten presente que en un test de programación como parte de un proceso de selección no solo se pretende conocer tu habilidad como programador, sino también tu forma de enfrentarte a los bloqueos o de organizar el trabajo que tienes por delante, la capacidad para resolver desafíos como parte de un equipo y sacar adelante las tareas junto al resto de miembros, cuál es tu manera de argumentar tus decisiones, y en definitiva, cómo podrías encajar en el día a día de la empresa más allá de tu talento con el código. Es una buena ocasión para sacar a relucir muchas habilidades transversales que te pueden suponer muchas más papeletas para ser el candidato que logre el puesto, no olvides que no solo les interesa el aspecto técnico.

RECLUTAMIENTO Y SELECCIÓN DE DESARROLLADORES

Hay un factor común que ha tomado un papel protagonista en los procesos de selección de programadores: el código fuente del candidato. Desde habitissimo os queremos compartir nuestras reflexiones sobre esta potente herramienta y nuestra manera de usarla. En los últimos años, las competencias han tomado el papel central en los procesos de selección. En un mundo en el que las tareas asociadas a un puesto de trabajo cambian con mucha rapidez se prefiere contar con personas que tienen lo necesario para adaptarse a las nuevas situaciones que con expertos en desarrollar una tarea específica. Dada la situación actual se puede pensar que las entrevistas deberían ser suficientes para averiguar si un programador puede realizar bien sus tareas. Si bien la entrevista es la parte central del proceso de selección, quedarse solo con eso es un enfoque extremadamente negligente. ¿Alguien contrataría a un actor sin realizar un casting?, ¿un deportista sin realizar pruebas físicas? Invertimos horas en el proceso de selección y entrevistas al aspirante para conocerlo a fondo, pero también dedicamos quince minutos a comprobar sus referencias. Del mismo modo es indispensable comprobar que el candidato está realmente capacitado para desarrollar la tarea que va a estar realizando durante, al menos, el 80% del tiempo.

¿Qué información obtenemos?

Evaluar el código fuente nos aporta mucho más que una simple garantía de que esa persona sabe programar correctamente. Pedir y recibir código fuente del candidato nos da una buena idea de otras competencias como desarrollador. En nuestro caso buscamos a desarrolladores con pasión por lo que hacen y que les guste aprender, por lo que valoramos positivamente que nos envíen proyectos personales que han decidido compartir con la comunidad. Por otro lado, la entrevista de código supone una barrera de entrada que permite descartar al candidato en una parte temprana del proceso, ahorrando así el tiempo de los entrevistadores. Como bien dijo Linus Torvalds, creador y responsable de desarrollo del Kernel Linux, «Talk is cheap, show me the code».

Tipos de evaluación

En los procesos de selección de desarrolladores nos encontramos con dos tendencias distintas en la evaluación de código: la primera está dirigida a los resultados y la segunda, a la calidad. .

Evaluación orientada a resultados

Los beneficios de evaluar técnicamente a los desarrolladores son evidentes y se ha incorporado a muchos procesos de selección a modo de prueba o test de programación. Evaluar la habilidad de un programador no es fácil y a menudo se cometen errores. Hoy en día se obtiene esta información con exámenes de programación que buscan cazar al candidato en aspectos rebuscados del lenguaje o a partir de preguntas relacionadas con el ámbito académico, que nada tienen que ver con las competencias que se requieren para el puesto. Algunas empresas como codility o mettl ofrecen soluciones integradas para la evaluación de las competencias técnicas de los candidatos. Esto permite a las empresas establecer, en poco tiempo, un proceso estandarizado y libre de sesgos: si el aspirante resolvió 4 de los 5 problemas propuestos lo consideraremos apto para el puesto. La facilidad de integrar este tipo de prueba lo hace recomendable para procesos en los que se reciben muchas solicitudes y hay que separar el grano de la paja. En cualquier caso nos tendremos que asegurar de que estamos evaluando las competencias necesarias para el puesto. .

Evaluación orientada a calidad

Evaluar la competencia de un desarrollador en una prueba estandarizada tiene también sus riesgos. Por un lado es posible que acabemos descartando a un gran profesional por razones circunstanciales: nervios durante la prueba, desconocimiento de un aspecto específico del lenguaje, etc. Por otro lado, no estamos considerando la calidad del código resultante, solo su capacidad para resolver o no la tarea. Habitualmente, los programadores que en un primer momento parecen más resolutivos son los denominados cowboys. Son capaces de entender el problema fácilmente y aportar soluciones rápidas y creativas. Este tipo de programadores pueden ser muy útiles para tirar un proyecto adelante cuando el tiempo es crítico. Sin embargo, su tendencia al código «espagueti» los hace poco apropiados cuando se trata de mantener un proyecto grande o de trabajar junto a otros programadores. Una evaluación orientada íntegramente a resultados puede resultar un colador de programadores cowboy. Esto puede resultar poco importante, o incluso deseable, para una consultoría de desarrollo web en el que se desarrollan proyectos de unas pocas semanas o meses y que luego raramente se mantienen. Sin embargo, cuando se trata de desarrollar y mantener un producto es importante fijarnos también en otros aspectos del código. Leer y evaluar el código fuente escrito por el candidato permite averiguar con qué tipo de programador nos encontramos y ajustar la evaluación a los intereses de la organización. Es una evaluación más meticulosa en la que tendremos el cómo se ha solucionado el problema y no sólo el qué ha solucionado. Buscaremos que el código sea claro y fácil de mantener. Evaluación de código en el proceso de selección de habitissimo En nuestro proceso de selección pedimos al aspirante que nos haga llegar un proyecto escrito por él y que crea que le representa como programador. Si el candidato no dispone de un proyecto que pueda enseñar le proponemos resolver un problema planteado por nosotros mismos. Desde un primer momento el aspirante sabe cómo se va a evaluar su código y se le permite seleccionar y editar el código que va a enviar en consecuencia. Los aspectos que evaluamos son: 1. Descomposición del código en estructuras y algoritmos para reducir su complejidad 2. Nomenclatura de clases, funciones y variables 3. Estilo de código 4. Correcta organización del código en ficheros y directorios 5. Gestión de excepciones y edge cases 6. Uso de test unitarios y/o baterías de pruebas Al evaluar estos apartados damos por supuesto que el programador ha sabido resolver la problemática a la que se enfrentaba. Vamos un paso más allá y nos fijamos en aquellos aspectos que harán que ese código sea fácil de mantener y poco propenso a errores. El código es evaluado por al menos dos programadores, que desconocen la identidad del aspirante y utilizan una plantilla estandarizada. En la plantilla descomponemos cada apartado en varios ítems a evaluar. Por ejemplo, algunas de las preguntas que debe responder el evaluador en el apartado de utilización de estructuras y algoritmos adecuados son: ¿las clases tienen responsabilidades específicas? y ¿se utilizan los algoritmos, patrones y estructuras más adecuados para resolver el problema? Por último, damos a cada apartado un peso distinto y sumamos todos los ítems de evaluación para obtener la puntuación final. La selección de elementos a evaluar y su peso no son casuales, sino que obedecen al tipo de programador que creemos más apto para nuestro equipo y para el software que desarrollaremos.