Los Code Challenges no sirven. Igual deberías empezar a hacerlos.

Tengo sentimientos encontrados con los code challenges. Si bien, estos pueden reflejar que tan buen programador eres de una manera indirecta. No pueden validar otros aspectos importantes de ti como profesional. El código de solución de los challenges es horrible, no tiene Unit tests, no intenta explicar la intencionalidad de un programador, no es legible, ni describe el dominio de problema. Si extraemos este código y lo ponemos en un pull request o un code review, sería mandado directamente a re trabajo.

¿Cómo es posible que una pieza de código que no se parece en calidad al trabajo diario de un dev defina su admisión a la empresa?. Esa es una pregunta que muchos no hacemos. Los code reviews no definen tu calidad profesional, ni siquiera si eres un buen programador. Puedes ser un buen programador que tiene problemas con los retos técnicos, o, por el contrario, un mal programador que tiene talento para las pruebas técnicas.

Recientemente, he estado estudiando estos challenges para estar preparado para una hipotética entrevista en una compañía de mi interés. He estado regresando a estudiar las bases: algoritmos, estructuras de datos, complejidad algorítmica, etc. Este proceso se ha vuelto frustrante. No puedo escribir una prueba de estas rápido, necesito definir la estructura, asignar nombres con significado, y pensar en como desacoplar componentes. Si, ya sé, esto no debería aplicar en unas pruebas como estas. Después de hacer muchos de estos he notado varias cosas interesantes.

Tu pensamiento está viciado.

El desarrollo de software prioriza un conjunto de técnicas y habilidades, enfocadas más en el macro que en el micro. Rara vez nos detenemos a reflexionar en la optimización a nivel algoritmo. Pensamos en arquitecturas, en testing, en cubrir los requerimientos y damos poco peso a escribir un algoritmo óptimo.  La calidad y las buenas prácticas no están peleadas con la lógica algorítmica; ni son mutuamente excluyentes. No deberías escribir código de mala calidad aunque funcione. Pero, también deberías de reflexionar si tu pensamiento lógico puede mejorar.

Estas pruebas te fuerzan a trabajar fuera de tu zona de comodidad; y a elegir approaches que te restringen. Aquí veo una oportunidad. Si fallas en un montón de estos ejercicios puedes prevenir muchos errores en tu actividad profesional.

Los code challenges te sirven para fallar.

Los code challenges te sirven para proponer soluciones malas, que fallaran; ya sea porque la solución toma mucho tiempo o porque no cubre todos los edge cases. Este conocimiento sobre como no se soluciona un problema te puede servir para mejorar tus soluciones. Muchas veces, el poder de cómputo de las empresa nos oculta la mala calidad de nuestros algoritmos, y esta solo es visible hasta que es demasiado tarde.

En promedio, fallo de una a tres veces con cada solución que propongo en un challenge. Me refiero a los de dificultad media o alta. Lo que tu puedes entender como óptimo, puede no serlo. Tu solución puede ser demasiado compleja, o demasiado simple. Al no tener la dependencia con el negocio, ni todas las reglas referentes a la calidad, puedes concentrarte en un solo aspecto, la lógica pura y dura.

Puedes mejorar tu conocimiento del lenguaje.

Estoy usando estos challenges para aprender Scala. Si necesito escribir un montón de código que no lleva a ningún lado, que mejor que me sirva para aprender un nuevo lenguaje. También, cada challenge me muestra problemáticas o casos referentes a colecciones o estructuras de datos; que francamente, no siempre sé cómo resolverlos. Me pongo a buscar en internet y descubro que hay métodos, utilidades o características del lenguaje que me pueden servir a resolver el problema que tengo enfrente.  Si estas aprendiendo un nuevo lenguaje, los code challenges son el pretexto perfecto para practicar. Uno de los problemas que me impiden aprender un lenguaje es que no siempre sé cómo practicar.

Conclusiones.

Sigo y seguiré odiando este tipo de pruebas. Las estudio con el único proposito de estar listo para una entrevista técnica. Ahora, después de una buena cantidad de fallos, puedo decir que si sirven. Me están dando una perspectiva distinta de como mejorar un trabajo. Si estás en búsqueda de trabajo deberías ponerte a hacer ejercicios de este tipo. Y si no planeas cambiarte de trabajo, también, te recomiendo que te des un tiempo para resolver este tipo de problemas.

 

Gustavo Sánchez

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.