#CodeChallenges ¿Cómo prepararte para un code challenge/code test?.

En este post te voy a explicar como puedes empezar a prepararte para realizar un code test/ code challenge.

Lo primero que debes de saber.

La realidad es que tus posibilidades de pasar un code test de una compañía grandes son pocas o nulas en tu primer intento. No se trata de que tan bueno eres, un challenge no define la calidad de profesional que eres. Los resultados de la prueba no son un indicador de tu trabajo.

Ya que pasamos esta aclaración,  voy a hacerte una analogía de lo que representa una prueba de estas. Imagina que vas a una entrevista de trabajo. El entrevistador te pide que te cambies de ropa por una deportiva, amablemente te pide que vayas a la pista de carreras. Tu primer prueba de trabajo va a ser una media maratón, que son correr 25 kilómetros. Adicional a esto, no puedes exceder el tiempo permitido, supongamos que son dos horas. ¿Podrías completar una carrera de estas al primer intento?. Quizá, tu respuesta es que si porque estás en excelente condición física, y por casualidad ya te estabas preparándote para tu próximo maratón. Bueno, pues felicidades. En este hipotético escenario el 99.9 % de las personas que tengan esta prueba fallaran; esto mismo va a suceder con los code challenges.

Si hubieras sabido, y hubieras tenido tiempo de prepararte, tendrías muchas más posibilidades de pasar la prueba. Esto sucederá con un code challenge.

No todos los code challenges son iguales.

Dependiendo de la empresa a la que quieras entrar va a ser el tipo de prueba que tengas que pasar. Hay empresas más exigentes que otras. El tipo de pruebas por las que puedes pasar pueden ser diferentes. Te voy a mencionar las más comunes:

 

  • Pair session. La actividad consiste en resolver un problema con otra persona; tú puedes tener un rol activo, o no. La persona que te esté entrevistando puede cambiar el rol, en el transcurso de esta.
  • Whiteboard/Paper. La entrevista consiste en resolver un problema sin usar una computadora. El código o pseudocódigo se escribe manualmente. Tu entrevistador cuestionará tus decisiones.
  • Code challenge sin entrevista. Tu entrevistador te mandará un documento con un problema. Tú debes resolverlo en el transcurso de unos días.
  • Code challenge con entrevista. En este tipo de prueba. Tienes enfrente un entorno de desarrollo. Y debes de resolver un problema en vivo, con la presencia de tu entrevistador. El tiempo es limitado, puedes necesitar escribir una solución optimizada.

Pair sessions.

Estas pruebas están pensadas en validar aspectos específicos, si eres competente en un lenguaje, sabes cómo refactorizar o escribir pruebas unitarias. etc.

Whiteboard/Paper.

El proposito de estas pruebas es ver tu comportamiento, tu capacidad de tomar de decisiones, como reaccionas a las críticas o comentarios. No se espera que tu código «compile». Con la pandemia estas pruebas están en desuso.

Code challenges sin entrevista.

Hablemos del primer escenario. Donde te piden que hagas un ejercicio en un periodo determinado de tiempo. El ejercicio en cuestión, está diseñado para que lo hagas con la mejor calidad posible. Revisa cuál es el stack que maneja la empresa, que técnicas o buenas prácticas se espera ver. Escribe bien tu código, preferentemente escríbelo en inglés.

Code challenges en entrevista (los más difíciles).

Este tipo de pruebas son las más difíciles, solo te tocará hacer una de estas si buscas entrar en una compañía grande, una FAANG, por ejemplo.  La única posibilidad real que tienes es prepararte, entrenar.

En mi primer code challenge de práctica hice 6 horas. Es un mal resultado si piensas que el tiempo  promedio que te dan es de 60-90 minutos. Toma mucho tiempo modelar una solución en tu cabeza y en el código. Necesitas encontrar un equilibrio entre usar el menor código posible y escribir algo que puedas entender.  Si empiezas a hacer un modelo muy elaborado puedes acabarte el tiempo y no producir nada. En cambio, si escribes un código demasiado complicado sin tener en cuenta la legibilidad, puedes terminar perdiéndote en tus propias líneas cuando los Edge cases no pasen.

Elige un lenguaje fácil de escribir.

Yo soy programador C# y emplear este lenguaje en los tests me resta tiempo, es muy verboso, requiere de mucha sintaxis. Algunas herramientas de tests no te ofrecen ayuda con los namespaces o Intellisense. Mi recomendación es que elijas un lenguaje más fácil. Lenguajes como Ruby, Python o JavaScript pueden darte mejores resultados que Java, C#, C o C++.

Conoce bien los conceptos de recursividad y dynamic programming. 

La mayoría de los ejercicios de este tipo te obligan a encontrar soluciones que no sean por fuerza bruta. O sea, no escribas algoritmos (0)n. Para esto necesitas un poco de teoría y saber escribir algoritmos que puedan partir el trabajo.

Escucha a tu entrevistador.

Algunas veces, tu entrevistador puede darte consejos o ayudarte. Si él o ella te dice algo, tomate tiempo para pensar lo que te dice.

Si tienes tiempo, busca optimizar.

Nunca optimices sin tener el programa funcionando. Es preferible entregar una solución  lenta que funciona a nada.

Trata de responder todos los tests.

Algunos exámenes consisten en más de una pregunta. Si ese es el caso, trata de dejar el tiempo suficiente para responderlos todos.

Vas a fallar.

La mayoría de las personas que ingresan a las compañías grandes como las FAANG lo hacen en su segundo o tercer intento. Mentalízate para fallar.

Pregunta cuando puedes volver a presentar de nuevo el examen.

Estos tipos saben que el porcentaje de rechazo es brutal. Tienen políticas de reintentos, de seis meses a un año. Pregunta a tu entrevistador cuando puedes volverlo a intentar.

Conclusiones.

Te recomiendo que te prepares con tiempo, no me refiero a días. Si no a meses. Si de verdad estás pensando en aplicar una compañía con estas puertas de entrada tan pesadas. Necesitarás entrenamiento y constancia.

 

 

 

 

Gustavo Sánchez
Últimas entradas de Gustavo Sánchez (ver todo)

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.